動的に照らされるオブジェクト

確認済のバージョン: 2017.3

-

難易度: 中級

動的に照らされるオブジェクトが特に大きな場合、静的なオブジェクトの場合よりも多くのコツが必要となります。多くの場合、非静的に照らされるオブジェクトは位置が変わることが想定されるため、動的ライティングの情報が必要となります。動的オブジェクトは、事前に設定された特定のライティング計算が利用できない場合は、これらの制約事項を念頭に置いて扱う必要があります。 動的オブジェクトのライティングの質を高めるに当たっては、以下の事項を考慮する必要があります。

  • Light Probe Proxy Volume(LPPV) 動的ライティングによって照らされない動的オブジェクトのサーフェスは、一般的にはライトプローブのデータを使用してそのライティング情報を埋めます(プローブの存在しないシーン内では Environment Lighting が使用されます)。シーンに設定されているライティング方法によって、その内容は、間接ライティング情報や、シャドーイングやベイクされた拡散プローブライティング情報など、幅広く異なります。 このライトプローブ方式は通常、小さな動的オブジェクトには問題なく機能しますが、大きなオブジェクトの場合はより精密なライトプローブライティングが必要となります。そこで Light Probe Proxy Volumes が役に立ちます。Unity マニュアルの LPPV ガイドをご覧ください。 Light Probe Proxy Volumes を使用すると、動的に照らされる大きなオブジェクトが複数のライトプローブを使用できるようになり、ライティングの精度が高くなります。

上の画像のカプセルは LPPV を用いていますが、2x2x2 ボリュームのグリッドしか使用していないにも関わらず、ライトプローブのサンプリングが高精度になっているのが分かります。

  • オブジェクトごとのベイクされたアンビエントオクルージョンマップ(AO) 動的オブジェクトは、ライトプローブか環境光によるライティングのみ影響を受けます。特に、オブジェクトが(サンプル内の電車のように)内部に凹んだ形状を持っている場合は、オブジェクトのオクルージョンを事前計算する必要があります。

上の画像で左側の、AO が適用されていない電車では、内部と外部のサーフェスを区別できない状態でライトプローブのライティングデータが適用されています。事前にベイクされた AO がある場合、外部から来るライトと反射の強度を抑制するガイドとしてこのマップが機能し、各段に自然な見た目になります。

オブジェクトごとのアンビエントオクルージョンのオフラインベイキングは、詳細度の高いメッシュから低いメッシュの順にベイクを行うことで、更に詳細なオクルージョンが与えられます。これは法線マップのベイキングの仕組みに似ています。

(注)オブジェクトごとの AO は、他の動的オブジェクトとはインタラクトしません。例えば電車に入って行くキャラクターなどの動的オブジェクトは、シーンからライトプローブデータを受けますが、必ずしも電車内部のオクルージョンとは調和しません。

  • 局所的反射 ほとんどの動的オブジェクトは、それ自体は反射をしませんが、凹んだ形状の内部を持つオブジェクトの場合、そのオブジェクトにリフレクションプローブをアタッチしてそれをリアルタイムで実行できるようにすると、環境のリフレクションプローブから来る意図していない反射反応を抑制する一助となります。

反射の問題を分かりやすく極端に示したマテリアル

  • 想定に基づいた疑似的シャドウと疑似的オクルージョン オブジェクトに特定の条件が想定されれば、ビジュアル品質の向上に使える手法があります。下の画像の例で、電車は常に線路上にあることが想定されており、床の上に影が落ちる領域のライトのオクルージョンを表現するために、Multiply という名前のシェーダーを適用したマテリアルを持つ透明な平面が配置されています。

これに似た手法で他のゲームで頻繁に使用されているのが、キャラクターが実際のシャドウを落とす代わりに、キャラクターの下にブロブ形のシャドウプロジェクターを配置するというものです。リアルタイムレンダリングでは通常、パフォーマンスコストが低くて機能する手法が見付かれば、それをソリューションとして導入できます。

ビジュアルレンダリングを向上できるコツやヒントは他にもありますが、上記のリストが、コンテンツ制作者の皆様が多様な目標ビジュアルに適ったソリューションを考える上での拠り所となれば嬉しく思います。