VRM4U
VRM4U copied to clipboard
【質問】MtoonLitでインポートした時、マテリアルの明るさをDirectionalLightに依存しない形で調整する方法。
バグ報告ではありませんがよろしくお願いいたします。
MtoolLitを用いてインポートした場合、DirectionalLightのIntensity等の値によってマテリアルの明るさ?が設定されると認識しております。 しかしDirectionalLightを使いたくない、例えば真っ暗なステージにRectLightやPointLight等を置いたステージの場合、キャラクターが暗くなりすぎるためもう少し明るくしたいという状況がしばしばありました。
マテリアルをコピーし、bUseLightを切るという方法も考えたのですが可能ならばもう少し柔軟に変更させたい(bUseLightをFalseにするだけだと一番明るい状態しか使えない)こと、ブループリント上から動的に変更させることが出来そうにないこと、各マテリアルをコピーすると膨大な量になり少々管理が難しいという3点を理由に、bUseLight以外でDirectionalLightに依らない調整方法を調査しました。
結果BP_VrmUtilComponentのGet Main Directional Light ComponentがDirectionalLightを参照していると判断しました。
そこで同関数を少しだけ編集し、DirectionalLightを使用しているという状態は変えず、AffectWorldをオフにしてもMain Light Component LevelにセットすることでDirectionalLight内の情報は使いつつ、光自体は使わない。という事が出来ないかと試したのですがAffectWorldを切るとDirectionalLightの情報は使われていないように見えました。
ここまではわかったのですが、ここから先どのようにマテリアルの明るさが設定されているかというのを追う事が難しかったためご相談させていただきたく投稿させていただきました。いくつかのアプローチがあるかと思いますがどのような方法でも構いませんのでご存じであれば教えていただければ大変うれしく思います。よろしくお願いいたします。
最初に、そのような制御は難しいということを伝えておきます。 MToonLitの描画にはそこそこ十分な光量のDirectionalLightが必要です。FilmicTonemapを逆変換して色を再現しているため、極端に明るい/暗い環境では 大きく色ずれがおきます。また、陰影の描画には光源方向が必要です。
キャラクタ全体の明るさを制御するには、LightColorAll や LightColorMain を利用することをオススメします。 これはマテリアル調整パネルや、MToonMaterialSystemアクタで調整できます。 一例としては、DirectionalLightを暗めに設定した上でLightColorAllに極端に大きな値を入れて補正する ことが可能です。
ただ前述の繰り返しになりますが、暗いシーンをLightColorAllに1以上の値を入れて補正すると 色ずれがおきやすいです。 キャラ用にDirectionalLightのチャンネルを分けて、陰影は全てLightColorAllで制御する くらいのほうが 扱いやすいかもしれません。 最終的にToon的な見た目を優先してMToonLitを利用するか、ライト演出を優先してSSSProfileを利用するか、悩ましいところですね。
すみません、一回仕事用アカウントで投稿してしまったので削除して再投稿を・・・。
回答ありがとうございます。
私に知識が無くて色々と複雑な質問になってしまっておりましたが、とりあえずのやりたいこととしてはVRMキャラ以外にはDirectionalLightの光を当てないままVRMキャラを明るくするという事がしたかったのでライトチャンネルが使えればとりあえずの要件を満たせておりました・・・。
詳細に回答いただいたにも関わらず、ライトチャンネルという機能を知らなかっただけという情けない話で申し訳ありません。 ひとまずライトチャンネルで様子を見つつ、さらなる調整が必要であればいただいた情報でもって調整を行おうと思います。 ありがとうございました!