VoxelGI

继承: VisualRender < Item3D < Item < Object

实时全局照明(GI)探头。

描述

VoxelGIs用于向场景提供高质量的实时间接光线和反射。它们预先计算发光物体的效果和静态几何形状的效果,以实时模拟复杂光线的行为。VoxelGIs需要烘焙才能产生可见效果。然而,一旦烘焙,动态物体将从它们那里接收光线。此外,光源可以是完全动态的或烘焙的。

注意:VoxelGI仅在Forward+渲染方法中受支持,不支持Mobile或Compatiity。

程序生成:VoxelGI可以在导出的项目中烘焙,这使得它适用于程序生成或用户构建的关卡,只要提前生成所有几何体。对于在运行时随时生成几何体的应用,SDFGI更适合(参见Environment.sdfgi_enabled)。

性能:VoxelGI对GPU的要求相对较高,不适合集成显卡等低端硬件(考虑改为Lightmass)。要提高性能,请调整ProjectSettings.rendering/global_illumination/voxel_gi/quality并在项目设置中启用ProjectSettings.rendering/global_illumination/gi/use_half_resolution。要为低端硬件提供后备,请考虑在项目的选项菜单中添加禁用VoxelGI的选项。可以通过隐藏VoxelGI节点来禁用它。

注意:网格应该有足够厚的墙壁,以避免漏光(避免单面墙壁)。对于内部关卡,将您的关卡几何包围在一个足够大的盒子中,并桥接循环以关闭网格。为了进一步防止漏光,您还可以战略性地放置临时MeshRender节点,其GeometryRender.gi_mode设置为GeometryRender.GI_MODE_STATIC。然后,这些临时节点可以在烘烤VoxelGI节点后隐藏。

属性

方法

void

bake(from_node: Item = null, create_visual_debug: bool = false)

void

debug_bake()


枚举

enum Subdiv: 🔗

Subdiv SUBDIV_64 = 0

使用64个细分。这是质量最低的设置,但速度最快。如果可以,请使用它,但尤其是在低端硬件上使用它。

Subdiv SUBDIV_128 = 1

使用128个细分。这是默认的质量设置。

Subdiv SUBDIV_256 = 2

使用256个细分。

Subdiv SUBDIV_512 = 3

使用512细分。这是最高质量的设置,但最慢。在低端硬件上,这可能会导致GPU停顿。

Subdiv SUBDIV_MAX = 4

表示Subdiv枚举的大小。


属性说明

CameraAttributes camera_attributes 🔗

指定烘焙时的曝光级别的资源。自动曝光和非曝光属性将被忽略。曝光设置应用于降低烘焙时的动态范围。如果曝光过高,VoxelGI将出现条带伪影或可能出现过度曝光伪影。


VoxelGIData data 🔗

保存此VoxelGI数据的VoxelGIData资源。


Vector3 size = Vector3(20, 20, 20) 🔗

VoxelGI覆盖的区域的大小。如果您在不增加subdiv的情况下使大小变大,则每个单元格的大小将增加并导致较低的详细照明。

注意:尺寸在每个轴上被夹紧到1.0个单位或更多。


Subdiv subdiv = 1 🔗

细分VoxelGI操作的网格的次数。数字越高,细节越精细,视觉质量越高,而数字越低,性能越好。


方法说明

void bake(from_node: Item = null, create_visual_debug: bool = false) 🔗

烘焙所有标记为GeometryRender.GI_MODE_STATICGeometryRender和标记为Light.BAKE_STATICLight.BAKE_DYNAMICLight的效果。如果create_visual_debugtrue,烘焙后将生成一个MultiMesh,其中有一个立方体代表每个实心单元,每个立方体的颜色与单元的反照率颜色一致。这可用于可视化VoxelGI的数据并调试可能发生的任何问题。

注意:bake()从编辑器和导出的项目中工作。这使其适用于程序生成或用户构建的关卡。在大多数场景中,烘焙VoxelGI节点通常需要5到20秒。减少subdiv可以加快烘焙速度。

注意:GeometryRenderLight必须在调用bake()之前完全准备好。如果您在程序上创建这些并且您的烘焙VoxelGI中缺少一些网格或光源,请使用call_deferred("bake")而不是直接调用bake()


void debug_bake() 🔗

create_visual_debug启用的情况下调用bake()