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

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

草場代表
2020/10/25

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

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

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

今回はライトマップに関してです。

・ライトマップの概要
・ライトマップの生成方法
・3d Studio Maxでのライトマップの調整方法
・ボリュームメトリックライトマップの概要

について述べられています。

まずはライトマップとは何か?
ライトマップはEngineやEditorで自動的かつ内部的に適用されるテクスチャです。
Lighting_Rendering >EssentialConcepts>StartAssetsを選択しBakedLightning_Lightmapsというレベルがあります。ダブルクリックで開きます。

ライティングはまだ行っていません。シャドウにpreviewと書いてあります。このモデルにはライトマップが無いため、手すりのシャドウがあまりうまく描写されていません。ちなみに、シャドウ(影)を単にベイクすることはできません。モデルにライトマップやライトマップのUV座標がまったくセットアップされていないためです。
※UV座標とは、テクスチャ上の点の位置を表すための座標です。 テクスチャの左下を(0, 0)、右上を(1, 1)として座標を定義します。 例えば、画像の中央を表すUV座標は(0.5, 0.5)となります(参照 【連載】Unity時代の3D入門 – 第3回「テクスチャを貼ってみた」)。

これは、モデル(ビューポートのことっぽい)を右クリックして、コンテンツブラウザのモデルのEdit BakedLighting_Lightmap_House2を選択するとわかります。開いてみます。スタティックメッシュエディタが開きます。

メニューバーにはUVというボタンがあり、現在はUVを表示しないように設定されていることがわかります。UVチャンネル0を表示するように設定してみます。

見ての通り、UVは実際あまり適切ではないです。役に立たない。ここで求めらえるのが2番目のUVチャンネルです。2番目のUVチャンネルはライティングに使用されるチャンネルです。このモデルではないため、ベイクすることができません。
では2番目のライトマップUVチャンネルを作成します。Editorで自動的に生成できます。実際、Editorでモデルをインポートするためのデフォルトのインポートオプションで自動的に2番目のUVチャンネルが生成されます。
では詳細パネルに注目します。

LOD 0 > Build Settings(ビルド設定)で、「ライトマップUVを作成」にチェック、「最小ライトマップ解像度」はそのまま、「ソースライトマップインデックス」が0であることを確認、「宛先ライトマップインデックス」が1になっていますがそのまま。「ソースライトマスインデックス」は0で設定しておきます。そして、「変更を適用」をクリックします。そうするとUVチャンネル1が作成されました。ライトマスによるライトマップの生成に使用されるUVです。

これでライティングをビルドする準備が整いました。

では、元の画面に戻ります。「ライティングのみビルド」をクリック。
じゃなくてもう一つ実行しなければならないことがあります早く言え)。
先ほどのBaked云々の詳細パネルで、ライトマップ解像度が4.0にされていますが、これは4×4ピクセルのことを意味します。つまり解像度がとても小さい。解像度はモデルのサイズと作成しているプロジェクトの種類に応じて異なります。このクラスでは512または1024という値が妥当です。ライトマップで詳細が表示されるようにするためです。

そして「ライティングのみビルド」。うーん、うまくいってない気がする。

ワークフロー上の理由やライトマップUVを実際にカスタマイズしたい場合は、EditorでライトマップUVを生成するのではなく、3DモデリングプログラムでライトマップUVを生成することもできます。

コンテンツブラウザでモデルを右クリック、アセットのアクション>エクスポート。それを何らかの3Dモデリングツールにインポートします。ここからはわからん。Blenderとか使えばいいのかな?
UV座標同士は重なってはだめです。

最後にボリュームメトリックライトマップについてです。ビューポートの表示>視覚化>ボリュームメトリックを選択すると、以下のような格子状のものが出ます。

ボリュームメトリックライトは2番目のタイプのライトマップで、これもライトマスによって生成されます。グリッドの密度は、Lightmass Importance Volumeやほかのモデルとの近接度によって変わります。他のモデルの近くでは密度が高いです。

これはライティングのビルド後に、この世界を通り抜けるダイナミックモデル向けにライト情報を保存するために存在しています。
例えば小さい鳥が飛び回っており、その鳥がシャドウに降り立ったとします。鳥はその場所のライト情報の内容をどのようにして知るのでしょう?
ライトはテクスチャにベイクされており、鳥はダイナミックモデルです。つまり、このモデルが行うことのできる方法でライティングテクスチャをサンプリングすることができません。代わりに、ダイナミックモデルはメトリックライトマップを活用しす。これらは最も近いボリュームメトリックライトマップをサンプリングし、そこからライト情報を受け取り、適切な色合いとカラーで自分のシャドウを生成します。

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