Up to date

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

DirectionalLight3D

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

来自远处的平行光,如太阳光。

描述

平行光是一种 Light3D 节点,它可以模拟覆盖整个场景的无限数量的平行光线。它用于距离场景较远的强光,以模拟日光或月光。 DirectionalLight3D 变换的世界空间位置(原点)将被忽略。只有基被用于确定光线方向。

教程

属性

bool

directional_shadow_blend_splits

false

float

directional_shadow_fade_start

0.8

float

directional_shadow_max_distance

100.0

ShadowMode

directional_shadow_mode

2

float

directional_shadow_pancake_size

20.0

float

directional_shadow_split_1

0.1

float

directional_shadow_split_2

0.2

float

directional_shadow_split_3

0.5

SkyMode

sky_mode

0


枚举

enum ShadowMode:

ShadowMode SHADOW_ORTHOGONAL = 0

从正交的角度渲染整个场景的阴影图。这是最快的定向阴影模式。可能会导致近距离物体的阴影更模糊。

ShadowMode SHADOW_PARALLEL_2_SPLITS = 1

将视锥体分成2个区域,每个区域都有自己的阴影贴图。这种阴影模式是 SHADOW_ORTHOGONALSHADOW_PARALLEL_4_SPLITS 在性能上的折衷。

ShadowMode SHADOW_PARALLEL_4_SPLITS = 2

将视锥体分成 4 个区域,每个区域都有自己的阴影贴图。这是最慢的定向阴影模式。


enum SkyMode:

SkyMode SKY_MODE_LIGHT_AND_SKY = 0

使灯光在场景照明和天空渲染中都可见。

SkyMode SKY_MODE_LIGHT_ONLY = 1

使灯光仅在场景照明中可见(包括直接照明和全局照明)。使用此模式时,天空着色器看不到此灯光。

SkyMode SKY_MODE_SKY_ONLY = 2

使灯光仅对天空着色器可见。使用此模式时,灯光不会将灯光投射到场景中(通过直接照明或通过全局照明),但可以通过天空着色器访问。例如,当你想要控制天空效果而不照亮场景时(例如,在夜间循环期间),这可能很有用。


属性说明

bool directional_shadow_blend_splits = false

  • void set_blend_splits ( bool value )

  • bool is_blend_splits_enabled ( )

如果为 true,会牺牲阴影的细节,换取分割区域之间更平滑的过渡。启用阴影混合分割同时也会带来一些性能消耗。当 directional_shadow_modeSHADOW_ORTHOGONAL 时会被忽略。


float directional_shadow_fade_start = 0.8

  • void set_param ( float value )

  • float get_param ( )

阴影开始消失时,directional_shadow_max_distance 的比例。在 directional_shadow_max_distance 处,阴影会消失。默认值是平滑淡化和远处阴影可见性之间的平衡。如果相机移动较快且 directional_shadow_max_distance 较低,请考虑将 directional_shadow_fade_start 降低到 0.8 以下,以使阴影过渡不那么明显。另一方面,如果调整了 directional_shadow_max_distance 来覆盖整个场景,可以将 directional_shadow_fade_start 设置为 1.0,以防止阴影在远处逐渐淡化(它将会突然切断 )。


float directional_shadow_max_distance = 100.0

  • void set_param ( float value )

  • float get_param ( )

阴影分割的最大距离。将这个值增大会让定向阴影在更远处可见,代价是整体的阴影细节降低和性能(因为渲染定向阴影时需要包含更多的物体)。


ShadowMode directional_shadow_mode = 2

灯光的阴影渲染算法。见 ShadowMode


float directional_shadow_pancake_size = 20.0

  • void set_param ( float value )

  • float get_param ( )

设置定向阴影压平区域的大小。压平区域会偏移阴影相机视锥体的起点,为阴影提供更高的有效深度分辨率。但是,较大的压平区大小会导致靠近视锥体边缘的大型物体的阴影出现伪影。减少压平区大小会有所帮助。将大小设置为 0 会关闭该压平效果。


float directional_shadow_split_1 = 0.1

  • void set_param ( float value )

  • float get_param ( )

相机到阴影分割 1 的距离。相对于 directional_shadow_max_distance。只有当 directional_shadow_modeSHADOW_PARALLEL_2_SPLITSSHADOW_PARALLEL_4_SPLITS 时才使用。


float directional_shadow_split_2 = 0.2

  • void set_param ( float value )

  • float get_param ( )

从阴影分割 1 到阴影分割 2 的距离。相对于 directional_shadow_max_distance。仅在 directional_shadow_modeSHADOW_PARALLEL_4_SPLITS 时使用。


float directional_shadow_split_3 = 0.5

  • void set_param ( float value )

  • float get_param ( )

从阴影分割 2 到阴影分割 3 的距离。相对于 directional_shadow_max_distance。只有当 directional_shadow_modeSHADOW_PARALLEL_4_SPLITS 时才使用。


SkyMode sky_mode = 0

设置该 DirectionalLight3D 是否在天空、场景、或天空和场景中可见。有关选项,请参阅 SkyMode