トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

unity_lightmapl

Lightmap

シーン内の指定の形状に対して、光源の情報をテクスチャとして焼き付けます。
これにより、静止物体に限っては間接照明のあるフォトリアルなシーンを表現できます。


Lightmapは静止物体用ですが、動く物体の場合は「LightProbe」というのを使用します。これはUnity Pro Onlyです。

 Lightmap使用手順


形状データをfbxでインポートし、これにlightmapによる焼付けを行う例を示します。

fbxをインポート


Projectウィンドウ内に、fbxファイルをインポートします。
右クリックしてポップアップメニューより「Import New Asset」を選択して対象のfbxファイルを読み込み。
Inspectorウィンドウで「Generate Lightmap UVs」チェックボックスをOnにします。


シーンにGameObjectとして配置


fbxで読み込んだ形状をProjectウィンドウからシーンのHierarchyウィンドウにドラッグして、シーン内に形状を配置します。

Lightmapの焼付けを反映するMeshを選択


シーン上の形状のツリー部を開いて、Meshに相当するものを複数選択します。
1fbxは複数のMeshを内包している場合がありますので、すべて展開した状態でそれぞれ選択を行うようにしてください。

Lightmapの焼付けを行うMeshを指定


メインメニューの「Window」-「Lightmapping」を選択。
Lightmappingウィンドウが表示されるため、ウィンドウ上のObjectボタンが選択されているのを確認。
選択されたMesh数が表示されています。
ここで、「Lightmap Static」チェックボックスをOnにします。
これは、Lightmap対象にする動かない形状を指定しています。ここでStaticにした形状に対してLightmapの焼付けを行うことができます。


lightmapを行うための光源を配置


Directional Lightを配置して、これをLightmapで使用することにします。
LightmappingウィンドウのObjectボタンを押してScene FilterのLightsを選択。
HierarchyウィンドウでDirectional Lightを1つ選択します。
別途、天空光(一色のみですが)も反映させますので、Directional LightのIntensityを少し弱めに設定。


天空光の調整


Lightmappingウィンドウの「Bake」ボタンを押して、Sky Light Intensityを0.0から0.5に変更。
これは、天空を覆う色を1色で指定するものです。その強さになります。
好みでSky Light Colorを指定します(デフォルトは空色)。


焼付けを実行


Lightmappingウィンドウの「Bake」ボタンを押した状態でBake Sceneボタンを押します。これで焼付け計算が開始されます。
少し時間がかかります。Meshの面数や光源数/焼付け時のサンプリング数などによって時間は増加します。


↓Lightmap焼付け前(ShadowMapでDirectional Lightの影を反映済み)

これが、Lightmap焼付け後は以下のようになりました。
↓Lightmap焼付け後


Lightmapで展開されたテクスチャはnear/farの2枚。


形状を動かさない限りは、グリグリ視点を動かしても問題ありません。

 HDRの背景を使ったLightmapはできる?


結論としてはできます。
Lightmappingウィンドウで指定できるパラメータはなく、
Lightmapのエンジンであるbeastの設定ファイルを出力してそこでhdrファイルを指定できます。

後で方法を記述予定、、、。

 Lightmap時の注意点


同一頂点を持つ面が接している場合は、頂点は共有する


Lightmapを行う際に苦手なパターンがあるようです。これはモデラー側でのモデリング時に注意するようにします。
四角形2枚が接している場合に、面として頂点が離れているとLightmap時に隙間が出来たようになる場合があります(本ページの2枚目の廊下画像みたいな感じ)。
こうならないように、頂点は結合させる。
または、極力細かい面になる場合は1つの面にまとめてしまう、などが有効かもしれません。

小さなポリゴンがある場合は、光が飛んだりする?


まだ再現性はつかめてませんが、窓枠のような小さな面が存在する場合に
Lightmapでの光の焼付けがやたら明るくなる場合がありました。

リアルタイム光源とLightmapでの焼きつけた形状の共存


Lightmapで光の焼付けを行った形状はそのままではきれいですが、動くキャラクタが別途ある場合は、リアルタイム光源を反映させたくない場合があります。
Lightmapは「光源の焼き付け」であるので、これにさらに光源効果が加わると二重に光源処理がかかることになり 変な結果になる可能性がでてきます。
この場合はLayerという仕組みを使い、光源処理を反映させたくないMeshを除外します。

各MeshのInspectorウィンドウの右上のLayerで「Add Layer」を選択。
ここで、User Layer8〜31が空いてますのでLayer8に任意の名称を入れます(ここではMyLightmap)。

すべてのLightmapの焼付けを行ったMeshでLayerを「MyLightmap」としました。

次にリアルタイム用の光源を選択して、InspectorのCulling Maskをクリック。
ここで「MyLightmap」のチェックをOffにします。

これで、この光源処理はLayerが「MyLightmap」のものには反映されなくなります。


最終更新時間:2014年01月30日 00時31分47秒