未来を創る、テックコミュニティー

代表技術通信~Unreal Engineで点群表示③ まずはUE4のチュートリアル(7)

草場代表
2020/10/24

こんばんは。代表の草場です。

最近はほぼ、チュートリアルの紹介となっています。オンラインコースのライティングの基礎概念とエフェクトの続きです。

ライティングのベイクーライトマス

ベイクされたライティングに関してです。2つのステップで説明します。最初のステップはライトマスです。
1ライティングをベイクする方法
2ライトマスとは?
3ベイクされたライティングのパフォーマンスへの影響
4ライトをベイクするための品質と設定
5Lightmass Importance VolumeとLightmasss Portalsについて

まず準備で、FundamentalsClassesのプロジェクトを開き、Content>Fundamentals>Lighting_Rendering>EssentailConcepts>StartAssetsから、BakedLighting_Lightmassというレベルを開きます。
住居やプールなどがライティングされていません。すでに複数のランプが配置されているので、いじります。

まずライティングをベイクします。Unreal Engineにはベイクされたライトのスタティックライトとダイナミックライトの2種類があります。
ベイクされたライトは通常品質に優れ、グローバルイルミネーションだけでなく、ラジオシティ、ライトバウンスもサポートしています。そのためとてもリアル。究極のグラフィック品質を追求したければ、ベイクされたライトを使用すると希望する結果が得られます。しかし、ベイクされたライティングの欠点は、ランタイム時に変更できないことです。これはスタティックであるためです。ライティングのレンダリング、つまり事前計算によってベイクが完了すると、ライティングが設定されます。ライティングを変更する唯一の方法は、すべてのライティングを再レンダリングすることですが、当然時間がかかります。

では、再度ライトを配置します。ポイントライトをシーンにドラッグ&ドロップしましょう。台所の壁あたりに配置して、強烈な影をつくります。

この方法で、ベイク後にライトがどのようにバウンスするかを確認できます。
※ バウンス光とは、文字どおり反射光のことを表します。
ライトを配置すると確認できるかもしれませんが、少しわかりづらいですが、Previewという語句がシャドウに表示されています。これはそのシャドウがまだベイクも計算もされておらず、これから計算される予定であることを示しています。赤字でライティングを再ベイクする必要あります、とありますね。

ポイントライトの設定で、可動性に注目します。ライトの計算方法を決定します。可動性は、ライトがダイナミックかスタティックかを制御します。ベイクされたライトとスタティックライトは同じです。
ここでは可動性をスタティックに設定します。ライティングを完全にベイクします。そして、ビルドの横の小さな下向き矢印を押して、ライティングのみビルドをクリック。これでライトマスが起動します。
ライトマスを別のアプリケーションで開くと、なんか表示されます。やり方よくわからず。Swarm Agentとか。ライトマスはUnreal Engineでライティングをベイクするシステムです。このシステムには、Swarm Agentという名称のプログラムが含まれています。これはライトマスから情報を受け取るエージェントです。エージェントをし使用すると、異なるSwarm Agentで構成されるネットワーク全体をセットアップできます。つまりライティングの分散レンダリングができます。
ビルド、結構時間かかった。最初の数パーセントはとても遅いですが、後半急速にスピードが上がります。99%で遅くなるが、ベイクの後半はとても時間かかるからです。数分かかっても遅いわけだはないらしい。

インポータンス ボリュームは検出されず、シーンが大きすぎるため、自動シンクされたボリュームは良い結果は齎しません。シーンの品質とライティングビルド時間を最適化するために、隙間なくバウンディングしたライトマスのインポータンスボリュームを追加してください。

こんなメッセージ出ました。
ベイクでライティングのバウンスが計算され、先ほどのPreviewも消えました。

欠点は、リアルタイム更新ではないことです。ポイントライトを動かしても、ライティングが更新されないです。ポイントライトを動かした結果、2種類のシャドウができてしました。

一つはプレビューのシャドウ、もう一つはダイナミックシャドウです。ライトがスタティックに設定されていても、もう一方のシャドウはベイクされています。ベイク後にスタティックライトを変更するたびに、そのライティングを再レンダリングしなければなりません。

パフォーマンスに関しては、ベイクされたライティングは極めて安価です。そのため、ライトをスタティックに設定してベイクすると、実行時には可能な限り最高のパフォーマンスが得られます。実際、内部で実行されている処理については、環境内すべてのモデルのライトマップを作成します。そのため、基本的にライティングをテクスチャにベイクし、そのテクスチャを環境内のすべてのモデルで使用します。これは単なるテクスチャであるため、ライトの動作、使用しているライトの数、そしてライトの設定は関係ありません。最終的にそのテクスチャが画像テクスチャにベイクされます。そのため、スタティックライティングやベイクされたライティングでは、ライトが1個でも1万個でも、関係ありません。そのため環境を実行すると全く同じ速度とまったく同じパフォーマンスで結果が得られます。
ただし、事前計算のレンダリングプロセスにおいて、ライトが1個の場合に比べて1万個のライトの場合、大幅に時間がかかるのは明らかです。ライティングがレンダリングされた後では、ランタイムの実行時のパフォーマンスは同じです。

覚えておく必要があるのは、ベイクされたライトのパフォーマンスが最も優れているということです。ハードウェアの性能が低い場合、スタティックがよく使用されますが、すべてのライトバウンスなどを含む、最もリアルなライティングを使用する場合は、スタティックライティングを使用することをお勧めします。

ベイクされたライティングの品質については、モデル上のライトマップ自体で品質が、部分的に定義されます。もう一度ビルドボタンに戻り、そのメニューのライティング品質で、ベイクされたライティングの品質を変更できます。

もう一つの設定があります。上記の品質設定とは別です。設定>ワールド設定>ライトマス>ライトマスの設定で、設定いじれます。
上記二つの設定両方をいじると、究極の背景描写ができるかもしれない。
設定>ワールド設定>ライトマス>ライトマスの設定で把握しておくべきは、間接ライティングのバウンス数です。これはライトバウンスの回数を設定します。

静的ライティングレベルスケールは、ライティング全体的な品質とスカイライトのバウンス回数、つまり大気ライトから得られるバウンス回数です。また間接ライティング品質は、特にバウンスしたライティングのライティング全体的な品質に影響します。

上記四つの設定はできる限り品質を追求している場合は、より詳細に設定する必要のある最も重要な設定です。
繰り返しますが、設定を変えるたびに、ライティングを再度ビルドする必要があります。

インポータンスボリュームという設定があります。とても重要。ライトマスインポータンスボリューム。モードパネルのボリュームのライトマスImportanceボリューム、です。

環境でベイクされたライティングを使用する場合は、必ずこのボリュームを使用すること。ダイナミックライティングを多く使用している場合でも、ライトマスImportanceボリュームを使用することをお勧めします。ボリュームをドラッグするとボックスが表示されます。

詳細タブをみると、ボックスサイズの設定があります。あまり大きすぎない値で高品質のライティングを受け入れる必要のあるシーン全体をカバーできる十分な大きさのボックスを作成できる値を入力します。これでボックス内で高品質のライティングが作成されます。シーンのはるか遠方にあるオブジェクトをレンダラーに処理させて時間を無駄にする必要はありません。必要な部分だけ。このボックスでは遠方のジオメトリではなく、より高いライティングをうけいれる領域を手動で定義します。
ライトマスImportanceボリュームをこの世界のほかの地域より、高品質のライティングを得ているものの周辺に配置します。通常これはゲーム内のプレイ可能領域、またはフィルムや建物などのカメラ近くの領域を指します。基本的にはカメラが配置されることが見込まれる場所の近くです。厳密である必要はないです。ボックスが建物から少しはみ出してる場合でも問題ないです。プールも含むようにします。で、また、ビルドから、ライティングのみビルドをおこないます。ライティングの質が先ほどよりも少し良くなっていると思います。もう少し設定します。

最後に、ライトマスボリュームと同様のライトマスポータルという類似のアクタがあります。モードパネルで、Lightmass_Portalsと検索。それをシーンにドラッグ&ドロップ。詳細タブのトランスフォームの拡大縮小で大きさを定義できます。例えば窓の大きさと同じに設定。

そしてまたライティングのみビルド。ライトマスポートあるがライティングを行う際は、スカイライトや大気からのライティングが、構造物にバウンスするのをサポートすることです。教会を思い浮かべてください。教会には非常に幅の狭い窓があります。ライトがその非常に狭いスペースを通過してバウンスして室内の空間を適切に照らし出す可能性はかなり低いです。そのための代わりにライトマスポータルを設置します。ライトマスポータルでは設定したスペースを数化してライティングをバウンスさせることに重点を置き、処理するようエンジンに指示します。ライトマスポータルで設定した場所ではバウンスするライティングがさらに絵らえます。そのため、ライトのバウンスにより室内が外側の空によってさらに照らされるようになります。

あとはいろいろ試してみること。

この記事を書いた人
草場代表
エディター