チュートリアル / Road to Stingray
第13回:BEASTによるライトマップのベイク方法

2016.09.02

  • Maya
  • Stingray
  • ゲーム
  • チュートリアル
  • マテリアル・シェーダー・UV
  • 中級者
※ゲームエンジン Stingray は 3ds Max Interactive になり、3ds Max の機能の一部となりました。

こんにちは。今回ステージのライティングを担当した鈴木です。
以前からStingrayに興味があったので今回ちょうどよい機会だったのでお手伝いさせていただきました。

今回のライティングの作業で行ったことをご紹介します。

カラーマップの調整

まず最初にしたことはカラーテクスチャマップの調整です。
カラーテクスチャマップが、極端に暗すぎたり明るすぎたりコントラストが強することが無いように調整しました。
この調整が不十分だと、ライトが当たった結果が不自然になってしまうので慎重に行う必要がありました。

下の図は、地面と岩のカラーテクスチャに関して未調整のカラーマップとなります。

試しに、この状態でライティングをしてみると、下図のように岩の白い部分だけが目立ってしまって不自然な絵になりました。
また、シーンの中に青いライトがあるのですが、地面には青があまり感じられません。

試しに、ライトを明るくしてみると今度は白い部分が明るくなりすぎてしまいました。

このような時に、場合によっては青いライティングが不十分と勘違いをし、ライトをもっと青くしてしまうかもしれません。

この岩のカラーマップに真っ白な部分があるのは現実的ではないので、そこまで明るい色は使わないように調整することで問題を解決しました。
また地面のカラーテクスチャマップの青のチャネルが0となっていたため、青いライティングはほとんど反応しませんでした。
ここも、暗すぎる値はにならないように調整を行いました。

下図が、岩と地面のテクスチャを調整したものです。

カラーテクスチャマップを調整した後でライティングをしたものが下図となります。

ライティングが自然になっていることが確認できるかと思います。

このようにカラーテクスチャはライトの反射率ということを意識して調整を行いました。
RGBが255までの場合で例えると、50よりも暗く描いている部分は暗すぎる可能性があるので注意が必要です。
思ったよりコントラストが足りないテクスチャに感じられるかもしれませんが、それで正しいです。

もしもレンダリング結果にコントラストが足りないと感じた場合は、後々の工程でポスト処理のカラーグレーディング等で調整した方が良いでしょう。
現実世界において例えばデジタルカメラの内部でも、実際の値ではなく大抵の場合はコントラストを強くして出力しています。

ライトマップとIBL

本作でのライティングは、ライトマップを使用したタイプとIBLを使用したタイプを使い分けています。また中にはそれらが混在しているステージもあります。
下図のステージでは、地面にはライトマップを使用し、それ以外の木や小物にはすべてIBLタイプを使用しています。

ライトマップを使用した場合

今回使用したライトマップは、スカイライトとスカイライトのバウンスと平行光源のバウンスをベイクして生成しました。
わかりやすく言うと太陽の直接光以外がベイクされています。
本作で太陽の光をイメージした、平行光源は動的なライトとして使用し影も落としています。

IBLを使用した場合

IBL(Image Based Lighting)を使用するときは、天空のIBLと、場合によっては実際の背景から生成したIBLを使用しました。
平行光源は、ライトマップを使用した時と同じように動的なライトを当て、影を落としています。
このIBLのタイプは配置された木などに主に使用しました。
本作では、天空のIBLの画像は用意せず、Stingrayに標準で用意されているものを使いました。

ライトマップの設定(メッシュ)

ライトマップ用のUVはStingrayの機能で自動展開させています。
これを行うには、ベイク対象のメッシュをunitEditorで開いてGenarate UV-unwrapを有効にします。

これでベイク時にこのメッシュのUVが自動展開されるようになります。

次はStingrayで配置されている個々のunitに対して、ベイクするものにはBake targetを有効にします。

ベイク時にこのメッシュが他に影響を与える場合は、Contributesを有効にします。
通常は有効にしますが、GIの影響を他へ与えたくない場合は無効にすることができます。(ベイク時に他からは見えていないということです)
またベイク用の演出ライトとして自己発光する板などを置いて、他へもその影響を与えたい場合は、自身のベイクはせずにContributesだけを有効にすることも出来ます。
Texelスケールは、他と比べて小さい面積でUV展開したい場合には小さくし、大きい面積で展開したい場合には大きくします。 重要でないものや遠景のメッシュは小さくすると良いでしょう。

ライトマップの設定(シーン)

StingrayのExplorerでDefaultShadingEnvironmentを設定します。

Skydomeのテクスチャを設定します。(今回はStingrayに標準で用意されているものを使いました)

SkydomeMap 空のテクスチャであり、ベイクにも使われます。
SkydomeIntensity 空の明るさ調整ですが、ベイク側には反映されません。
GlobalDiffuseMap 空のテクスチャとセットで使うもので、空のテクスチャから作られたディフューズライト成分です。
GlobalSpecularMap 空のテクスチャとセットで使うもので、空のテクスチャから作られた映り込み成分です。
BakedDiffuseTint ベイク結果にたいして色と強度を調整できます。
ReflectionTint 映り込みに使用される環境マップの強度と色を調整できます。

平行光源や必要なライトのバウンス光がほしい場合は、ライトの設定もしてからベイクをします。

続いて、ベイクの設定です。
StingrayのメニューのWindow>Lighting>Bake Lightmapsを選びます。

Lightmap type 今回は法線マップをほとんど使っていないこともありStandardにしました。
Directionalを使うと指向性を含んだライトマップとなり、法線マップがあった場合に向きによって色や陰影が反映されます。
Illumination type 太陽の直接光まではベイクしたくなかったのでindirectを選びました。
Skylight intensity ベイク時に空の明るさを変えてベイクできます。

設定が終わったらBakeボタンを押すと、ライトマップが生成されます。

ビューの表示にDiffuse Ambientを選ぶことでベイクされたライトマップを確認できます。
ライトマップがない場合はIBLのディフューズが確認できます。

ベイクされたマップの効果を確認

IBL

次はライトマップではなく、IBLを使った場合です。
こちらもSkydomeのテクスチャを設定します。
GlobalDiffuseMapによって空のディフューズライトが反映されます。 GlobalSpecularMapによって空からの映り込みが反映されます。 BakedDiffuseTintやReflectionTintで全体のIBLの受ける量を調整できます。

アンビエントオクルージョン

アンビエントオクルージョンのテクスチャをマテリアルに設定することでIBLの影響が乗算され、IBLによる陰影がつきます。 木の種類が同じもの同士でアンビエントオクルージョンマップを共有しています。

アンビエントオクルージョンのテクスチャは、IBLの受ける量をピクセル単位で調整するもので、基本的にはベイクしたものを使います。
下図がIBLによって照らされたオブジェクトにアンビエントオクルージョンテクスチャを乗算したものとその結果です。
(AOはMayaのTurtleを使ってベイクしました)

また、複数のIBLを使いたい場合は、下記のようにReflection Probeを使用して、指定した位置と影響範囲に限定することもできますが、この方法で映り込み成分は反映されますがディフューズ成分は残念ながら反映されないようです。
Stingrayメニューから、Create > Reflection Probeを選び、シーン内の好きな位置にReflection Probeを配置します。

これら配置したReflectionProbeは影響範囲と補完範囲と補完具合を調節できます。

今回は森の中に追加ましたが、下図のように池に配置しても良いとおもいます。

MayaのTurtleでAOをベイクする手順

まず、ベイクする対象のオブジェクトと地面を用意します。UVは全てのFaceが重なり合わないように事前に展開しておきましょう。

タートルのベイクレイヤーの作成

ベイク対象となるモデルを選択してMayaのメニューから、ライティング/シェーディング > Assign New Bake Layer(TURTLE)を実行します。

アンビエントオクルージョンをベイクするためにilrBakeLayer1というノードが作られ、そのなかに選択したものが登録されます。

TurtleのオクルージョンシェーダのAttributeを設定する

ilrBakeLayer1のAttributeを編集します。今回はFull Shadingのベイクはいらないのでチェックを外します。

オクルージョンシェーダ用のアトリビュートを設定します

サンプル数を上げることでノイズを減らします。

AOのベイク

RenderSettingsを開き、レンダラーをTurtleに切り替え、Render TypeをBakingにします。

Bakingタブで解像度を設定します。
必要があればベイクされたテクスチャが書きだされる場所を設定する。
UVエッジの境界の染み出しの量を調整するEdge Dilationは2くらいでよいと思います。

カレントUVでベイクされるので問題があればuvSet名を指定します。

レンダリングボタンを押してベイクします。
uv空間でレンダリングが開始され、終了するとファイルが書き込まれます。

リムシェーダー

本作では、通常のライトの他にシェーダー側で輪郭が明るくなるようなshadeを割り当てたモデルも多数存在します。

ShadingNetworkは下図のように繋ぎ、Emissiveを使って輪郭が光るようにしました。

まとめ

ライティングマップやIBLの効果でステージ毎に違った雰囲気を作り出す方法をご紹介しました。今回の記事はここで締めさせていただきます。次回は、ポストエフェクトの効果についてご紹介致します。
最後までお付き合いいただきありがとうございました。

開発環境

PC G-Tune「NEXTGEAR-NOTE i5700 シリーズ」
プロセッサ Intel(R) Core(TM) i7-4720HQ CPU @ 2.60GHz 2.60GHz
RAM 8.0GB
OS Windows8.1 x64
グラフィックスカード NVIDIA GeForce GTX 970M
DCCソフト Maya 2016, 3ds Max 2016
Stingray 1.2.526.0

ソースコードをGITHUBで公開中!

先日のイベントで公開しましたが、実はこのプロジェクトのソースコードやプロジェクトのデータは既にGitHubにて公開されています。ダウンロードして頂ければ、どなたでも試してみることが出来ます。

まず、下記のAutodesk社のURLから、Stingrayの30日体験版をダウンロードし、インストールします。

http://www.autodesk.com/products/stingray/free-trial

ダウンロードからテストプレイまでの流れ

GitHub URL
https://github.com/guncys/rtsDev

まず、上記のURLからDownload ZIPを選択しダウンロードした後で、好きなフォルダに解凍します。

次に、Add Existingから既存のプロジェクトを追加出来ますので、先程ダウンロードしたフォルダの中にある、rtsを選択します

プロジェクトがロードされたら、 “rts” を選び、Openします。
初回ロード時のみ、数分のコンパイル処理が走ります。次に、下図の様にlevelsフォルダからstage1.levelを選択しダブルクリックします。

すると、上部ペインのLevel Viewportにマップが読み込まれます。
左上のゲームコントローラのボタンを押すとゲームがスタートします。

Maya Learning Channel
製品購入に関するお問い合わせ
オートデスク メディア&エンターテインメント 製品のご購入に関してご連絡を希望される場合は、こちらからお問い合わせください。