今回は意外に多い”ライトマップ”の検索をまとめてみました

さいしょに なぜUnity3Dがライトマップ機能(ビーストライトマップ)を搭載するに至ったかを考えてみます。

Unity3Dの場合はUV値がひとつしかモデルに対し扱えないようなんですね
↑これちょっと待って下さい 自分が古い情報だったかも知れません
訂正です: ライトマップシェーダー関連は2番目のUV値をひろってくれるようです。ただしLegacyシェーダーの
扱いになるので、あたらしいバージョンのUnityだと最初からシェーダーがついてこないのかな?
古いバージョンのLightmapシェーダーを導入すれば問題なく複数UVがいけるようです。 ということは
ライトマップを参考にシェーダーをいじれば複数のUVでマッピングが可能なんですね やるな!Unity てへぺろw




高級な3Dアプリだと複数のUVに対応が普通なのですが、リーズナブルな3Dアプリの場合まだ
UV値がモデルに対してひとつしか与えられないようです。
たとえば 背景で質感のテクスチャをタイリングにしたい場合 影(陰影含む)は別のUVにしてやらないと
見た目がおかしくなります。 ライトマップは今までも外部で焼き付けることで実現は可能だったわけですけど
テクスチャのタイリング部分も一枚のテクスチャとしてUVを取らなければならないので
全体のテクスチャ解像度をあげてやらないとクオリティが得られませんでした。

それから 
たとえば背景のモデルを配置しなおしたりライトを変更したりの調整を入れた場合 
外部に背景データを焼き付けるためにいちいち取り出すのは手間がかかるため 
内部にライトマップ機能を持ったほうが作業効率はいいです。
また内部にライトマップ機能を搭載することでプロシージャルな影のベイクが可能になるわけです。
背景を自動生成して影をライトマップにベイクしてしまうことができるので汎用性の高いゲームのシステムを
組むことができます。

などの理由からUnity3Dでは内部データにあえてUVを複数持たずに ライトマップのベイク機能を搭載したと
考えるわけです。
他の高級ゲームエンジンでは複数UVを扱うことができライトマップも実現できますますが 個人的には調整の
時間を短縮できる組み込み型ライトマップのほうが効率が良いと思います。


■ライトマップ作成の流れ(パラメータの説明)
lightmap7lightmap3


●上左画像 モデルをインポートする場合『FBXImporter』の『Generate Lightmap UVs』にチェックを入れます
●上右画像 ライトマップしたいオブジェクトモデルに対して『Static』にチェックを入れます

●画像下 ライトマップウィンドウをひらいて『Bake』のボタンを押すだけでライトマップは作成されます。
シーンにライトを配置することを忘れないようにしてください。

lightmap6

■パラメータの説明1(一部リファレンスからの意訳含む)

◯Mode  デュアルライトマップモードでは、nearとfarライトマップの両方をベイクします。 リファレンスページ http://unity3d.com/support/documentation/Manual/LightmappingInDepth.html を参照していただけると
わかると思いますが。ベイクしたシャドウと通常光源によるシャドウのブレンドが効率化されます。
シングルマップモード時にはfarテクスチャのみレンダリングされます。
◯Quality ハイとロー2種類のレンダリング品質プリセットが登録されています。ファイナルギャザーとアンチエイリアス設定のいくつかに影響を与えます。
◯Bounces GI(グローバルイルミネーション(大域照明))での間接照明として反射する光量です。0の場合は反射が無視されライトの直接光のみのレンダリングとなります。
◯SkyLightColor 空からの光のシュミレートで屋外のシーンで降り注ぐ光とその色を表現するのに適します
  ●SkyLightIntensity 空の光の強度
◯BounceBoost 間接光をブースト(向上)することでレンダリング時に光の減衰を押さえることで 反射する量を押し上げます。
◯BounceIntensity 間接光の強度の乗数。
◯FinalGatherRaysファイナルギャザーポイントから放射される光線の数 で値が高いほど高品質になります。
  ●ContrastThreshold 新しいファイナルギャザーポイントが適応サンプリングアルゴリズムによって作成される色のコントラストのしきい値。値が高いほどスムーズ。
  ●Interporation ファイナルギャザーポイントで色補間される方法を制御。高度、勾配に基づく補間。
  ●InterpolationPoints 補間するファイナルギャザーポイントの数。値が大きいほど滑らかな結果を与え、照明の詳細をスムーズにします。

◯AmbientOcclusion ライトマップテクスチャーにベイクするアンビエントオクルージョンの量。
  ●MaxDistance この距離を越えた場合に計算を除外。
  ●Contrast オクルージョン境界の遷移を制御します。
◯Lock Atras  ロックアトラスが有効時、自動アトラスが実行されず、ライトマップ・インデックスは、タイルとオブジェクトにオフセットが変更されません。
◯Resolution Unityワールド内の単位当たりのテクセルでライトマップの解像度です。値が50で10unit。10unitは、ライトマップで500x500ピクセルを占有している平面になります。


■ファイナルギャザーて?
パストレーシング法によって光線追跡をするレンダリング方法です。ラジオシティの一種で 視線からカメラを通して伸ばした点とオブジェクトとの衝突点を算出してそこから空間中にレイを拡散して飛ばします。そのレイを遮る物体があった場合そのオブジェクトの色と輝度を計算に加味する方法です。 周囲のオブジェクトからの影響がレンダリングに反映されるため よりリアルな表現が可能となります。
ファイナルギャザーの解説→http://area.autodesk.jp/column/tutorial/3ds_max_kitchen_stadium/7_so-blog_finalgather/

■アンビエントオクルージョンて?
物体表面を明るく物体同士の接合部やひび、エッジが立った部分を暗くコントラストする技術です。 
下の参照画像を見てイメージを掴んでいただければと思います。 それってラジオシティじゃないのと思い出す方 それと考え方は同じです。
アンビエントオクルージョンは直訳で環境遮蔽です。 ラジオシティが光源に対してサーフェス面から複数の
レイを出して何本が通るかにより明るさを表現するのに対して、アンビエントオクルージョンはさらに何本が
物体によって遮られるかを暗さ加味してコントラストを上げ絵としてリアルなハーフシャドウを実現するものです。

素材はこちらからお借りしました 
http://me.autodesk.jp/wam/maya/docs/Maya2009/index.html?url=mrfMS_Ambient_occlusion_concepts.htm,topicNumber=d0e506995
comp_occlusion_rays_2


素材はこちらからお借りしました 
http://fallenexile.blogspot.com/2011_01_01_archive.html 
mb



アンビエントオクルージョンに関する説明はここがわかりやすく解説してありました
http://ff14.miya-bi.com/archives/189




■パラメータの説明2
lightmap4

●画像上段 比較用の通常のベイク処理
●画像中段 『Skylight Intensity』は『SkyLightColor』で指定した大域光源の空の色が全体に加味されます
●画像下段 『Bounce Intensity』は物体同士の表面反射による光の映り込み影響をシュミレートします

大きく影響が出るパラメータはこの2種類ぐらいでしょうか


■ライトマップのテクスチャの配列ほか
lightmap5

ベイクされたライトマップは画像右のように配列に取られます。近距離にブレンドされる『near』と
遠方表示される『far』の2種類ができます。
配列のインデックスは ライトマップの解像度指定とアトラスのロック指定に応じて変化します。

作業ウィンドウ左上のドロップダウンセレクトで『Lightmap Resolution』を選択すると 『Static』指定をした
オブジェクトにライトマップの解像度を示すグリッドが表示されます。
右下に『Lightmap Display 』のチェックボックスがでますので『Show Resolution』にチェックを入れてください。
『Shadow Distance』はカメラからの距離に応じてライトマップ表示する距離だったり(near farのマップの切り替わり)をコントロールできます。

■ライトマップの解像度の変更
lightmap2

オブジェクトモデルを選択して『Object』タブで 『Scale in Lightmap』の値を変更することでオブジェクト単位での
ライトマップテクセルのスケール(ライトマップの解像度)を変更することができます。
解像度が足りない(ライトマップテクスチャが荒いとき) または 解像度が高すぎる(遠方に表示されるモデル)
などに状況に応じてスケールの値を変更してやります。

■ライト調整による影のクオリティ変更
lightmap1

ライトを選択した場合は『Object』タブがライトの属性に変更されます。ポイントライトかディレクションライトに限り
ソフトシャドウに値が表示されると思います。『Shadow Angle』はライトによりできる影のボケ度合い 
『Shadow Sample』が影のクオリティだと考えて良いと思います。


と ここまで書いてきて何ですが Youtubeにチュートリアルがありました。これを見て流れを掴んでみてください。

上の動画はビーストライトマップの室内の環境設定でこれで操作はわかると思います。
下の動画はビーストライトマップが搭載される前のライトマップの作成方法で今のところUnity内部で作成された
ライトマップ情報を書き出すことはできない?ようなので 例えばUnityでシーンの仮組みをして他のエンジンに移植
などという場合には下の動画の外部プラグインを使用したマッピングが有効になると思います。






さらに設定について深く知りたい方はこちらへ
http://unity3d.com/support/documentation/Manual/LightmappingInDepth.html
http://unity3d.com/support/documentation/Manual/LightmappingCustomSettings.html



今後の予定ですが背景作成のチュートリアル記事を書くときに またライトマップに関して触れたいと思います。
それではまた