Unity道場08 Unityとアセットツールで学ぶ「絵づくり」の基礎...

43
Unityとアセットツールで学ぶ 「絵づくり」の基礎 ライティング 虎の巻 ユニティ・テクノロジーズ・ジャパン合同会社 コミュニティエバンジェリスト 小林信行 2016/07/10 Sun @Unity道場 08

Transcript of Unity道場08 Unityとアセットツールで学ぶ「絵づくり」の基礎...

Unityとアセットツールで学ぶ「絵づくり」の基礎ライティング虎の巻

ユニティ・テクノロジーズ・ジャパン合同会社コミュニティエバンジェリスト

小林信行 2016/07/10 Sun @Unity道場 08

絵づくり講座・虎の巻では実践的なテクニックを

扱います!

•  『絵づくり講座』本編のほうはどうでしたでしょうか? こちらの『絵づくり講座』虎の巻では、本編での考え方を元に現場ですぐに役立つ実践的なテクニックについて扱っていこうと思います。

最低限チェックしておきたいUnityの設定

•  Edit>Preference>GI Cacheより、GIキャッシュのサイズ ⇒ベイクスピードに直結します

•  File>Project Settings>Quality ⇒ディレクショナルライトの影の品質他に影響します

•  Main CameraのInspector ⇒HDRはONになってる?

•  File>Build Settings>Player Setting ⇒カラースペース及びレンダリングパスの設定

最低限チェックしておきたいUnityの設定

•  GI Cacheのサイズ(Maximum Cache Size)を大きめ、かつSSD等の高速のドライブに設定する

•  影の形や光の差し込む形が重要な時は、Shadow ProjectionをClose Fitにする。無視できるならStable Fitで。

•  Main CameraのHDRにチェックを入れる(Anti AliasingをDisabledにする)

•  Color SpaceをLinearにする。※ほぼPC/コンソール向けの設定。

•  Rendering PathをDeferredにする。※ほぼPC/コンソール向けの設定。

3DCGで使われる「ライト」の特性とは?

•  3DCGで使われる「ライト」オブジェクトは、現実世界のライトとはかなり違った性質を持っています。そのことを改めて押さえておきましょう。

3DCGで使われる「ライト」の特性

•  「ライト」自体はレンダリングしても光らない。「ライト」はそれ以外のオブジェクトを「照らす」役割しかしない。

•  オブジェクトを「照らす」とは、この場合、そのライトによって照らされる範囲、影になる範囲を特定することである。

•  照らす対象や影を落とす対象を選択したり、そもそも影を落とさないようなコントロールもできる。

•  ライトの物理的法則(エネルギー保存の法則や逆二乗の法則)に従わないライトも設定することができる。

•  3DCGでは、「光っていること」と「照らしていること」には、直接関係はない。

硬いライト/柔らかいライト

•  ライトには、その光質に応じて、「硬いライト」「柔らかいライト」というものがあります。それらを使い分けることで、マテリアルの質感を引き出すことができます。

硬いライト/柔らかいライト

•  「硬いライト(光)/柔らかいライト(光)」という言葉は、スタジオ撮影のライティング技法でよく使われる言葉。主に光質を差し、ソフトネスとも呼ばれる。

•  「硬いライト」とは、直進性のある光(スペキュラーライト)のことで、物の影がシャープに出る光を指す。マテリアル感も、シャープになりメリハリが付きやすい。

•  「柔らかいライト」とは、拡散光(ディフューズライト)のことで、光がまわり、物の影がソフトに出る光を差す。マテリアル感も全体のディテール重視で、シャープ感は少なくなる。

•  リアルタイム3DCGの場合、ベイクドライトの多くは「柔らかいライト」ということができます。一方、リアルタイムのディレクショナルライトなどは、ソフトシャドウの設定を入れても硬い傾向があります。(※ただし、あくまで私感)

「光をまわす」とは?

•  GIシステムでは、いわゆるライティング用語のひとつである「光をまわす」ことができるようになります。「光をまわす」ことは、シーン全体の基本となる明るさを設定する意味でも重要です。

「光をまわす」とは?

•  実写のスタジオライティングでは、「光をまわす」とは、主にディフューザー等を利用しながら、柔らかいバウンス光をシーン全体に行き渡らせることを意味しています。

•  Unityの場合、オープンなシーンか、遮蔽されているシーン(室内のシーン)かにはよります。

•  オープンなシーンの場合、主にEnvironment Lighting内のAmbient Intensityの値を調整することになります。

•  遮蔽されているシーンの場合、主にGeneral GI内のIndirect Intensityの値およびBounce Boostの値で調整することになります。

Ambient Intensityをあげることで、陰の部分が明るくなっていきます。

ベイクドライトの場合、Indirect Intensityをあげることで、陰の部分が明るくなっていきます。

ベイクドライトの場合、さらにBounce Boostをあげることで、バウンス光がさらに明るくなります。

「シーンを暗くする」

•  シーンライティングは、まず「シーンを暗くする」ことから始まります。そのやり方は、開放シーンと室内シーンでは違います。まずはそこから押さえましょう。

「シーンを暗くする」

•  「シーンを暗くする」のは、「光をまわす」のとちょうど逆の設定をします。

•  開放シーンの場合には、主にAmbient Intensityの調整になります。(ほとんどの場合、Skyboxの明るさの設定でしょう)

•  遮蔽されているシーンの場合には、Reflection Probeを遮蔽する壁に添ってサイズ調整&配置し、Box ProjectionをONにします。遮蔽する壁は、Mesh RendererのCast ShadowsをTwo Sidedなどにし、外光のがすり抜けないようにします。さらにLightMap StaticをONにすることで、ベイクドライトがバウンスするようにします。

「モチベーション」と「オフスクリーンスペース」

•  シーンライティングを進める際に必要な考え方として、そのシーンを照らしている「モチベーション」(光源)が何かを特定していくことが大切です。

•  特に「モチベーション」の中でも、画面外の空間(オフスクリーンスペース)に存在するモチベーションがとても重要なことがあります。

•  これらのモチベーションを考慮に入れた上で、「ストーリーを語る」ようにライティングを設定しましょう。

「モチベーション」と「オフスクリーンスペース」 •  「モチベーション」(光源)の選択に当たって重要なのは、どんなタイプのライトを

使用するかの選択です。それには各ライトの特性をよく知る必要があります。

•  各ライトは、リアルタイムで使用する場合とベイクして使用する場合とで、特性が違っている場合もあります。

•  特にベイクドライトを使う場合には、ライトの減衰について注意して配置するとより高い効果が得られます。

•  「オフスクリーンスペース」に配置したライトは、特に減衰特性に注意しましょう。例えば、室内に差し込むモチベーションとして、どのようなライトを選択するかで、画面映えが相当変わります。

•  昨今のプリレンダーCGでは、ほとんどの固定ライトにはエリアライトが使われています。使い方はむずかしいですが、エリアライトをうまく使いこなせると、ライティングの品質がぐっとあがります。

リアルタイムライトとベイクドライトの使い分け

•  シーンライティングの後半は、リアルタイムライトとベイクドライトの使い分けがポイントとなります。ここではその使い分けについて考察してみましょう。

リアルタイムライトとベイクドライトの使い分け

•  「動くライトはリアルタイムで」、というのは至極当たり前ですが、それ以外にも以下のような使い分けが考えられます。

•  メリハリのある影やメリハリのある光の差し込みが欲しい時に、リアルタイムライトを使う。(特にディレクショナルライト)

•  一方、柔らかい印象の影が必要で、かつその影が動かなくてもよい場合には、積極的にベイクドライトを使う。

ライトの配置について

•  ライトの配置の仕方は、シーンごとに違って当たり前なので、絶対ということはありませんが基本があることは間違いないです。ここではその基本について押さえていきましょう。

ライトの配置について

•  基本は、カメラをシーンの中心となるモチーフに向けて配置した後で、主光源となるキーライト、補助光源となるフィルライト、さらに形状などを強調したりするためのリムライトやバックライトの順に増やしていきます。フィルライトは、GIによるバウンス光をそのまま使うこともあります。普通はキーライトを一番光量を高くします。

•  複数のフィルライトを使用することもあります。その場合、光の加法混色を使ってホワイトの光を作るようにすると、非常によい効果が得られます。

•  多くの場合、キーライトの向きとカメラの向きを合わせてしまうと、のっぺりとした画面になってしまうので、避けるべきです。

キーライト、フィルライト、バックライト配置の一例。カメラの向きと同じ向きのライトがないことに注意。

高さとキャラまでの距離を変えて、ポイントライトを配置。

ライトの配置について •  昼間の自然光によるシーンライティングの場合、キーライトにあたるのは太陽

光です。太陽光としてディレクショナルライトをモチーフに向けて設定した後で、場合によっては追加のスピルライト(こちらはキーライトよりも暗めにするが、代わりにカラーを入れる)を追加します。さらにフィルライトとしてのスカイライトを追加し、バウンス光を足していきます。

•  もしくは、スカイライトやフォグを調整することで基本となるアンビエントライトの明るさを確保した後で、複数のリアルタイムのディレクショナルライトやポイントライトを追加してスペースを分割していくという手法もあります。モチーフが移動してしまうゲームなどのシーンの場合、こちらのほうがよい場合もあります。この場合、アンビエントライトは抑えめにして、その他のリアルタイムライトでシーンを彩ってやると、非常によい結果が得られます。(※Deferred推奨)

P.A.M.E.L.A.. / NVYVE STUDIOS

ライトの配置について

•  屋内の自然光によるシーンライティングの場合、まず最初に設定するのは窓から入ってくる外光です。スカイライトを強めに設定することもありますが、それよりもよいのは、窓の外に大きめのエリアライトを設定し、室内に光を引き込むことです。引き込んだ光は、室内でバウンスさせて、基礎となる明るさを作ります。次に窓から光が直接差し込んでいる場合には、太陽のスピルライトに当たるディレクショナルライトを設定します。最後に室内に照明がある場合には、そこにポイントライトなどを配置していきます。

•  屋内の自然光によるシーンライティングの場合、部屋や場所ごとに明暗のメリハリを付けることで、スペースを分割してやることが大切です。全てが明るすぎると、モデルルームのようでカッコ悪い印象になります。

Box Projectionで遮蔽する。

各蛍光灯に同サイズのエリアライトを配置する。

チーティング(作為)について

•  特にリアルタイムでの3DCGのライティングに関しては、現実のイメージに合わせるために様々なチーティング(作為)が用いられます。

•  ここではそれらのチーティング(作為)のテクニックについて考えてみましょう。

チーティング(作為)について

•  チーティング(作為)には以下のような手法があります。 Ø  実際の光源とは違う位置に、ライトオブジェクトを置いてライティング補正をする。

Ø  ライトオブジェクトの位置にエフェクトを配置することで、光っているように見せる。

Ø  ライトオブジェクトの位置にエミッシブオブジェクトを配置することで、フィジカルライトのように見せかける。

Ø  スタティックでないオブジェクトに、ベイクドライトの影響を混ぜる。(ライトプローブ)

Ø  イメージエフェクトを使って、リアルタイムに陰の補正をする。(SSAO)

Ø  シーンデプスに合わせてカラートーンを変える。(カラーフォグ)……などなど

ライトマップベイクに適したアセット制作について

•  ライトマップベイクを行う前提でアセット制作を行う場合の注意を考えてみましょう。

ライトマップベイクに適したアセット制作について •  以下のような点は注意したほうがよいです。

Ø  【重要】UVは重ならないように展開する。

Ø  モデルはFBX出力前にフリーズし、履歴も整理して、余計な情報がない状態にしておく。

Ø  Unity上でマイナススケールで反転するのは、なるべく避ける。

Ø  ライトマップを焼いて変なまだらのようなアーティファクトが出る場合には、該当オブジェクトのメッシュインポータで「Generate Lightmap Uvs」に☑するとよい。

Ø  【Tips】ライトマップベイクの調整中は、ライトマップをあまり高い解像度にしない。(多分だけど、ライトマップ用にUV2を再展開する際に、ライトマップの解像度が高いと UVのパッキングに時間がかかる気がする ※あくまで個人的な印象)

•  以下のブログは参考になるかも

『デスクトップとコンソールのすごいリアルタイムGI』http://blogs.unity3d.com/jp/2015/11/05/awesome-realtime-gi-on-desktops-and-consoles/

Maya/Unity間のシーンのイン/アウト

•  特に特定ライトのベイクや、モバイル向けの軽量化を考えていくと、Maya/Unity間でシーンをイン/アウトさせながら作業したくなる時がしばしばあります。ここではその方法およびちょっとしたTipsを紹介します。

Maya/Unity間のシーンのイン/アウト

•  Unity⇒Mayaは、Export2Maya(AssetStore/$60)を使うのがベスト。UnityのシーンをMayaのMAシーンに変換して、そのまま引き渡せるので超便利。

•  Maya⇒Unityは、FBXでのエクスポートになる。その際、Maya側で座標変換が楽になるようなオブジェクトを作って、ライト位置やカメラ位置にペアレントコンストレイントを使って配置しておくと、Unityに引き渡した後で、ライトやカメラオブジェクトの再配置が凄く楽になる。

MayaのロケータだとFBXで渡せないので、テンプレート設定したメッシュオブジェクトを代わりに使う

This extension requires one license per seat Requires Unity 5.3.4 or higher. Importing assets into Unity is easy, but getting assets out of Unity can be tricky. Export2Maya will export your Unity scenes directly to the Maya Ascii file format, generating Maya scene files for you. Ver 2.2.1 supports the following: - Rewritten from the ground up - New Edge Generation Method - 3x faster - Skinned Mesh Export * - Blendshape Export - Single & Multi Frame - Mesh Normals - Mesh UVs - Mesh Lightmap UVs (with correct tiling and offset) - Mesh Vertex Colors - Per-Object and Per-Face Material Assignment - Terrain Export * - Directional Light Export - Point Light Export - Spot Light Export - Area Light Export � - Display Layer Lightmap Association. Objects that share the same lightmap index will be grouped under different display layers for easy selection in Maya. - Includes accompanying Maya MEL script for easy scene setup once inside Maya. Note - Skinned Mesh bind poses cannot be exported currently due to limitations in the way Unity stores bind poses for skinned meshes. Note - Terrain detail meshes and grass are not currently supported yet. Planned for next version. Note - Texture Export relies on your shader having standard named shader properties. Supported properties: _MainTex, _SpecGlossMap, _BumpMap, and _EmissionMap. As always if you find a bug, or have a suggestion to make this tool better, do not hesitate to contact me.

https://www.assetstore.unity3d.com/en/#!/content/17079