ReflectionProbe

继承: VisualRender < Item3D < Item < Object

捕捉周围环境,从给定点创建快速、准确的反射。

描述

以立方体贴图的形式捕捉其周围环境,并以不断增加的模糊程度存储它的版本,以模拟不同的材质粗糙度。

ReflectionProbe用于以低性能成本(当update_modeUPDATE_ONCE时)创建高质量的反射。ReflectionProbes可以混合在一起,并与场景的其余部分平滑地混合在一起。ReflectionProbes还可以与VoxelGI、SDFGI(Environment.sdfgi_enabled)和屏幕空间反射(Environment.ssr_enabled)相结合,以在特定区域获得更准确的反射。ReflectionProbes渲染其cull_mask内的所有对象,因此更新它们可能相当昂贵。最好用重要的静态对象更新一次,然后保持原样。

注意:VoxelGI和SDFGI不同,ReflectionProbe仅从WorldEnvironment节点获取环境。如果您在Camera节点中指定了Environment资源,它将被ReflectionProbe忽略。这可能会导致ReflectionProbe内的照明不正确。

注意:仅在Forward+和Mobile渲染方法中支持反射探头,不支持兼容性。使用Mobile渲染方法时,每个网格资源上只能显示8个反射探头。尝试在单个网格资源上显示超过8个反射探头将导致反射探头随着摄像机移动而闪烁。

注意:当使用移动渲染方法时,反射探头只会正确影响其可见性AABB与反射探头的AABB相交的网格。如果使用着色器使网格变形,使其超出其AABB,则必须在网格上增加GeometryRender.extra_cull_margin。否则,反射探头可能在网格上不可见。

属性


枚举

enum UpdateMode: 🔗

UpdateMode UPDATE_ONCE = 0

在下一帧更新一次探测(推荐用于大多数对象)。相应的辐射贴图将在接下来的六帧中生成。这比UPDATE_ALWAYS需要更多的时间来更新,但它具有更低的性能成本,并且可以产生更高质量的反射。反射探测会在其变换发生变化时更新,但不会在附近的几何形状发生变化时更新。您可以通过向任何方向稍微移动ReflectionProbe来强制ReflectionProbe更新。

UpdateMode UPDATE_ALWAYS = 1

每帧更新探测器。这为快速移动的动态对象(如汽车)提供了更好的结果。但是,它有很大的性能成本。由于成本原因,建议每个场景最多只使用一个具有UPDATE_ALWAYS的RefliceProbe。对于所有其他用例,使用UPDATE_ONCE


enum AmbientMode: 🔗

AmbientMode AMBIENT_DISABLED = 0

请勿在由size定义的ReflectionProbe框内应用任何环境照明。

AmbientMode AMBIENT_ENVIRONMENT = 1

在automatically-sourcedsize定义的ReflectionProbe框内应用环境照明。

AmbientMode AMBIENT_COLOR = 2

在由其size定义的ReflectionProbe框内应用自定义环境照明。请参阅ambient_colorambient_color_energy


属性说明

Color ambient_color = Color(0, 0, 0, 1) 🔗

  • void set_ambient_color(value: Color)

  • Color get_ambient_color()

size定义的ReflectionProbe框中使用的自定义环境颜色。仅当ambient_modeAMBIENT_COLOR时有效。


float ambient_color_energy = 1.0 🔗

  • void set_ambient_color_energy(value: float)

  • float get_ambient_color_energy()

size定义的ReflectionProbe框中使用的自定义环境颜色能量。仅当ambient_modeAMBIENT_COLOR时有效。


AmbientMode ambient_mode = 1 🔗

在由其size定义的ReflectionProbe框内使用的环境颜色。环境颜色将与其他ReflectionProbe和场景的其余部分平滑混合(在由其size定义的ReflectionProbe框之外)。


float blend_distance = 1.0 🔗

  • void set_blend_distance(value: float)

  • float get_blend_distance()

定义探测器与场景混合的距离(以米为单位)。


bool box_projection = false 🔗

  • void set_enable_box_projection(value: bool)

  • bool is_box_projection_enabled()

如果true,则启用框投影。这通过根据摄像机的位置抵消反射中心,使反射在矩形房间中看起来更正确。

注意:为了更好地适应未与网格对齐的矩形房间,您可以旋转ReflectionProbe节点。


int cull_mask = 1048575 🔗

  • void set_cull_mask(value: int)

  • int get_cull_mask()

设置剔除蒙版,该蒙版确定此探针绘制哪些对象。此剔除蒙版中包含图层的每个VisualRender都将由探针渲染。最好只包含可能在反射中占用大量空间的大对象,以节省渲染成本。

这也可以用来防止物体反射到自己身上(例如,以车辆为中心的ReflectionProbe)。


bool enable_shadows = false 🔗

  • void set_enable_shadows(value: bool)

  • bool are_shadows_enabled()

如果true,则计算反射探测中的阴影。这会使反射探测渲染速度变慢;如果使用UPDATE_ALWAYSupdate_mode,您可能需要禁用此功能。


float intensity = 1.0 🔗

  • void set_intensity(value: float)

  • float get_intensity()

定义反射强度。强度调节反射的强度。


bool interior = false 🔗

  • void set_as_interior(value: bool)

  • bool is_set_as_interior()

如果true,反射将忽略天空贡献。


float max_distance = 0.0 🔗

  • void set_max_distance(value: float)

  • float get_max_distance()

对象在被剔除之前与ReflectionProbe的最大距离。减少此距离以提高性能,尤其是在使用UPDATE_ALWAYSupdate_mode时。

注意:最大反射距离总是至少等于探头的范围。这意味着减小的max_distance不会总是从反射中剔除物体,特别是当反射探头的盒子由其size定义时已经很大。


float mesh_lod_threshold = 1.0 🔗

  • void set_mesh_lod_threshold(value: float)

  • float get_mesh_lod_threshold()

自动LOD偏差,用于在ReflectionProbe中渲染的网格(这类似于Viewport.mesh_lod_threshold)。较高的值将使用生成LOD变化的网格的不太详细的版本。如果设置为0.0,则禁用自动LOD。增加mesh_lod_threshold以牺牲几何细节来提高性能,尤其是在使用UPDATE_ALWAYSupdate_mode时。

注意:mesh_lod_threshold不影响GeometryRender可见性范围(也称为“手动”LOD或分层LOD)。


Vector3 origin_offset = Vector3(0, 0, 0) 🔗

设置当此ReflectionProbe处于box_projection模式时要使用的原点偏移量。这可以设置为非零值,以确保反射适合矩形房间,同时减少“妨碍”反射的对象数量。


int reflection_mask = 1048575 🔗

  • void set_reflection_mask(value: int)

  • int get_reflection_mask()

设置反射蒙版,该蒙版确定哪些对象应用了此探针的反射。在此反射蒙版中包含图层的每个VisualRender都将应用此探针的反射。另请参阅cull_mask,它可用于排除出现在反射中的对象,同时仍然使它们受到ReflectionProbe的影响。


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

反射探头的大小。尺寸越大,探头覆盖的空间越多,这将降低感知分辨率。最好将尺寸保持在您需要的大小。

注意:为了更好地拟合未与网格对齐的区域,您可以旋转ReflectionProbe节点。


UpdateMode update_mode = 0 🔗

设置更新ReflectionProbe的频率。可以是UPDATE_ONCEUPDATE_ALWAYS