トップ 一覧 検索 ヘルプ RSS ログイン

unity_lightmaplの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!Lightmap

 このページは、Unity4以前の古い情報になります。


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

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

!!Lightmap使用手順

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

!fbxをインポート

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

!シーンにGameObjectとして配置

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

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

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

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

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

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

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

!天空光の調整

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

!焼付けを実行

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

↓Lightmap焼付け前(ShadowMapでDirectional Lightの影を反映済み)
{{ref_image unity_gi_room_img_before.png}}
これが、Lightmap焼付け後は以下のようになりました。
↓Lightmap焼付け後
{{ref_image unity_gi_room_img_after.png}}

Lightmapで展開されたテクスチャはnear/farの2枚。
{{ref_image unity_gi_room_img_after2.png}}

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

!!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)。
{{ref_image unity_gi_room_layer_01.png}}
すべてのLightmapの焼付けを行ったMeshでLayerを「MyLightmap」としました。

次にリアルタイム用の光源を選択して、InspectorのCulling Maskをクリック。
ここで「MyLightmap」のチェックをOffにします。
{{ref_image unity_gi_room_layer_02.png}}
これで、この光源処理はLayerが「MyLightmap」のものには反映されなくなります。

----
{{lastmodified}}