Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
雾着色器
雾效着色器用于定义如何在特定区域内向场景中添加(或从中减去)雾气。雾效着色器总是需要与 FogVolumes (雾效体积)以及体积雾配合使用。雾效着色器只有一个处理函数,那就是 fog() 函数。
雾效着色器的分辨率取决于体积雾 Froxel 网格的分辨率。因此,雾效着色器所能呈现的细节程度,取决于 FogVolume (雾效体积)距离摄像机的远近。
雾效着色器是一种特殊的计算着色器,它会在关联的 FogVolume (雾效体积)的轴对齐包围盒(axis-aligned bounding box)所触及的每一个小体素(froxel)上调用一次。这意味着,即便是那些仅仅轻微擦碰到指定 FogVolume 的 Froxel,也依然会被纳入计算。
内置
标记为 in 的值是只读的。标记为 out 的值可以选择性写入,并且它们不一定包含有意义的初始值。采样器(Samplers)不能被写入,因此不做标记。
全局内置变量
全局内置变量在任何地方都可以使用,包括在自定义函数中。
内置 |
描述 |
|---|---|
in float TIME |
自引擎启动以来的全局时间,以秒为单位。它每经过 |
in float PI |
常量 |
in float TAU |
常量 |
in float E |
常量 |
Fog 内置
所有雾效体积的输出值都是相互叠加(重叠)的。这样一来,所有的 FogVolumes 就可以一次性全部绘制出来,从而实现高效的渲染。
内置 |
描述 |
|---|---|
in vec3 WORLD_POSITION |
当前 Froxel 单元格在世界空间中的位置。 |
in vec3 OBJECT_POSITION |
当前 FogVolume (雾效体积)中心点在世界空间中的位置。 |
in vec3 UVW |
三维 UV 坐标,用于将 3D 纹理映射到当前的 FogVolume (雾效体积)上。 |
in vec3 SIZE |
|
in vec3 SDF |
到 FogVolume 表面的有向距离场(Signed distance field)。如果在体积内部,数值为负;否则(在体积外部),数值为正。 |
out vec3 ALBEDO |
输出基础颜色值,该值会与光照进行交互,从而生成最终的颜色。只有在应用了雾效体积时,该值才会被写入。 |
out float DENSITY |
输出密度值。该值可以是负数,这样就能实现从一个体积中减去另一个体积的效果。雾效着色器必须使用密度值,否则它不会渲染出任何效果。 |
out vec3 EMISSION |
输出自发光颜色值。该值会在光照计算阶段叠加到颜色上,从而生成最终的颜色。只有在使用雾效体积(fog volume)时,该值才会被写入。 |