ReflectionProbe¶
继承: VisualRender < Item3D < Item < Object
捕捉周围环境,从给定点创建快速、准确的反射。
描述¶
以立方体贴图的形式捕捉其周围环境,并以不断增加的模糊程度存储它的版本,以模拟不同的材质粗糙度。
ReflectionProbe用于以低性能成本(当update_mode为UPDATE_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_color和ambient_color_energy。
属性说明¶
Color ambient_color = Color(0, 0, 0, 1) 🔗
由size定义的ReflectionProbe框中使用的自定义环境颜色。仅当ambient_mode为AMBIENT_COLOR时有效。
float ambient_color_energy = 1.0 🔗
由size定义的ReflectionProbe框中使用的自定义环境颜色能量。仅当ambient_mode为AMBIENT_COLOR时有效。
AmbientMode ambient_mode = 1 🔗
void set_ambient_mode(value: AmbientMode)
AmbientMode get_ambient_mode()
在由其size定义的ReflectionProbe框内使用的环境颜色。环境颜色将与其他ReflectionProbe和场景的其余部分平滑混合(在由其size定义的ReflectionProbe框之外)。
定义探测器与场景混合的距离(以米为单位)。
如果true,则启用框投影。这通过根据摄像机的位置抵消反射中心,使反射在矩形房间中看起来更正确。
注意:为了更好地适应未与网格对齐的矩形房间,您可以旋转ReflectionProbe节点。
设置剔除蒙版,该蒙版确定此探针绘制哪些对象。此剔除蒙版中包含图层的每个VisualRender都将由探针渲染。最好只包含可能在反射中占用大量空间的大对象,以节省渲染成本。
这也可以用来防止物体反射到自己身上(例如,以车辆为中心的ReflectionProbe)。
如果true,则计算反射探测中的阴影。这会使反射探测渲染速度变慢;如果使用UPDATE_ALWAYSupdate_mode,您可能需要禁用此功能。
定义反射强度。强度调节反射的强度。
如果true,反射将忽略天空贡献。
对象在被剔除之前与ReflectionProbe的最大距离。减少此距离以提高性能,尤其是在使用UPDATE_ALWAYSupdate_mode时。
注意:最大反射距离总是至少等于探头的范围。这意味着减小的max_distance不会总是从反射中剔除物体,特别是当反射探头的盒子由其size定义时已经很大。
float mesh_lod_threshold = 1.0 🔗
自动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 🔗
设置反射蒙版,该蒙版确定哪些对象应用了此探针的反射。在此反射蒙版中包含图层的每个VisualRender都将应用此探针的反射。另请参阅cull_mask,它可用于排除出现在反射中的对象,同时仍然使它们受到ReflectionProbe的影响。
Vector3 size = Vector3(20, 20, 20) 🔗
反射探头的大小。尺寸越大,探头覆盖的空间越多,这将降低感知分辨率。最好将尺寸保持在您需要的大小。
注意:为了更好地拟合未与网格对齐的区域,您可以旋转ReflectionProbe节点。
UpdateMode update_mode = 0 🔗
void set_update_mode(value: UpdateMode)
UpdateMode get_update_mode()
设置更新ReflectionProbe的频率。可以是UPDATE_ONCE或UPDATE_ALWAYS。