霧著色器
霧著色器用於定義在指定區域中如何為場景加入(或減去)霧。霧著色器必須與 FogVolumes 及體積霧一同使用。霧著色器僅有一個處理函式,即 fog()。
霧著色器的解析度取決於體積霧 froxel 網格的解析度。因此,霧著色器所能增加的細節層級會根據 FogVolume 與攝影機的距離而變化。
霧著色器是一種特殊的計算著色器,會針對與關聯 FogVolume 的軸向對齊包圍盒所碰觸到的每個 froxel 各自呼叫一次。也就是說,即使僅輕微接觸到指定 FogVolume 的 froxel 也會被處理。
內建變數
標記為 in 的值為唯讀。標記為 out 的值可寫入,但不一定有合理初始值。取樣器(sampler)無法寫入,因此未標記。
全域內建變數
全域內建變數可於任何地方使用,包括自訂函式中。
內建變數 |
說明 |
|---|---|
in float TIME |
自引擎啟動以來的全域時間(秒)。每 3,600 秒會重設(可透過 rollover 設定變更)。該值會受到 time_scale 影響,但不受暫停影響。如果你需要不受 time_scale 影響的 |
in float PI |
常數 PI(3.141592),為圓周長與直徑的比值,也是一半圈的弧度數。 |
in float TAU |
常數 TAU(6.283185),等於 PI * 2,也是一整圈的弧度數。 |
in float E |
常數 E(2.718281),歐拉數,也是自然對數的底數。 |
霧內建變數
所有霧體積(fog volume)的輸出值會彼此重疊。這使得 FogVolumes 能夠高效繪製,因為它們可以同時處理。
內建變數 |
說明 |
|---|---|
in vec3 WORLD_POSITION |
目前 froxel 單元在世界座標中的位置。 |
in vec3 OBJECT_POSITION |
目前 FogVolume 在世界座標中的中心位置。 |
in vec3 UVW |
三維 UV,將 3D 紋理貼圖映射至目前的 FogVolume。 |
in vec3 SIZE |
|
in vec3 SDF |
到 FogVolume 表面的有號距離場。於體積內為負,反之為正。 |
out vec3 ALBEDO |
輸出基礎色值,會與光源互動產生最終顏色。僅在使用時會寫入至霧體積。 |
out float DENSITY |
輸出密度值。可為負數,允許一個體積從另一個體積中減除。霧著色器必須使用密度,否則不會寫入任何數值。 |
out vec3 EMISSION |
輸出發光色值,於光照階段加到顏色上產生最終顏色。僅在使用時會寫入至霧體積。 |