読者です 読者をやめる 読者になる 読者になる

テラシュールブログ

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

Unity 5 で画面を綺麗にするライティングに挑戦してみるメモ

今回はUnity 5で行うライティング設定や綺麗にするポイントについて調査した内容をメモしておきます。

f:id:tsubaki_t1:20150308182528p:plain

Unity 4 free と比較して Unity5 Personal Editionで出来るようになった事

で紹介したように、Unity5はBeastからEnlightenへ移行しました。その過程で幾つかのUIや設定のコツが変化していましたので、早速追跡調査しました。

いざライティング!

目次

ステージ配置

まず従来通りライトとオブジェクトを配置します。前回の「影がこすぎる問題(アンビエントライト=環境光が低すぎる問題)は最初から良い感じの環境光が設定されている事から、かなり緩和されています。

f:id:tsubaki_t1:20150309232450p:plain

オブジェクトのマテリアル(材質)の設定

Unity5はStandardShaderによる物理ベースシェーディング機能により 「マテリアル(材質)」設定が非常に重要な意味を持ちます。

というのも、物理ベースシェーダーは「現在世界にある反射係数や色の設定を入れることでフォトリアルな絵作りを実現する」物ですので、アーティストのセンスによる設定ではなく物理的なパラメータを元にして設定する必要があります。*1*2

チャート図を使用

試しにWorking with Physically-Based Shading: a Practical Approach – Unity Blogを参考に、オブジェクトの一つを「金」にしました。チャートを元に色や反射係数を決定します。

f:id:tsubaki_t1:20150310032143p:plain

他にも岩やコンクリート、鉄等様々な固有の色を使ってよりフォトリアルな感じに設定できるらしいのですが、知識不足なのでその内

f:id:tsubaki_t1:20150309232430p:plain

f:id:tsubaki_t1:20150310021010p:plain

テンプレートを使用

テンプレートとしてShader Calibration Scene [5.0 beta]が使えそうです。WOODはちょっと微妙な感じがしますが。

ちなみに、光沢を出したければエッジを丸めたオブジェクトの方が良いです。光が綺麗に反射するためにはある程度の面が必要なのですが、Unity標準のCUBEは角が尖っているので、金属を指定しても上手く光ってくれません。

ライトを焼く

より良いライティングを行うため、ライトを焼きます。

但し、EnlightenはBeastとは違い明示的に焼く必要はありません。静的なオブジェクトとしてstaticのチェックボックスを入れると、勝手にGIの計算や必要であればライトを焼いてくれます。*3

f:id:tsubaki_t1:20150309232954p:plain

staticで自動的に焼いてくれますが、ワークフロー的に無駄が多いのと、シーン読み込み時にライトが表示されない不具合があるため、明示的にBakeした方が良さそうです。

tsubakit1.hateblo.jp

f:id:tsubaki_t1:20150309233430p:plain

赤い床に光が反射して白い壁に薄っすらと赤い色が付いたりしているのは、Bounce Intensity(反射光)の設定です。

LightProbeの設定

この間接光はstaticを付けていない、動的なオブジェクトには反映されません。そこでライトプローブを使用し、間接光もプローブに焼き付けてしまいます。

ライトプローブの設定は、Unity - マニュアル: ライト プローブで行います。手軽にプローブを配置したければ、UnityのLightProbesを手軽にセッティングする は使い勝手が良いと思います。

f:id:tsubaki_t1:20150309234601p:plain

f:id:tsubaki_t1:20150310001900p:plain

f:id:tsubaki_t1:20150310004941g:plain

tsubakit1.hateblo.jp

場合によってはReflecctionProbe(周囲の景色を使って色を塗る。レーシングゲームで車体に映る景色的な)も使えます。屋内といったskyboxを反射に使いたくない環境ではreflectionProbeを使用しますが、その内。

f:id:tsubaki_t1:20150310023859p:plain

エフェクトを追加する

最後にAmbient OcclusionとBloomを追加します。どちらも物理的に正しいかと言われると微妙ですが、見栄えは良くなる演出ですので正義です。パラメータはアーティストのさじ加減が割と重要なんじゃないかと思います。

tsubakit1.hateblo.jp

ImageEffectの導入

メニューバー> Assets > import Package > Effect にイメージエフェクトや丸影・フレア等のエフェクトがあるので、それをインポートして使います。新しいUnityのStandardAssetsはJSもどきではなくC#になったので、かなりC#から管理が楽になりました。

f:id:tsubaki_t1:20150309235828p:plain

とりあえずセット

使用するのは Bloom とScreen Space Ambient Occlusion です。Bloomは輝度が1以上の値を使用できるように、CameraのHDRにチェックを入れます。

下の絵は以下のパラメータでやってますが、見ながら良さそうな値を調整した物ですので参考程度に。

f:id:tsubaki_t1:20150310001401p:plain

f:id:tsubaki_t1:20150310001417p:plain

上手く演出が出来たらカラーコレクションでメリハリの有る絵に調整します。他にもDepth Of Field(被写体深度)やアンチエイリアス・Vignette、Tonemapping等々、色々と絵を強化するエフェクトはあるので、色々と試してみると良いと思います。

ただ、VRで使う場合は、こういった「目やレンズの現象をエミュレートするエフェクト」が意味があるかは、よく考える必要がありそうです。

Unity - マニュアル: ブルーム

Unity - マニュアル: スクリーンスペース アンビエントオクルージョン(SSAO)

Unity - マニュアル: カラー コレクション ルックアップ テクスチャ

モバイル向けの最適化

Enlightenは基本的にリアルタイムなライト+間接光を事前計算という形をとっていますが、モバイル向けにライト総数を減らしたい場合、ライトをbake設定に変更しライトをベイクしてしまうアイディアがあります。

tsubakit1.hateblo.jp

本来オブジェクトに対して行う光表現はライトプローブで代用します。ライトプローブは基本的にライトを使うより超軽いので、割と良い感じのパフォーマンスが出せます。

ただライトプローブでは光沢や影といったダイナミックな光表現を行うことが出来ないので、その辺りは判断が難しい所です。

なお影に関しては自分が色々と試した限り、ライトマップを焼いて影に濃い目のSSAOで付けるのが今のところ一番綺麗に出来る印象です。もしくは複数の丸影。*4

f:id:tsubaki_t1:20150310003343p:plain

イメージベースとライティング(IBL)

IBLは画像を元に環境光を設定してくれる仕組みです。これを上手く使うと、雪山や密林・街角といった環境光を手軽に設定することが出来ます。

設定はCubemapに変換したHDR画像をシーンにドラッグ&ドロップするだけです。画像自体は自分で用意出来れば一番良いと思いますが、とりあえず試したい場合はHDR LabsさんのsIBL Archiveから使わせてもらうと良いんじゃないかと思います*5

f:id:tsubaki_t1:20150310004444g:plain

実はディレクショナルライトを設定するよりコレだけでライティングを設定したほうが綺麗な絵が作れるのですが、IBLだけでは先のライトをベイクする問題と同様に動的なオブジェクトに影と光沢が設定しづらいので悩ましい所です。

f:id:tsubaki_t1:20150310002610p:plain

Unity4で焼いたライトマップの移行について

焼き直しです。基本思想が違うので、まあ仕方のない所です。

何かEnlightenへアップデートする的なボタンがあった気がしますが、基本的に焼き直しだったハズです。

参考資料


Unity 5 Graphics - Lighting Overview - Unity Official Tutorials - YouTube

Unity 5 Lighting Cookbook

物理ベースの絵作りのための基礎

Working with Physically-Based Shading: a Practical Approach – Unity Blog

『THE COMPREHENSIVE PBR GUIDE Volume 1: The Theory of PBR by Allegor…

『THE COMPREHENSIVE PBR GUIDE – Vol. 2: Practical guidelines for creat…

 

続きます

tsubakit1.hateblo.jp

*1:当然、より綺麗な絵作りが出来るならルールを無視するのもアリです。

*2:MMD等で提供される漫画やアニメキャラクターは「材質プラスチック」でフィギア感を出すか、「Toonシェーダー」「UnityChanシェーダー」を使ってアニメチックに表現した方が良い気がします

*3:オブジェクトを動かしたりパラメータを変更した際も更新されます

*4:SHADOWGUN方式

*5:クリエイティブ・コモンズで提供されていますので、扱いには注意して下さい。