テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

【Unity】ベイクした影とリアルタイムな影を混ぜる新しい幾つかの手法と、その他諸々【5.6b3】

f:id:tsubaki_t1:20170103223736j:plain

Unity 5.6(b3)より、Experimental(実験的)で提供されていた新しいライトマップの機能がベータ版に統合されました。

ライトのMixedモードがStationaryモードに変化

 

ライトのモードで、以前はMixedの項目がStationaryモード(固定モード)に変わりました。

βではstationaryモードでしたが、リリース時にmixedとbakedに戻りました。
この記事ではstationaryとして記述します。

このモードは基本Mixedと同じような物で、動かない(Lightmap Staticな)オブジェクトは静的な影を落とし、それ以外のダイナミックなオブジェクトにはリアルタイムな影を落とす機能です。

そのままだと綺麗に混ざらなかったのですが、Unity 5.6から色々と自然に混ぜる為のアプローチが加わった感じです。

なお、Stationaryモードによる影を混ぜるアプローチは、Stationary Lighting Modeによって異なります。

f:id:tsubaki_t1:20170103225557j:plain

ベイクした影を表現しつつリアルタイムな影も使いたい

事前計算した影を「マスク」として準備しリアルタムな影と同じ色を使いたい

Unity 5.6よりShadow Maskが使えるようになりました。

これは今まで「影や間接光や光沢の表現をテクスチャに焼いていた」のを「混ぜる影は影、間接光は間接光(と焼き付けた影)」に分けて扱う機能です。

f:id:tsubaki_t1:20170103224841j:plain

これは単純に「影のマスクだけ作って、塗るのはリアルタイムと一緒」的な事をしてるんじゃないかなと。

比較した物を用意しました。矢印の付いた樽がリアルタイムな樽、ソレ以外はライトマップを焼いた樽です。事前に計算した影とリアルタムな影、比較して自然に描画出来ています

なおShadow Maskのみだと、リアルタイムなオブジェクトにダイナミックに影を落とせません。上の画像は、【Unity】テクスチャに焼いた影とリアルタイムな影を混ぜる - テラシュールブログを利用して影を落としています。

f:id:tsubaki_t1:20170103231625j:plain

Shadow Maskはそれ自体で1枚のShadow Mapを使用します。赤いテクスチャ奴がShadow Maskです。つまり、Shadow Maskを使用すると余計に1枚テクスチャを使用します。

(正直、IndirectもDirectional Lightmapも要らんからShadowMaskだけ欲しい)

f:id:tsubaki_t1:20170104221112j:plain

近距離はリアルタイムな影、遠距離はShadowMaskを使いたい

Distance Shadow Maskは「遠距離はShadowMaskを、近距離はRealtime Shadowを使う」という機能です。

こっちだと、テクスチャに焼いた影とリアルタイムな影を混ぜる を使用しなくとも影を落とす事が出来ます。

f:id:tsubaki_t1:20170103231952j:plain

f:id:tsubaki_t1:20170103232447j:plain

また、ベイクした影が使われるのはShadow Distance未満の距離はリアルタイムな影を使う訳ですが、逆を言えば遠距離になるまでベイクした影は使われません。なので、焼く影は結構適当でも良いのも素敵です。

影をテクスチャに焼き付けつつ、リアルタイムな影も表現したい

Subtractiveモードは、以前のMixedモードのように影はテクスチャに焼き付け、リアルタイムな影を使うモードです。

Shadow Maskを使わない分、ShadowMask系と比較して影に使用するテクスチャの枚数を減らせます。

f:id:tsubaki_t1:20170104223216j:plain

以前のMixedモードと比較し、リアルタイムな影の色を変更する事が出来るようになりました。これを上手く使えば、Directional Lightのみの場合は影を描画したテクスチャによく馴染む、自然な影が描画できそうです。

f:id:tsubaki_t1:20170104223326j:plain

テクスチャに焼き付けは間接光だけで十分、影はリアルタイムな物を使いたい

いっそShadwmapを使わず、間接光だけは事前にベイクして影はリアルタイムという選択肢もあります。そんな時はBaked Indirectモードを使います。

f:id:tsubaki_t1:20170104225834j:plain

基本的な影はリアルタイムで描画するので、Baked GI Resolusionが多少雑でも(近場ならば)割と綺麗に見えます。

f:id:tsubaki_t1:20170104225019j:plain

影をテクスチャに焼き付ける

モバイルのように、リアルタイムシャドウを使うと*1色々と問題になる場合は、全部影を焼き付けてしまい、足元に丸影モデルでも置きます。

Lightをstaticにすると、どのモードでも影をテクスチャに焼き付け、staticに設定したライトのリアルタイムな影は表示されなくなります。

f:id:tsubaki_t1:20170104230913j:plain

f:id:tsubaki_t1:20170104231448j:plain

その他

ライトや光源処理の一覧表示

LightExplorerで、シーン内のライトの一覧が確認出来るようになったみたいです。
単純なライトの他、EmissiveなオブジェクトやReflectionProbe、Lightprobeといったコンポーネントの検索・変更も出来るようになってます。

f:id:tsubaki_t1:20170104232140j:plain

8以上のIntensityが可能に

(何故か)今まで0~8で制限されていたLightのIntensityが、8以上設定出来るようになりました。最小値は相変わらず0です。(光がマイナスってのもあり得ないですが…暗黒の光…!)

f:id:tsubaki_t1:20170104232425j:plain

Lightmap Staticの設定がレンダラーに移動

ちなみに、Lightmap Staticの設定は相変わらずStaticのチェックボックスにもありますが、Rendererにも追加されました。この項目にチェックを入れると、今までLightmappingウィンドウで設定してた項目が表示されるようになります。

f:id:tsubaki_t1:20170103230610j:plain

何かベイクに妙に時間がかかる

とりあえず後で時間測ってレポートします(予定話

Directional Specularモードの削除

今ひとつ表現が安定しなかったDirectional Specularが無くなりました。

近づいたらリアルタイム表現の方が正直綺麗なので、まぁ特に思う所もなく。さよならDirectional Specular君、君のことは忘れないよ。多分

ちなみにExperimental Buildとは

Unity CommunityのBetaのフォーラムにて公開されている「実験的ビルド」です。

Editor VRや2D Preview、AIやLinux Editor等、色々と提供されています。

f:id:tsubaki_t1:20170103224254j:plain

基本言語は英語です。またフォーラムにGoogle翻訳が使えなくなったので、英語に苦手意識がある人が敷居が高いかもしれません。

 関連

tsubakit1.hateblo.jp

tsubakit1.hateblo.jp

*1:発熱とか