#脱Unity感=綺麗なライティング#
綺麗なライティングとは?
短的に言うと、直接光と間接光を複合的に計算したライティングのことです。と勝手に定義しました。
"Unity感"とは間接光の計算のなさ、ライト強すぎ、などライティングから産まれやがるんや!
異論はもちろん認めます。
#読書対象者
Bakeしてない人
Directional LightのColorをいじったことがない人
RefrectionProbe?という人
Light Probe?という人
#ライティングの基礎#
まず基本的にライトはざっくりと
リアルタイムライト と 事前計算ライト
2つにわけられます。↓参照
リアルタイムライト
動的だが反射しない
(何!?)
事前計算ライト
Staticなオブジェクトに対してGI(グローバルイルミネーション)を適用して、計算しておいた光
反射光も含むので綺麗
Staticなオブジェクト や Staticなライトのベイク
によって適用される
つまりこいつで"Unity感"を消せそうちゃうか。。?
この記事がかなりわかりやすいので詳しくはみてください↓
この記事の結論は
GIが適用されるのは
オブジェクトがStaticであり、リアルタイムGI or ライトのBake が適応されている場合であると言うことです。
###これらの基礎をまとめて学習できる神動画
多分、ライティングにおいて2021年6月までに存在する日本語と英語の動画資料は全て目を通しました!
でその中でも特に見やすかったのを紹介させていただきます。
ライティングのおさらい - Unity道場2019 3月
まずこれを見てください。
概念をめちゃくちゃわかりやすく説明してくれてます。
以降この動画のまとめと補足みたいな感じです。
ライトマップの基礎知識 #1 : リアルタイムライト | Unite Now 2020
次にこれを見てください。非常にわかりやすくライティングの実践的な解説があります。
[Unite 2016 Tokyo]Unityとアセットツールで学ぶ「絵づくり」の基礎(ライト、シェーダー、イメージエフェクト)
これもお勧めです。
これは上記の2つをしっかりと覚えているかの確認に使えます!
以下は上記の動画たちのまとめと補足みたいな感じです!
#グローバルイルミネーション(GI)とは#
グローバルイルミネーションとは、直接光だけでなく間接光なども考慮したシミュレーションの光。
(enlighten から引用)
Progressive Lightmapperと言うもので計算される
GIとは何か???という疑問を解決する神資料↓ここまでめちゃわかりやすいの意外とない
UnityにおけるGIの処理の流れ
主にリアルタイムGI と Probes と BakeGIの3つで別れる
Unityにおけるライティングの基本的な処理の方法
一つのオブジェクトに対して、光源が近い順から、ライティングが行われる。
近さや順番によって計算方法が変わる
より複雑な計算を求めると、ハイクオリティ設定になる↓
#綺麗なライティングのための設定はどうすれば良いのか#
##LightのBake##
ライトをBakeする方法と、オブジェクトを軽くする細かい設定↓
基本的に背景はStaticにしてGenerativeLightしないと損するや!
ワイもしてないアプリを世に出したことあるで!今までの自分を恥じたらあかん。
##LightMappingを使用##
ライトマッピングは、シーンのサーフェスの明るさを事前計算し、チャートやライトマップに結果を保存して後で使用するための処理
ピンとこない人は、Scene Viewの設定で、GIの処理の1つ1つのフィルターがみれるのでみてみることをお勧めします。
オブジェクトに対するテクセルの大きさなどをみれます。
Progressive Lightmapper
ビルド完了まで待たなくても、ある程度完成形が見える
見えていくところから優先して焼かれるGPUにも対応した優れものであるので選択すると良い(現段階ではPreview)
細かい設定などの詳細動画↓
細かい設定の資料↓ 軽くしたい時にみるといいかも
Indirect Samples:各テクセルから放たれるサンプル(パス)数。この設定により、プログレッシブライトマッパーが間接光の計算で計上するサンプルの数を制御します。一部のシーン(特に屋外のシーン)では、サンプル数は 100 で十分ですが、屋内のシーン(特に発光ジオメトリを使用している場合)では、より大きな値を指定する必要があります。サンプル数 512 くらいから始めて、最終結果のノイズが多すぎる場合にだけサンプル数を増やしてください。
Lightmap Resolution : こちらで定義したテクセル数が、この単位キューブの各辺に配置されます。
Bounces 反射光の跳ね返りの数の決定
Filter Gaussian か A-Trous を選択できる
↓比較画像 主に影に違いがある
https://unity3d.com/profiles/unity3d/themes/unity/images/eloqua/article/Unity-progressive-lightmapper-optimizations-filters.jpg
詳しくは↓こちらをみてください。非常にわかりやすくまとめてくれてます。
##RealTimeShadowColorの調整##
リアルタイムに生成される影の色を調整する項目
詳しくはこちら⇩
##RefrectionProbeの使用と設定##
ざっくりいうとRefrectionProbeとは、水面やコップなどに環境を反射させるのに使えるものです。
使い方はこちら⇩
動画の解説はこちら
##LightのModeを選択する##
・Modeの種類
RealTime
動的だが、直接光しか計算ができない
(何!?)
Mixed
さまざまな種類がある
後で解説します。
Baked
メリット
ふわっとした影が作れる(味わいのあるいい感じの影)
間接光の影響でリアルタイムより空間の輝度が上がることもある
→(indirect Multiplerを調整すると改善)
CPU負荷が軽い
高解像度な影を作成すると必然定期にメモリは圧迫されます
→影の品質はLight-Map Resolutionに強く依存しする
デメリット
光源情報が失われるので光沢がなくなる(スペキュラーライトが表現できない)
これはやばいで。"Unity感"エグくなるからめっちゃ気をつけるんや。
→RefrectionProbeで多少誤魔化せる
ダイナミックなオブジェクトには影は落ちない まぁ当たり前
###Mixedの種類###
MixedLightingの設定の種類
ShadowMask
メリット
一番高品質と言える
スペキュラーライトも表現できる、ただしボケた影はできない
デメリット
重い
LightProbeで影響を与えて違和感を数なくすることはできる
Distance Shadowmask
距離によって近い物だけに影をつける設定
デメリット
1つのオブジェクトに対して4つ以上の影響するライトがあると、5つ目からBakeされる
LightOverlapでどれがBakeされるかは確認することができる(赤がBakeされるライト)
BakedIndirect
メリット
間接光のみをテクスチャにベイクできる
デメリット
遠距離の影は表示できない
うん。結局どういう時にどういう設定がいいのか・・?!という疑問に答えてくれる
神資料↓
##Shadowの設定##
影の解像度
影は一枚のTextureとして処理されます。なので__広範囲の影をつけるためにはカスケードを使用__して距離に応じた優先順位をつけないといけない。
Shadowの設定項目
Resolution
カスケード距離の修正
アーティファクトの修正
##用途にあったライトの選択と数値の設定##
ここの数値の設定は忘れがちや!
ライトオブジェクトの種類
Spot Light
角度のみが影に影響 距離は関係ない
解像度は1で固定なので、広範囲にしすぎると、雑な影になります。
PointLight
距離で品質が変わる 角度は関係ない
6回描画する必要があるため、解像度は低く設定されている
太陽の代わりに使うと品質が落ちるので注意
DirectionalLight
どこに位置していても光の強さは変わらない。設定した方向に均一に世界を照らします
このライトの色とSkyBoxの色を合わせてないと"Unity感"が出るので注意や!
Directional Light の Ambient Color の色を、空の色と同期するのは絶対必須で、よく忘れられるんや。
昼 オレンジの色
夜 濃い青色
にするのがおすすめやで〜
設定項目
DirectionalLightの色は設定しましたか?
光源が足りない場所に、AreaLightをBakeしましたか?
##Light Probeを配置する##
シーン内にある小さなオブジェクト(フェンス、電線、チューブ、小物などのテクセルをあまり必要としないオブジェクト)やサイズのわりに表面積が非常に大きいオブジェクト(特に樹木)を照らすには、ライトプローブの使用が有効なもの。
ライトマップがシーン内のサーフェスに当たるライトに関するライティング情報を保持するのに対し、ライトプローブはシーン内の__スペースを通過するライトに関する情報__を保持します。
主として、ライトプローブは、シーン内の__動くオブジェクト__に対して質の高いライティング(間接光を含む)を提供します。また、景観に Unity の LOD システムを使用する場合には静的な景観のライティング情報を提供します。
####どうやって使ったらええんや?####
・基本的にキャラクターの移動範囲全てに散りばめると良い
Dynamicなオブジェクトは、間接光が計算されない。なのでそれを補う形でこれを使用する。
・Light Mapでは表現できない細かいディテールのオブジェクトに使用する
Light Probeの使い方はこちら⇩
設定方法
##LPPVを使う##
Light Probe Proxy Volume (LPPV) コンポーネントを使うと、ベイクしたライトマップを使う事が出来ない、大きくて動的なゲームオブジェクト(例えば、大きなパーティクルやスキンメッシュ等)に、ライティングインフォメーションを追加する事ができます。
なんと!Unity感を脱せそうな感じしますよね。
##MeshRendererの光の設定##
光の当たり方を2種類を選択できる!
GI or Light Probe
を選ぶことができます。
詳細↓
#後書き#
正直理解がまだまだなので、間違ってる部分多いと思います。
もし僕の理解が間違っていたら訂正メッセージお願いいたします。即座に修正いたします。
#今後の予定#
カラーグレーディング編
LightProbe編
ポストプロセス編
Terrain編
リフレクションプローブ編
投影マッピング編
VFXGraph編
レンダリング編
を書いていく予定なので、温かい目で応援よろしく願いします。