Light

继承: VisualRender < Item3D < Item < Object

派生: DirectionalLight, PointLight, SpotLight

为不同类型的轻节点提供基类。

描述

Light3D是光节点的抽象基类。由于它不能被实例化,所以不应该直接使用。其他类型的光节点继承自它。Light3D包含用于照明的常用变量和参数。

属性

方法

Color

get_correlated_color() const

float

get_param(param: Param) const

void

set_param(param: Param, value: float)


枚举

enum Param: 🔗

Param PARAM_ENERGY = 0

用于访问light_energy的常量。

Param PARAM_INDIRECT_ENERGY = 1

用于访问light_indirect_energy的常量。

Param PARAM_VOLUMETRIC_FOG_ENERGY = 2

用于访问light_volumetric_fog_energy的常量。

Param PARAM_SPECULAR = 3

用于访问light_specular的常量。

Param PARAM_RANGE = 4

用于访问PointLight.omni_rangeSpotLight.spot_range的常量。

Param PARAM_SIZE = 5

用于访问light_size的常量。

Param PARAM_ATTENUATION = 6

用于访问PointLight.omni_attenuationSpotLight.spot_attenuation的常量。

Param PARAM_SPOT_ANGLE = 7

常量用于访问SpotLight.spot_angle

Param PARAM_SPOT_ATTENUATION = 8

常量用于访问SpotLight.spot_angle_attenuation

Param PARAM_SHADOW_MAX_DISTANCE = 9

用于访问DirectionalLight.directional_shadow_max_distance的常量。

Param PARAM_SHADOW_SPLIT_1_OFFSET = 10

用于访问DirectionalLight.directional_shadow_split_1的常量。

Param PARAM_SHADOW_SPLIT_2_OFFSET = 11

用于访问DirectionalLight.directional_shadow_split_2的常量。

Param PARAM_SHADOW_SPLIT_3_OFFSET = 12

用于访问DirectionalLight.directional_shadow_split_3的常量。

Param PARAM_SHADOW_FADE_START = 13

用于访问DirectionalLight.directional_shadow_fade_start的常量。

Param PARAM_SHADOW_NORMAL_BIAS = 14

用于访问shadow_normal_bias的常量。

Param PARAM_SHADOW_BIAS = 15

用于访问shadow_bias的常量。

Param PARAM_SHADOW_PANCAKE_SIZE = 16

用于访问DirectionalLight.directional_shadow_pancake_size的常量。

Param PARAM_SHADOW_OPACITY = 17

用于访问shadow_opacity的常量。

Param PARAM_SHADOW_BLUR = 18

用于访问shadow_blur的常量。

Param PARAM_TRANSMITTANCE_BIAS = 19

用于访问shadow_transmittance_bias的常量。

Param PARAM_INTENSITY = 20

用于访问light_intensity_lumenslight_intensity_lux的常量。仅当ProjectSettings.rendering/lights_and_shadows/use_physical_light_unitstrue时使用。

Param PARAM_MAX = 21

表示Param枚举的大小。


enum BakeMode: 🔗

BakeMode BAKE_DISABLED = 0

烘焙时忽略光源。这是最快的模式,但烘焙全局照明时会考虑光线。这种模式通常应用于变化迅速的动态灯,因为全局照明对这些灯的影响不太明显。

注意:隐藏光源影响烘焙Lightmass。隐藏光源仍然会影响烘焙VoxelGI和SDFGI(参见Environment.sdfgi_enabled)。

BakeMode BAKE_STATIC = 1

静态烘烤(VoxelGILightmass、SDFGI(Environment.sdfgi_enabled)中考虑了光线,光线可以四处移动或修改,但其全局光照不会实时更新。这适用于细微的变化(如闪烁的手电筒),但一般不会有大的变化,如打开和关闭灯。

注意:如果editor_onlytrue,则Lightmass中的灯不会烘焙。

BakeMode BAKE_DYNAMIC = 2

光在动态烘焙中被考虑(仅限VoxelGI和SDFGI(Environment.sdfgi_enabled)。光线可以实时移动或随着全局光照更新而修改。与BAKE_STATIC相比,光线的全局光照外观会略有不同。这与BAKE_STATIC相比具有更大的性能成本。使用SDFGI时,动态光源的更新速度受ProjectSettings.rendering/global_illumination/sdfgi/frames_to_update_lights的影响。


属性说明

float distance_fade_begin = 40.0 🔗

  • void set_distance_fade_begin(value: float)

  • float get_distance_fade_begin()

光线开始消失时与摄像机的距离(以3D为单位)。

注意:仅对PointLightSpotLight有效。


bool distance_fade_enabled = false 🔗

  • void set_enable_distance_fade(value: bool)

  • bool is_distance_fade_enabled()

如果true,则当远离从distance_fade_begin开始的活动Camera时,光源将平滑地消失。这是详细级别(LOD)的一种形式。光源将在distance_fade_begin+distance_fade_length上淡出,之后它将被剔除,根本不会发送到着色器。使用它来减少场景中活动光源的数量,从而提高性能。

注意:仅对PointLightSpotLight有效。


float distance_fade_length = 10.0 🔗

  • void set_distance_fade_length(value: float)

  • float get_distance_fade_length()

光线和阴影消失的距离。在这个距离上,光线的能量和阴影的不透明度逐渐降低,最终完全不可见。

注意:仅对PointLightSpotLight有效。


float distance_fade_shadow = 50.0 🔗

  • void set_distance_fade_shadow(value: float)

  • float get_distance_fade_shadow()

与摄像机之间的距离,光源的阴影被切断(以3D为单位)。将其设置为低于distance_fade_begin+distance_fade_length的值以进一步提高性能,因为阴影渲染通常比光渲染本身更昂贵。

注意:仅对PointLightSpotLight有效,并且仅当shadow_enabledtrue时有效。


bool editor_only = false 🔗

  • void set_editor_only(value: bool)

  • bool is_editor_only()

如果true,则该灯仅出现在编辑器中,并且在运行时不可见。如果true,则无论其light_bake_mode如何,该光源都不会在Lightmass中烘焙。


float light_angular_distance = 0.0 🔗

光的角度大小(以度为单位)。增加这个值将使阴影在更远的距离更柔和(也称为百分比接近软阴影,或PCSS)。仅适用于DirectionalLights。作为参考,地球上的太阳大约是0.5。对于启用阴影的光源,将此值增加到0.0以上将由于PCSS而产生明显的性能成本。

注意:light_angular_distance不受Item3D.scale(光源的比例或其父级比例)的影响。

注意:用于方向灯的PCSS仅在Forward+渲染方法中受支持,不支持Mobile或兼容性。


BakeMode light_bake_mode = 2 🔗

光源的烘焙模式。这将影响对光源渲染有影响的全局照明技术。请参阅BakeMode

注意:Meshes的全局光照模式也会影响全局光照渲染。参见GeometryRender.gi_mode


Color light_color = Color(1, 1, 1, 1) 🔗

光线的颜色。可以使用过亮颜色来达到相当于增加光线的light_energy的效果。


int light_cull_mask = 4294967295 🔗

  • void set_cull_mask(value: int)

  • int get_cull_mask()

光线将影响所选图层中的对象。


float light_energy = 1.0 🔗

光的强度倍增器(这不是物理单位)。对于PointLightSpotLight,更改此值只会改变光色的强度,而不是光的半径。


float light_indirect_energy = 1.0 🔗

次级倍增器用于间接光(光反射)。与VoxelGI和SDFGI一起使用(参见Environment.sdfgi_enabled)。

注意:如果light_energy等于0.0,则忽略此属性,因为光根本不会出现在GI着色器中。


float light_intensity_lumens 🔗

由位置灯(PointLightSpotLight)使用,当ProjectSettings.rendering/lights_and_shadows/use_physical_light_unitstrue时。设置以流明为单位测量的光源强度。流明是光通量的度量,即光源每单位时间发出的可见光总量。

对于SpotLights,我们假设可见锥体外部区域被完美的吸光材料包围,相应地,锥体区域的表观亮度不会随着锥体尺寸的增加和减少而改变。

一个典型的家用灯泡可以从大约600流明到1200流明不等,一支蜡烛大约是13流明,而路灯大约是60,000流明。


float light_intensity_lux 🔗

DirectionalLights使用,当ProjectSettings.rendering/lights_and_shadows/use_physical_light_unitstrue时。设置以Lux为单位测量的光源强度。Lux是单位面积光通量的度量,它等于每平方米一流明。Lux是给定时间有多少光照射到表面的度量。

在晴朗的晴天,阳光直射下的表面可能约为100,000勒克斯,家庭中的典型房间可能约为50勒克斯,而月光下的地面可能约为0.1勒克斯。


bool light_negative = false 🔗

  • void set_negative(value: bool)

  • bool is_negative()

如果true,则反转光的效果,使区域变暗并投射明亮的阴影。


Texture2D light_projector 🔗

由光投射的Texture2D。投影仪必须打开shadow_enabled才能工作。光投影仪使光线看起来像是穿过彩色但透明的物体,几乎就像光线穿过彩色玻璃一样。

注意:BaseMaterial3D不同,BaseMaterial3D的滤镜模式可以在每种材质的基础上进行调整,光投影仪纹理的滤镜模式使用ProjectSettings.rendering/textures/light_projectors/filter进行全局设置。

注意:光投影仪纹理仅在Forward+和Mobile渲染方法中受支持,不支持兼容性。


float light_size = 0.0 🔗

以i3D为单位的光的大小。仅适用于PointLights和SpotLights。增加此值将使光淡出速度变慢,阴影看起来更模糊(也称为百分比接近软阴影,或PCSS)。这可以在一定程度上用于模拟区域灯。对于启用阴影的光源,将此值增加到0.0以上将由于PCSS而产生明显的性能成本。

注意:light_size不受Item3D.scale(光源的比例或其父级比例)的影响。

注意:位置灯的PCSS仅在Forward+和Mobile渲染方法中受支持,不支持兼容性。


float light_specular = 1.0 🔗

受光影响的物体中镜面斑点的强度。在0处,光变成纯漫射光。当不烘烤发射时,这可以用来避免在发射表面上方放置灯时产生不切实际的反射。


float light_temperature 🔗

  • void set_temperature(value: float)

  • float get_temperature()

设置光源的色温,以开尔文为单位。这用于计算light_color的相关色温。

阴天的太阳约为6500开尔文,晴天在5500到6000开尔文之间,晴天日出或日落时的太阳范围约为1850开尔文。


float light_volumetric_fog_energy = 1.0 🔗

辅助乘法器与light_energy相乘,然后与Environment的体积雾一起使用(如果启用)。如果设置为0.0,将跳过此灯的体积雾计算,这可以在启用体积雾时提高大量光源的性能。

注意:为了防止短期动态光效果与体积雾的不良相互作用,在这些效果中使用的光源应将light_volumetric_fog_energy设置为0.0,除非禁用Environment.volumetric_fog_temporal_reprojection_enabled(或除非重新投影量显着降低)。


float shadow_bias = 0.1 🔗

用于调整阴影外观。太小的值会导致自阴影(“阴影痤疮”),而太大的值会导致阴影与脚轮分离(“peter-panning”)。根据需要进行调整。


float shadow_blur = 1.0 🔗

模糊阴影的边缘。可用于隐藏低分辨率阴影贴图中的像素伪影。高值会影响性能,使阴影看起来颗粒状,并可能导致其他不需要的伪影。尽量保持接近默认值。


int shadow_caster_mask = 4294967295 🔗

  • void set_shadow_caster_mask(value: int)

  • int get_shadow_caster_mask()

光线只会使用选定图层中的对象投射阴影。


bool shadow_enabled = false 🔗

  • void set_shadow(value: bool)

  • bool has_shadow()

如果true,光线将投射实时阴影。这具有显着的性能成本。只有当它对场景外观产生明显差异时才启用阴影渲染,并考虑使用distance_fade_enabled在远离Camera时隐藏光线。


float shadow_normal_bias = 2.0 🔗

用对象的法线偏移对阴影贴图的查找。这可用于减少自阴影工件,而无需使用shadow_bias。实际上,此值应与shadow_bias一起调整,以尽可能减少工件。


float shadow_opacity = 1.0 🔗

渲染光线阴影贴图时使用的不透明度。低于1.0的值使光线通过阴影出现。这可以用来以较低的性能成本伪造全局照明。


bool shadow_reverse_cull_face = false 🔗

  • void set_shadow_reverse_cull_face(value: bool)

  • bool get_shadow_reverse_cull_face()

如果true,则反转网格的背面剔除。当您有一个后面有灯的平面网格时,这可能很有用。如果您需要在网格的两侧投射阴影,请将网格设置为使用GeometryRender.SHADOW_CASTING_SETTING_DOUBLE_SIDED的双面阴影。


float shadow_transmittance_bias = 0.05 🔗


方法说明

Color get_correlated_color() const 🔗

返回给定light_temperature处理想化黑体的Color。该值在内部根据light_temperature计算。此Color在发送到RenderingServer之前乘以light_color


float get_param(param: Param) const 🔗

返回指定Param参数的值。


void set_param(param: Param, value: float) 🔗

设置指定Param参数的值。