GIProbe
Inherits: VisualInstance < CullInstance < Spatial < Node < Object
实时全局光照(GI)探测。
描述
GIProbe
可以为场景提供高质量的实时间接光照。它们预先计算发光物体和静态几何体的效果,以实时模拟复杂光线的行为。GIProbe
在使用前需要进行烘焙,而后,一旦烘焙,动态物体就会从它们那里接收光线。此外,灯光可以是完全动态的,也可以是烘焙的。
在场景中使用 GIProbe
会很消耗资源,可以在 ProjectSettings 中使用 ProjectSettings.rendering/quality/voxel_cone_tracing/high_quality 来降低探针的质量,换取更好的性能。
程序式生成:GIProbe
在导出后的项目中也可以进行烘焙,因此它适合程序式生成或者用户构建的关卡,只需保证所有几何体都是预先生成的即可。
性能:GIProbe
相对更耗 GPU,不适合在集成显卡等低端硬件上使用,可考虑换用 BakedLightmap。要为低端硬件提供备选方案,可考虑在你项目的选项菜单中添加禁用 GIProbe
的选项。隐藏 GIProbe
节点即可将其禁用。
注意:网格应该有足够厚的墙以避免漏光,注,避免单面墙。对于内部关卡,将你的关卡几何体包围在一个足够大的盒子里,并将环路联接起来以关闭网格。
注意:由于渲染器的限制,在GIProbe
中使用发光的ShaderMaterial时不能发光。只有发射型的SpatialMaterial可以在GIProbe
中发射光线。
教程
属性
| ||
| ||
| ||
| ||
| ||
| ||
| ||
| ||
|
方法
void | bake ( Node from_node=null, bool create_visual_debug=false ) |
void | debug_bake ( ) |
枚举
enum Subdiv:
SUBDIV_64 = 0 —- 使用64分区,这是最低的质量设置,但也是最快的。如果你能使用它,特别是在低端硬件上使用它。
SUBDIV_128 = 1 —- 使用128个分区。这是默认的质量设置。
SUBDIV_256 = 2 —- 使用256个分区。
SUBDIV_512 = 3 —- 使用 512 个分区。这是最高的质量设置,但也是最慢的。在低端硬件上,这可能会导致 GPU 停顿。
SUBDIV_MAX = 4 —- 代表 Subdiv 举的大小。
属性说明
- float bias
Default |
|
Setter | set_bias(value) |
Getter | get_bias() |
从 GIProbe
偏移光贡献的查找。这可用于避免自阴影,但可能会在较高的值下引入漏光。这个和 normal_bias 应该使用,以尽量减少自阴影和漏光。
注意: bias
通常应该在 1.0 以上,因为这是体素的大小。
- bool compress
Default |
|
Setter | set_compress(value) |
Getter | is_compressed() |
已废弃由于已知的错误,这个属性已被废弃,启用后不再有任何效果。
- GIProbeData data
Setter | set_probe_data(value) |
Getter | get_probe_data() |
持有此 GIProbe
的数据的 GIProbeData 资源。
- int dynamic_range
Default |
|
Setter | set_dynamic_range(value) |
Getter | get_dynamic_range() |
GIProbe
能识别的最大亮度。亮度将在此范围内缩放。
- float energy
Default |
|
Setter | set_energy(value) |
Getter | get_energy() |
能量倍数。使 GIProbe
的照明贡献更亮。
- Vector3 extents
Default |
|
Setter | set_extents(value) |
Getter | get_extents() |
GIProbe
所覆盖区域的大小。如果你让外延变大,而没有用 subdiv 增加细分,每个单元的大小将增加,并导致低细节照明。
- bool interior
Default |
|
Setter | set_interior(value) |
Getter | is_interior() |
如果为true
,在计算照明时忽略天空的贡献。
- float normal_bias
Default |
|
Setter | set_normal_bias(value) |
Getter | get_normal_bias() |
根据物体的法线方向,对 GIProbe
的查找进行偏移。可以用来减少一些自阴影的假象。
- float propagation
Default |
|
Setter | set_propagation(value) |
Getter | get_propagation() |
光在探针内部传播的程度。一个较高的值可以使光传播得更远。
- Subdiv subdiv
Default |
|
Setter | set_subdiv(value) |
Getter | get_subdiv() |
对 GIProbe
所操作的网格进行细分的次数。数字越大,细节就越精细,因而视觉质量就越高,而数字越小,性能就越好。
方法说明
烘焙所有标有 GeometryInstance.use_in_baked_light 的 GeometryInstance 和标有 Light.BAKE_INDIRECT 或 Light.BAKE_ALL 的 Light 的效果。如果create_visual_debug
是true
,在烘焙光线后,这将生成一个MultiMesh,其中有一个立方体代表每个实体单元,每个立方体的颜色与该单元的反照率颜色一致。这可以用来可视化 GIProbe
的数据,以调试任何可能发生的问题。
注意: bake 在编辑器和导出后的项目中都是有效的。因此适用于程序化生成或者用户构建的关卡。在多数场景中,烘焙 GIProbe
通常需要花费 5 到 20 秒。减少 subdiv 可以加速烘焙。
- void debug_bake ( )
在启用 create_visual_debug
的情况下调用 bake 。