霧著色器

霧著色器用於定義在指定區域中如何為場景加入(或減去)霧。霧著色器必須與 FogVolumes 及體積霧一同使用。霧著色器僅有一個處理函式,即 fog()

霧著色器的解析度取決於體積霧 froxel 網格的解析度。因此,霧著色器所能增加的細節層級會根據 FogVolume 與攝影機的距離而變化。

霧著色器是一種特殊的計算著色器,會針對與關聯 FogVolume 的軸向對齊包圍盒所碰觸到的每個 froxel 各自呼叫一次。也就是說,即使僅輕微接觸到指定 FogVolume 的 froxel 也會被處理。

內建變數

標記為 in 的值為唯讀。標記為 out 的值可寫入,但不一定有合理初始值。取樣器(sampler)無法寫入,因此未標記。

全域內建變數

全域內建變數可於任何地方使用,包括自訂函式中。

內建變數

說明

in float TIME

自引擎啟動以來的全域時間(秒)。每 3,600 秒會重設(可透過 rollover 設定變更)。該值會受到 time_scale 影響,但不受暫停影響。如果你需要不受 time_scale 影響的 TIME,請自訂 全域著色器 uniform 並於每幀更新。

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

shape 有設定大小時,目前 FogVolume 的尺寸。

in vec3 SDF

FogVolume 表面的有號距離場。於體積內為負,反之為正。

out vec3 ALBEDO

輸出基礎色值,會與光源互動產生最終顏色。僅在使用時會寫入至霧體積。

out float DENSITY

輸出密度值。可為負數,允許一個體積從另一個體積中減除。霧著色器必須使用密度,否則不會寫入任何數值。

out vec3 EMISSION

輸出發光色值,於光照階段加到顏色上產生最終顏色。僅在使用時會寫入至霧體積。