📗

【Unity Summary】 Lighting

2025/02/19に公開

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 が発光している場合、どの程度まで影響を与えるのかといった表現を確認できる
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 した間接光に貢献させる場合に使用
  • Runtime の Performance への影響を最小限またはゼロに抑えながら、複雑な Lighting 効果を simulate する効率的な方法
  • Cookie で simulate できる効果には、caustics(コースティクス)、soft shadow、light の形状などがある
  • Built-in Render Pipeline で使用する cookie を作成する最も便利な方法は、グレー scale の Texture を作成し、その Texture を Unity に import してから、Texture の輝度を alpha に変換する
  • 以下有効化手順
    1. Project Settings Window を開く(Edit > Project Settings)
    2. Editor を選び、Editor 設定を開く
    3. Graphics の section に移動
    4. 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 が保存するデータの量と、ゲームの 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