📗
【Unity Summary】 Lighting
Lighting
Direct & Indirect Lighting
details
type | description |
---|---|
Direct | 放射され、一度 surface に当たり、その後直接 sensor(目の網膜や Camera)に映る |
Indirect | - 最終的に sensor に映るその他 light 全てを指す - surface に数回当たる light や sky light など |
Realtime, Baked, Mixed lighting
details
type | description |
---|---|
Realtime | Runtime に Lighting 計算 |
Baked | 事前に lighting 計算を行い、その結果を Lighting データとして保存、Runtime に適用 |
Mixed | Reatime と Baked light の混合 |
Global illumination(GI)
details
- Direct / Indirect の両 Lighting を model 化して、現実的な Lighting を提供する一群の technique
- 拡散反射光も光の計算に取り入れられる
- 光が反射し奥まで照らせる
- GI に色の変更を反映する場合は以下のようにする
- 解像度を示す
- Clustering
- モザイクのような模様が表示(GIの解像度)
- GI はこの範囲内で中間補完しながら光の影響を与え合うことになる
- Lit Clustering
- Clustering の発光物(Emission)版
- object が発光している場合、どの程度まで影響を与えるのかといった表現を確認できる
- Clustering
DynamicGI.UpdateMaterials(render);
Light
- cookies を使った Spot Light は、窓から差し込む光の演出に非常に効果的
- Intensity の低い Point Light を使用すると、Scene に奥行きを出せる
setting
light settings
settings | description | note |
---|---|---|
Light type | - Directional - Point - Spot - Area(長方形または disk light) |
|
Range | Object の中心から放射された Light がどのくらい遠くまで届くか | Point と Spot のみ |
Spot Angle | Spot Light の円錐の底面の角度(度単位) | Spot のみ |
Color | 放出される Light の色を指定 | |
Light mode | - Realtime - Mixed - Baked |
|
Intensity | Light の明るさ | - Directional:0.5(default) - Point、Spot、またはArea light:1(default) |
Indirect Multiplier | 間接光の強度を変更 | - 1以下:光が反射するたびに暗くなる - 1以上:光が反射するたびに明るくなる |
shadow settings
settings | description | note |
---|---|---|
Shadow type | - Hard shadow:sharp な edge を持つ影を生成(soft shadow に比べてリアルではないが、処理量が少なく、多くの用途に使用可能) - Soft shadow:Shadow Map による「block 状」Aliasing 効果を低減する傾向がある - No shadows |
|
Baked Shadow Angle | - Shadow の edge に softening を加える - より自然な外観にする |
以下の場合のみ - Mode:Baked or Mixed - Type:Directional - Shadow Type:Soft Shadows |
Baked Shadow Radius | - Shadow の edge に softening を加える - より自然な外観にする |
以下の場合のみ - Mode:Baked or Mixed - Type:Point or Spot - Shadow Type:Soft Shadows |
Realtime Shadows | RealTime Shadow Rederering | 以下の場合のみ - Mode:Realtime or Mixed - Shadow Type:Hard or Soft Shadows |
Strength | 影の暗さ | |
Resolution | Shadow Map の解像度 | |
Bias | 影が光から押しやられる距離を制御 |
additional settings
settings | description | note |
---|---|---|
Cookie | 影を投影する Texture Map を指定 | silhouette(シルエット)や Light の pattern 照明を作成するため |
Draw Halo | Range 値と同じ直径を持つ球状の光の輪が描かれる | - Halo component を使用可能 - Light component の光輪に加えて描画される - Halo component の size は、直径ではなく半径を決定することに注意 |
Flare | Light の位置に描画したい場合に Asset を設定すると、その source として使用される | |
Render Mode | - Auto:Runtime で決定 - Important:常に Pixel 単位の品質で Rederering - Not Important:高速な頂点 Light Mode / Object Light Mode で Light が描画 |
|
Culling Mask | 特定の Object 一式を Light の影響を受けないよう除外 |
Light type
Point Lights
details
- 全方向に均等に光を放射する Light
- ランプや他の局所的な光源を simulation、realistic に周囲を照らす火花や爆発を作ったりするのにも役立つ
Spot Lights
details
- 円錐形に光を放射する Light
- 懐中電灯、車のヘッドライト、サーチライトなどといった人工的な光源として使用
- script や animation で方向を制御すれば、動きのある Spot Light で Scene 内のごく狭い area を照らし、印象的な Lighting 効果を発揮
Directional Lights
details
- 無限に遠くに位置し、一方向にのみ光を放射する Light
Area Lights
details
- 長方形または disk の片側からのみ光を放射する Light
- 複数の異なる方向から同時に Object を照らす為、他の種類の Light と比べて shading が柔らかく繊細になる
- 写実的な街頭や、player に近いところに複数並んだ Light の表現などに使用可能
- 小さな Area Light は小さな光源(家のインテリアの light など)を simulate でき、Point light よりも写実的な効果を得られる
Light mode
Baked
- Bake した Light の計算の結果は、Lighting データとして disk に保存する
- Runtime に、Bake した lighting データを load し、Scene の Lighting に使用
- 複雑な計算は事前に実行されるため、Bake した Light は Runtime の Shading コストを削減し、影の Rendering コストを削減
- 景観など、Runtime に変化しないものを lighting するのに便利
Realtime
- Runtime に「frame 毎に1回」の Realtime Light の Lighting 計算を実行する
- character や移動可能な geometry の Lighting や影付けに便利
Mixed
details
- Realtime と Baked した Lighting の両方の要素を組み合わせたもの
- Light を Realtime の直接光と Baked した間接光に貢献させる場合に使用
Cookie
- Runtime の Performance への影響を最小限またはゼロに抑えながら、複雑な Lighting 効果を simulate する効率的な方法
- Cookie で simulate できる効果には、caustics(コースティクス)、soft shadow、light の形状などがある
- Built-in Render Pipeline で使用する cookie を作成する最も便利な方法は、グレー scale の Texture を作成し、その Texture を Unity に import してから、Texture の輝度を alpha に変換する
- 以下有効化手順
- Project Settings Window を開く(Edit > Project Settings)
- Editor を選び、Editor 設定を開く
- Graphics の section に移動
- Enable baked cookies support を有効に設定
Emmisive material
- Emission は Standard Shader の property で、Static Object を発光可能
- 0以上の Emission を持つ Material は、たとえ Scene light に影響を与えなくとも、Screen 上で明るく発光しているように見える
- inspector で Standard Shader の Global Illumination を None にすることによっても可能
- neon などの目に見える光源を表現するのに役立つ
Ambient light
details
- 拡散環境光として知られている、Scene の全体的な見た目と明るさに重要な影響を与える
- Scene 周囲全てに存在する Light であり、特定の Source Object から放出されていない
Shadow
Shadow Mapping
- Realtime の影を Rendering するための技術
- Shadow Map と呼ばれる Texture を使用する
- Shadow Map は深度 Texture に似ている
- Camera が深度 Texture を生成するのと同様の方法で Shadow Map を生成する
- 「光線が surface を hit するまでに移動する距離」の情報を Shadow Map に入力する
- それから Shadow Map を sampling し、Light が hit する GameObject の影を Realtime で計算する
Setting
settings | description |
---|---|
Cast Shadows | 影の投影を有効 |
Two Sided | - どちらの surface からでも影を投影 - 裏面の Culling は投影目的では無視される |
Shadows Only | 非表示 GameObject からの影の投影 |
Shadow distance
- Realtime の影を Rederering する Camera からの距離制限
- GameObject からの影は、GameObject が Camera から離れるほど目立たなくなる
- performance や品質を考えると、Shadow Distance はかなりよく考える必要がある
Stable Fit
- 初期設定
- Shadow Distance の描画範囲は、object の有無に関係なく利用される
- 300と指定した場合、遠方が1mの距離しか無い場合であっても、300m分の影が作られる
- mobile は Shadow Texture の size が厳しい
- 初期設定である150mなどを設定していると、かなり汚い影になる
Close Fit
- Camera が見える範囲の object に合わせて Shadow Texture に描画する範囲を調整する
- Shadow Distance が大きい値を持っていても、近い object しか描画しない場合は非常に質の高い影を使用できる
- どちらかと言えば、景色が動かない物向け
- 遠方に object が描画される場合、影は Stable Fit と同じように汚くなる
- 動かすと影がちらつく場合がある
- 「描画対象となる判定」は Recieve Shadow
- キャラクターの近づかない遠方の model は Baked で light map を焼いておき、Recieve Shadow のチェックを外しておく事で、Close Fit の品質をある程度保てる
Shadow cascade
- 透視 Aliasing を解決するのに役立つ
Trouble shouting
Shadow Acne
- 実際には照らされるべき pixel が影になって模様を作る現象
Light Bias
- Light Inspector の Bias と Normal Bias property を変更する
- 値をあまり高く設定しないよう注意
Shadow Pancake
- 影を投影するものを(頂点 Shader の)最適化された空間の near clip 面に固定する
- Light 方向に沿って Shadow Map を Rendering する時、使用する Light 空間の範囲を減らす
Scene tab
Lighting Settings
Workflow settings
- Scene を debug するための設定
settings | description | note |
---|---|---|
GPU Baking Device | Lighting data の事前計算に使用する GPU を変更 | GPU Progressive Lightmapper Backend を使用している場合のみ表示 |
Light Probe Visualization | Scene view で、どの Light probe を可視化するか | - Only Probes Used By Selection:選択した Light probe - All Probes No Cells:全 Light probe - All Probes With Cells:全 Light probe(Light probe データの補間に使用する4面体も表示) |
Display Weights | Light probe から補間に使用する4面体の位置への線を描画 | probe の補間と配置の問題を debug する方法の1つ |
Display Occlusion | Light probe の occlusion データを表示 | Lighting Mode が Shadowmask に設定されている場合のみ |
Highlight Invalid Cells | 間接照明に使用できない四面体をハイライトできるように変更 | Light probe が互いに非常に接近している場合等 |
Recalculate Environment Lighting | 事前計算された light データを生成していない場合、開いている全 Scene に対して SkyManager を使用して環境照明を自動的に計算 |
Envrionment tab
- Skybox、defuse(取り除く) lighting、reflection など、環境 light 適用される lighting 関連の設定と control が含まれる
settings | description | note |
---|---|---|
Skybox Material | - Scene 背後に表示される Material - 空や他の遠くの背景の simulation |
|
Sun Source | Scene 内で太陽として使用する light | None:Scene 内で最も明るい Directional light を太陽とみなす |
Realtime Shadow Color | Realtime Shadow を Redering するために使用する色 | Subtractive Lighting Mode のみ |
Environment Lighting | Ambient light に影響する設定 | |
Source | Ambient light の色 | - Skybox(Default) - Gradient:空、地平線、地面からの Ambient light に別々の色を使用し、それらを滑らかに blend するときに選択 - Color:全ての Ambient light に flat な色を使用 |
Intensity Multiplier | Ambient light の明るさ | - 0 から 8 の値で設定 - Default:1 |
Environment Reflections | Reflection probe の global 設定 | |
Source | Reflection effect | - Skybox(Default) - Custom |
Resolution | (Reflection に使用する)Skybox の解像度 | |
Cubemap | (Reflection に使用する)Cubemap | Source が Cubemap に設定されている場合にのみ |
Compression | Reflection Texture を圧縮するかどうか | - Auto(Default):圧縮形式が適切な場合は、Reflection Texture を圧縮 - Uncompressed:Reflection Texture を圧縮しないで memory に保存 - Compressed:Texture を圧縮 |
Intensity Multiplier | Reflection source が Reflection を映す Object に映される度合 | |
Bounces | ある Object からの Reflection が別 Object によって反射される際、 Reflection の跳ね返りが発生する回数 | |
Fog | Scene の Fog を有効/無効 | - Color - Mode:Fog が Camera からの距離によって、どのように蓄積するか - Linear:Fog の密度は距離に応じて直線的に増加 - Start:Scene 内で Fog が開始する Camera からの距離 - End:Scene 内で Fog が終了する Camera からの距離 - Exponential:Fog の密度は距離に応じて指数関数的に増加 - Density:Fog の濃度を制御 - Exponential Squared:Fog の密度は距離に応じてより速く増加 |
Halo Texture | ||
Halo Strength | ||
Flare Fade Speed | Lens flare が view から退色する時間(秒) | |
Flare Strength | Lens flare の可視性 | 0 と 1 の間の値で設定 |
Spot Cookie | Spot light に使用する Cookie の Texture | Default:Soft |
Controller area
Auto Generate
- Scene に変更を加えた際、自動的に Lighting data を事前計算
- このデータには以下が含まれる
- Baked Global Illumination system 用の Light Map
- Enlighten Realtime Global Illumination system 用の Light Map
- Light Probes
- Reflection Probes
- 通常 Scene に変更を加えた数秒後に Bake を開始する
- Auto Generate を使用して Lighting data を事前計算する場合、Scene の事前計算された Lighting data を Assets として Project に保存しない
- 代わりに memory に保存し、Scene の一部として serialize する
Generate Lighting
- 開いている全 Scene の Lighting data を事前に計算
- このデータには以下が含まれる
- Baked Global Illumination system 用の Light Map
- Enlighten Realtime Global Illumination system 用の Light Map
- Light Probes
- Reflection Probes
- Generate Lighting >「Bake Reflection Probes」をクリックした場合
- 開いている全 Scene の Reflection Probes のみが Bake される
- Generate Lighting >「Clear Baked Data」をクリックした場合
- GI Cache をクリアすることなく、開いている全 Scenes から全ての事前計算された Lighting data をクリアする
Lighting Settings Asset
- Lighting Settings class の保存された instance を表し、Bake した 以下のデータを格納している
- Global illumination
- Enlighten Realtime Global illumination
Realtime Lighting
- Enlighten Realtime Global Illumination System に関する設定が含まれている
settings | description | note |
---|---|---|
Realtime Global Illumination | Enlighten Realtime Global Illumination system を使用 | |
Realtime Environment Lighting | - Enlighten Realtime Global illumination system を使用 - Ambient light を Realtime で計算・更新可能 |
|
Indirect Resolution | Realtime Light Map に使用する単位あたりの texel 数 | 値を大きくすると、Light Map の品質が向上するが、Redering 時間が長くなる |
Mixed Lighting
- Baked Light と Mixed Light の動作に影響する設定が含まれている
settings | description | note |
---|---|---|
Baked Global Illumination | Bake した Clobal illumination system を有効 | 無効になっている場合、Scene の全ての Baked Light と Mixed Light を Realtime light であるかのように動作させる |
Lighting Mode | Lighting Settings Asset を使用する Scene の全 Mixed Light に対して Lighting Mode を指定 | - Baked Indirect - Shadowmask - Subtractive |
Lightmapping Settings
Lighting mode
Baked Indirect
- 直接光は Realtime の Light のように動作し、間接光を Light Map に Bake するという利点
- Mixed Light で照らされた GameObject は、project で定義した Shadow distance 以内で Realtime の影を作成
Shadow Mask
- 動的な影と静的な影を混ぜる新しい手法の一つ
- 影を事前に計算しておく
- 単純に mask で、影計算は事前に行うが光の計算はリアルタイムに行うので、光の色や輝度を変更しても反映する事が出来る
- 間接光の計算は確定しているので、あまり強力に色を変えたりしない方が良さそう
- 範囲外の影は追加の DrawCall 無しに影を描画、範囲内はリアルタイムで描画
- 影の精度を荒くしてもある程度は良い
- Baked Indirect mode と同様に、Realtime Direct Light と Baked Indrirect Light を組み合わせたもの
- ただし、Shadowmask Lighting Mode は影の Redering 方法が Baked Indirect Lighting Mode と異なる
- 実行時に Baked Shadow と Realtime Shadow を組み合わせ、遠景の Shadow を Rendering することを可能にする
- Shadow Mask として知られる追加の Light Map Texture を使用し、Light probe に追加情報を格納することによって行う
Subtractive
- 追加のDrawCall無しに影を描画
- 影の範囲はいくらでも伸ばせるが、綺麗にすればするほど load と Bake 時間が伸びる
- 汚い状態にすると近づくと汚い
- Scene の全 Mixed Light は Baked Direct / Indirect lighting を提供する
- 静的 GameObject から投影された影を Light Map に Bake する
- Bake した影に加えて、Main Directional Light と呼ばれる1つの Directional Light が、動的 GameObject に Realtime の影を提供する
- 影は Light Map に Bake されるため、Runtime 時に Bake した影と Realtime の影を正確に組み合わせるために必要な情報がない
- 代わりに、Light Map からの影響を減らすために Realtime Shadow Color を提供し、Bake した影と Realtime の影が正しく blend されているように見せる
Light Mapping
- Scene の surface の明るさを事前に計算し、後で使用するために Light Map と呼ばれる Texture に結果を保存する処理
- Direct / Indirect Light の両方を含む
- 2つの Directional Modes がある
mode | description | note |
---|---|---|
Directional | - Light Map は2つの Texture で構成 - Shader は Redering 時に両方のTexture を sampling |
Texture の追加により、video memory の必要量が増加(Bake のパフォーマンスにも影響) |
Non-Directional | Light Map は1つの Texture のみ | - 必要な video memory と storage が少ない(Shader でのデコードも高速) - 視覚的な品質を低下させる |
Progressive Light Mapper
- 高速の light mapper system
- Scene View が見ている範囲を優先的に Bake する事が可能
- 見えている部分を、最初は粗い感じの lighting から始まり徐々に細かく Bake していく
- 見てる範囲を素早く確認出来る
- Baked な Light や Baked な Emissive material、AreaLight や AO を焼く場合等で、かなり有効に見える
- 焼き終わってない状態でゲームを再生すると、「途中まで焼いた状態」でゲームを再生
- 再生停止すれば Bake を再開する
- ゲームに必要な部分を scene view で眺めておいてから実行すれば、毎回 Bake 完了まで待たずとも、ある程度の勘所は掴める
Light Probe
- 「Scene の何もない空間を通過する Light」に関する情報を取得・使用する方法を提供
- Light Map 同様、Scene の Lighting に関する Bake した情報を格納
- 両者の違いは、以下の通り
- Light Map:Scene の「surface に当たる light」の情報を格納
- Light Probe:Scene の「何もない空間を通り抜ける Light」の情報を格納
- Runtime に動的 GameObject に当たる間接光は、その Object に最も近い Light Probe からの値を使って近似される
- 光源情報を先に bake しておく事で、realtime で動作する model にも超低負荷(mobile で動かせるレベル)で光源情報を適応させることの出来る技術
Light Probe Group
- Ringing
- Light Probe に輪状の artifact が出現する現象
- Light Probe の周囲の light に大きな違いがある場合によく発生する
- 例えば Light Probe の片側に明るい light があり、反対側に light がない場合、light の強度は後ろ側でオーバーシュートする
- このオーバーシュートは後ろ側に light の点を発生させる
- 対応策はいくつかある
- Light Probe Group component で、Remove Ringing を有効
- 一般的に Light probe の精度が低下し、light の contrast が低下する点に注意
- player が light spot が見える位置に到達できないような位置に、ゲーム内障害物を配置する
- Light Probe に直接光を Bake しないようにする
- 直接光は、鋭い切れ目(影の edge など)を持つ傾向があり、Light Probe には適さない
- 間接光のみを Bake するには、Mixed lighting を使用する
- Light Probe Group component で、Remove Ringing を有効
- Light Probe が保存するデータの量と、ゲームの play 中に実行する計算量を最適化するためには、可能な限り少ない Light Probe を配置するのが一般的
- 一方、ある空間から別の空間への light の変化を記録するのに十分な Light Probe を置く必要がある
- つまり、複雑な light や contrast の強い light の領域には Light Probe をより密な pattern で配置し、light があまり変化しない領域では、Light Probe の間隔を広げて配置
Light Probe Proxy Volume (LPPV)
- Bake した Light Map を使う事が出来ない、大きくて動的な GameObeject(大きな Particle や Skin Mesh 等)に、 Lighting 情報を追加する事が可能
Reflection Probe
- 部屋や一部の map に対し、範囲限定の object に環境 map を設定する
- 範囲内の object に対し反射等の影響を与える効果がある
- 範囲はある程度被っても大丈夫
- 全方向に向かってその周囲の球状の view をキャプチャする Camera のようなもの
- キャプチャした image はその後、Reflection Material を持つ Object に使用される CubeMap として保存される
- Reflection Probe の中には、指定した Scene で使用し、Object は最も近い Probe によって生成された Cube Map を使うように設定されているものもある
- 反射する Object が Probe の近くを通り過ぎる時、Probe によって sampling された反射を Object の Reflection Map で使用することが可能
- さらに、いくつかの Probe が近くにある場合、反射が徐々に変化するように補間(演算のオーバーヘッドを許容範囲に抑えつつ説得力のある反射を演出)
- 高度な設定
setting | note |
---|---|
Reflection Bounces | |
Box Projection |
matcap
- 事前に rendering した画像を使用して light 表現を行う手法
- 材質と光を表現した球の絵を使用して擬似的に lighting を行う
- つまり、lighting 処理を行わず(事前計算して)lighting の表現を行える
Discussion