Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

OmniLight3D

继承: Light3D < VisualInstance3D < Node3D < Node < Object

全向光,如灯泡或蜡烛。

描述

全向光是 Light3D 的一类,可以向所有方向发射光。光随距离而衰减,该衰减可以通过修改其能量、半径和衰减参数来配置。

注意:使用移动渲染方式时,每个网格资源上只能显示 8 个全向灯。尝试在单个网格资源上显示 8 个以上的全向灯,将导致全向灯随着相机移动而闪烁。使用 Compatibility 渲染方式时,默认情况下每个网格资源上只能显示 8 个全向灯,但可以通过调整 ProjectSettings.rendering/limits/opengl/max_lights_per_object 来增加。

注意:当使用 Mobile 或 Compatibility 渲染方法时,全向灯只会正确影响可见性 AABB 与该灯光的 AABB 相交的网格。如果使用了着色器将网格进行了变形,超出了 AABB 的范围,则必须将该网格的 GeometryInstance3D.extra_cull_margin 增大。否则灯光在该网格上可能不可见。

教程

属性

float

omni_attenuation

1.0

float

omni_range

5.0

ShadowMode

omni_shadow_mode

1

float

shadow_normal_bias

1.0 (overrides Light3D)


枚举

enum ShadowMode:

ShadowMode SHADOW_DUAL_PARABOLOID = 0

将阴影渲染到双抛物面纹理。比 SHADOW_CUBE 更快,但质量较差。

ShadowMode SHADOW_CUBE = 1

将阴影渲染至立方体贴图。比 SHADOW_DUAL_PARABOLOID 更慢,但质量更高。


属性说明

float omni_attenuation = 1.0

  • void set_param ( float value )

  • float get_param ( )

灯光的衰减(衰减)曲线。通过右键点击曲线,可以在属性检查器中使用许多预设。允许零值和负值,但会产生不寻常的效果。

注意:如果灯光使用更大的 omni_range 进行补偿,非常高的 omni_attenuation 值(通常高于 10)则可能会对性能产生负面影响。这是因为剔除机会将变得不那么常见,并且着色成本将增加(因为光线将覆盖屏幕上更多的像素,且同时产生相同的亮度)。要提高性能,请为试图实现的视觉效果使用尽可能低的 omni_attenuation 值。


float omni_range = 5.0

  • void set_param ( float value )

  • float get_param ( )

该灯光的半径。请注意,根据使用的 omni_attenuation,有效照明区域可能看起来更小。无论使用 omni_attenuation 为何值,光线永远不会到达该半径之外的任何地方。

注意:omni_range 不受 Node3D.scale(无论是该灯光的缩放还是其父节点的缩放)的影响。


ShadowMode omni_shadow_mode = 1

ShadowMode