This is the documentation for Enlighten.

2. Enlighten のしくみ


Enlighten SDK は、エンジンにインテグレートして Enlighten ライティング パイプラインをビルドできるツールおよびライブラリを提供します。Enlighten は、リアルタイム レンダラー用にシーンを作成する一般的な方法とインテグレートできます。

ハードウェアで加速された API に基づいた標準的なレンダラーは、三角メッシュの形態でジオメトリを含むシーンで動作します。メッシュの定義は、一般に、単一の API 呼び出しで描画できるジオメトリの最小単位に対応します。複数のメッシュを組み合わせると、より複雑なオブジェクトや風景の一部を形成できます。一部のメッシュは静的ですが、ランタイムで動かせるメッシュもあります。一部のメッシュは剛性ですが、骨組みのアニメーションで変形できるメッシュもあります。

Enlighten パイプライン

Enlighten パイプラインの 2 つの主なコンポーネントは、Enlighten プリコンピュートEnlighten ランタイムです。

Enlighten プリコンピュートはシーン ジオメトリを入力として受け取り、ランタイム データを計算して最適化し、出力します。

Enlighten ランタイムは、エンジンによって提供されるライティング構成およびマテリアル色情報とともに、プリコンピュートされた Enlighten ランタイム データを入力として受け取ります。Enlighten ランタイムは、ラジオシティを解き、ライトマッププローブ、およびキューブマップという 3 種類の出力を生成します。これらの Enlighten の出力には、多数の光源からの複数のバウンスからなる拡散した間接照明のみが含まれます。レンダラーがこれらの出⼒をサンプリングして、各メッシュの間接光を提供します。

Enlighten の出力は広くサポートされるデータ形式を使用しているため、任意のレンダラーまたはグラフィック API で使用できます。 

ジオメトリとマテリアルカラー

直接照明のみ

直接および間接照明

ラジオシティ

Enlighten は間接光の計算にラジオシティ法に基づくアルゴリズムを採⽤しています。Enlighten プリコンピュートは、シーンのサーフェスをクラスタと呼ばれるまとまりに分割してから、クラスタのすべてのペアの間で可視性フォーム ファクターを計算します。Enlighten ランタイムは、ラジオシティ⽅程式を段階的に解きます。⼀度のイテレーションが光の反射⼀回分に相当し、イテレーション回数に制約はありません。

クラスタサイズが⼩さいほど間接光の精度が⾼まりますが、プリコンピューティングで必要になる計算は増加します。リアルタイム レンダリングでは、相対的に⼤きなクラスタが、最⼩限の計算時間で⼗分な精度を実現します。

クラスタに分割されたサーフェス

ラジオシティ計算の結果

間接光出力

非同期更新

Enlighten ランタイムは、レンダリングをブロックすることなく、メイン レンダラーと並行して CPU 上で完全に非同期に実行されます。⼀般に、間接光をフル フレーム レートで更新する必要はありません。Enlighten 更新とレンダリングが切り離されているため、処理時間とライティング遅延のバランスを取ることでパフォーマンスを調整できます。これは、レンダラーが既に GPU をその上限まで押し上げていて固定フレームレート⽬標 (コンソールでの 60FPS、VR/AR アプリケーションでの 90FPS など) に達している場合に特に役に⽴ちます。

高速イテレーション

Enlighten はシーン構成のすべての側面を完全に制御できますが、実際には構成プロセスの大部分を自動化する必要があります。Enlighten プリコンピュートを実行する前に、ライトマップ解像度、ライトプローブ密度、および反射に使用されるキューブマップの位置を変更できます。プリコンピュートの後、ライティング アーティストはライティング セットアップをイテレーションし、変更に対するフィードバックを即座に得ることができます。その後、アーティストは望ましい結果が得られるまで、ライティングを微調整および試験できます。

Enlighten ライトマップ

レンダラーは、Enlighten ライトマップをサンプリングして、静的なメッシュと剛性のメッシュの両方に対して間接光の拡散反射を提供します。Enlighten はライトマップ UV 座標を自動的に生成できます。また、効率的な UV レイアウトの生成に役立つツールを提供します。つまり、アーティストは各メッシュに固定サイズのライトマップを指定するのではなく、ライトマップ ピクセルのサイズをワールド単位で指定でき、UV レイアウトは自動的に調整されます。

Enlighten のライトマップには低周波の間接光のみが含まれるため、従来のベイクされたライトマップより低い解像度でも十分です。標準的なシーンでは、1 メートルあたり 1 ピクセルの解像度が使用されます。Enlighten ライトマップのランタイム コストは、更新するピクセルの数に比例して増加します。ピクセル サイズを調整して、コストと品質の適切なバランスを見つけることができます。

上の画像は、Enlighten がライトマップをサーフェスにマッピングする様子を示しています。色の付いたエリアは、チャートと呼ばれるライトマップ UV 空間の連続エリアです。たとえば、画像の中の青色の壁は 1 つのチャートです。

通常、Enlighten のライティングには 2 つのチャートが接する場所にハード エッジが現れます。Enlighten のライトマップ解像度は通常の静的ライトマップ ベイクに必要な解像度よりはるかに低いですが、高品質な間接光を実現するには十二分な値です。

Enlighten プローブ

Enlighten プローブは、静的なメッシュと剛性のメッシュの両方、およびランタイムで移動または変形するメッシュに対して、間接光の拡散反射を提供するためにサンプリングされます。

複雑な有機形状または多くの小さな部分を含むメッシュでは効率的なライトマップ UVの生成が難しいことがあります。プローブを使用すると、これらのメッシュをより効率的にライティングできる場合があります。

Enlighten ライト プローブは、球面調和関数を使用してエンコードされた空間のボリュームに対してライティングを提供します。Enlighten ランタイムは、各メッシュの位置に基づいてサンプリング元となる近くのプローブを判断します。

Enlighten では、シーン内のプローブの配置を自動化するためのツールが提供されています。アーティストは、シンプルなツールを使用してシーンのエリアごとに希望するプローブ間隔を指定するだけで済みます。

上の画像は、自動プローブ配置の結果を示しています。一般にサーフェスからの距離が増加するにつれてライティングの変化の頻度は減少するため、部屋の中央ではプローブの密度が低くなっています。

プローブの配置および補間に独自のソリューションを使用することもできます。

Enlighten キューブマップ

Enlighten キューブマップは、特定の位置からシーンをキャプチャします。これを使用すると、光沢のあるサーフェスに反射を作成できます。このテクニックは、ローカルイメージベースドライティングと呼ばれます。

アーティストは、シーンにそれぞれの Enlighten キューブマップを配置し、キューブマップからの反射がサーフェスに適用されるボリューム (通常、ボックスまたは球) を定義します。

キューブマップ反射は中程度のラフネスのマテリアルには効果的ですが、正確な鏡の反射は作成できません。