ProceduralSkyMaterial

继承: Material < Resource < RefCounted < Object

一种材质,可为 Sky 资源定义简单天空。

描述

ProceduralSkyMaterial 提供了一种通过为太阳、天空和地面定义程序参数,来快速创建一个有效背景的方法。天空和地面由主颜色、地平线颜色、以及在它们之间插值的缓动曲线定义。太阳通过天空中的位置、颜色、以及缓动曲线结束时距太阳的最大角度来描述。因此,最大角度定义了天空中太阳的大小。

ProceduralSkyMaterial 支持最多 4 个太阳,它们使用场景中前四个 DirectionalLight3D 节点的颜色、能量、方向和角距离。这意味着太阳由其相应的 DirectionalLight3D 的属性单独定义,并由 sun_angle_maxsun_curve 全局定义。

ProceduralSkyMaterial 使用轻量级着色器来绘制天空,因此适合实时更新。这使得它成为简单、低计算成本且不切实际的天空的绝佳选择。如果你需要更真实的程序化选项,请使用 PhysicalSkyMaterial

属性

float

energy_multiplier

1.0

Color

ground_bottom_color

Color(0.2, 0.169, 0.133, 1)

float

ground_curve

0.02

float

ground_energy_multiplier

1.0

Color

ground_horizon_color

Color(0.6463, 0.6558, 0.6708, 1)

Texture2D

sky_cover

Color

sky_cover_modulate

Color(1, 1, 1, 1)

float

sky_curve

0.15

float

sky_energy_multiplier

1.0

Color

sky_horizon_color

Color(0.6463, 0.6558, 0.6708, 1)

Color

sky_top_color

Color(0.385, 0.454, 0.55, 1)

float

sun_angle_max

30.0

float

sun_curve

0.15

bool

use_debanding

true


属性说明

float energy_multiplier = 1.0 🔗

  • void set_energy_multiplier(value: float)

  • float get_energy_multiplier()

天空整体亮度的乘数。数值越高,天空就越亮。


Color ground_bottom_color = Color(0.2, 0.169, 0.133, 1) 🔗

  • void set_ground_bottom_color(value: Color)

  • Color get_ground_bottom_color()

地面底部的颜色。会与 ground_horizon_color 混合。


float ground_curve = 0.02 🔗

  • void set_ground_curve(value: float)

  • float get_ground_curve()

ground_horizon_color 渐变到 ground_bottom_color 的速度。


float ground_energy_multiplier = 1.0 🔗

  • void set_ground_energy_multiplier(value: float)

  • float get_ground_energy_multiplier()

地面颜色的乘数。值越高,地面越亮。


Color ground_horizon_color = Color(0.6463, 0.6558, 0.6708, 1) 🔗

  • void set_ground_horizon_color(value: Color)

  • Color get_ground_horizon_color()

地面在地平线处的颜色。会与 ground_bottom_color 混合。


Texture2D sky_cover 🔗

要使用的天空覆盖纹理。这个纹理必须使用一个等角投影(类似于PanoramaSkyMaterial)。 该纹理的颜色将被添加到现有的天空颜色中,并将乘以 sky_energy_multipliersky_cover_modulate。这主要适用于显示夜晚的星星,但也可以用来显示白天或夜晚的云彩(具有非物理精确性的外观)。


Color sky_cover_modulate = Color(1, 1, 1, 1) 🔗

  • void set_sky_cover_modulate(value: Color)

  • Color get_sky_cover_modulate()

应用于 sky_cover 纹理的色调。可用于改变天空覆盖的颜色或不透明度,不受天空能量的影响,对于昼夜转换或天气转换很有用。只有在 sky_cover 中定义了纹理时才有效。


float sky_curve = 0.15 🔗

  • void set_sky_curve(value: float)

  • float get_sky_curve()

sky_horizon_color 渐变到 sky_top_color 的速度。


float sky_energy_multiplier = 1.0 🔗

  • void set_sky_energy_multiplier(value: float)

  • float get_sky_energy_multiplier()

天空颜色的倍数。值越高天空越亮。


Color sky_horizon_color = Color(0.6463, 0.6558, 0.6708, 1) 🔗

  • void set_sky_horizon_color(value: Color)

  • Color get_sky_horizon_color()

天空在地平线处的颜色。会与 sky_top_color 混合。


Color sky_top_color = Color(0.385, 0.454, 0.55, 1) 🔗

  • void set_sky_top_color(value: Color)

  • Color get_sky_top_color()

天空在顶部的颜色。会与 sky_horizon_color 混合。


float sun_angle_max = 30.0 🔗

  • void set_sun_angle_max(value: float)

  • float get_sun_angle_max()

太阳完全淡出消失的位置与太阳中心的距离。


float sun_curve = 0.15 🔗

  • void set_sun_curve(value: float)

  • float get_sun_curve()

在太阳圆盘边缘和 sun_angle_max 之间,太阳消失得有多快。


bool use_debanding = true 🔗

  • void set_use_debanding(value: bool)

  • bool get_use_debanding()

如果为 true,则启用去色带。去色带会增加少量噪点,这有助于减少天空中颜色的平滑变化而出现的色带。