弊社はVRで建物を作ることがよくあります。屋内の場合はリアルな影や陰影を表現するために、リアルタイムGIではなくライトマップのベイクが不可欠です。質感の肝である「鏡面反射」を表現することができずに、のっぺりとした画になりがちです。なくなってしまいました。Unity4の時は重宝したものです。配置するのですが、何か物足りません。リアルタイムライトのシャープなスペキュラーが欲しいところです。ライトを追加すればいいじゃんスペキュラーを出したいのなら、新たにライトを追加すれば良いのでは?そうです、ライトが無いと何も始まりません。単純にライトマップを焼いた時のライトをそのままコピーします。確かにスペキュラーがでました。当然ながらディフューズも上乗せされてしまうので、せっかくのライトマップが台無しです。シェーダーのコードを少し改造して、ライトマップ後にリアルタイムのスペキュラーのみが乗るようにしてみたいと思います。シェーダーのライティングモデルについて改造を始める前に、ライティングモデルについて簡単に説明します。シェーダーを記述する時には必ず以下のようにライティングモデルを指定します。BlinnPhong(ブリンフォン)というモデルが、デフォルトで用意されています。この2つを使っていました。使用すると、ディフューズのみで、スペキュラーは無視されます(計算しません)。使用すると、ディフューズとスペキュラーがでます。物体に到達した光がどのように反射(吸収)されるのか(どんな見た目になるのか)、という計算をするのが、ライティングモデルです。モデルの計算式の中で、ライトマップによるディフューズとライトによるスペキュラーはそのままに、ライトによるディフューズ部分だけを削除すれば、ライトマップ後にスペキュラーのみを上乗せできるのではないか?という事です。インストールフォルダの中に入っています。いうファイルがあります。このファイルをプロジェクトにインポートします。同フォルダに適当にシェーダーファイルを作って、以下のように読み込みをします。・ENDCGこれで、インストールフォルダの方ではなく、プロジェクトにインポートした方のコードを参照します。中に以下のようなコードが含まれています。シェーダーのライティングコードです。この2つのコードの中に、いかにも怪しい共通部分があります。鏡面反射を残してすべて黒くなりました。中で、引数として渡されたアルベド(マテリアルの色)に対し、ライトマップとリアルタイムライトのディフューズ処理がされているようです。ここから、リアルタイムライトのディフューズ処理のみを削除すれば目的の画になりそうです。以下のようにコピペし、シェーダーに指定しましょう。冒頭部分に以下の様な記述があります。シェーダーは、高スペックのPCから低スペックのモバイルまで、それなりのパフォーマンスで、大体同じような見た目になるように、プラットフォームによって、自動的にコードが変わる設計になっています。改造してみようと思います。記述は見つかりません。いう別ファイルに記述されています。例によって、このファイルも同じフォルダにインポートすれば良いのかと思いきや、どうしても、インストールフォルダ側のファイルを参照してしまう様で、うまくいきません。内にコピペして改造する事にしました。以下のように3つのファイルを参照しています。参照していないので、ただ必要個所をコピペしただけではエラーになりそうです。追加で参照しておきましょう。関数名を変え、新たに追加したライティングコード側で使用するようにしましょう。改造ようやくここまでたどり着きました。内のライトマップによるディフューズとライトによるスペキュラーはそのままに、ライトによるディフューズ部分だけを削除します。関数内の最後の方に、以下の様な記述があります。1);赤くハイライトしたところが、ライトによるディフューズの加算部分なので、ここだけ削除します。すると・・・ライトマップによる高品質なディフューズの上に、ライトによるスペキュラーのみが上乗せされました。おわりにライトマップをベイクすると、大幅にドローコールが削減できます。使いどころやライトの数を気にしつつ、パフォーマンスが落ちない程度に、試してみてください。キャンセルメールアドレスが公開されることはありません。date*日本語が含まれない投稿は無視されますのでご注意ください。TSUMIKISEISAKU。