关于 blender-time-of-day
面向 Blender 场景创作者的时间、氛围与雾效设置技能,可通过脚本配置日照、夜景和预设情绪。它会创建独立环境元素并返回关键光照参数。
主要功能
- 01按时段配置天空与光照
- 02设置预设氛围效果
- 03控制雾能见度与高度
- 04平衡环境曝光
- 05保留场景对象并替换自身生成内容
适用场景
- 01设置日出或黄金时刻场景
- 02为夜景添加月光、星空与薄雾
- 03创建赛博朋克或恐怖氛围
- 04为山谷场景配置低层雾
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ el4cteo/ blender-skills --skill blender-time-of-day安装后在 Claude Code 中输入/blender-time-of-day确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/fog-volumetrics.mdlight-values.mdnight-and-moods.mdscripts/_bpyx.pyscene_mood.py详细介绍
一天中的时段与氛围
执行模型位于 blender-core。工作室和产品布光位于 blender-lighting-lookdev,渲染设置位于 blender-rendering,雨雪、湿润效果和闪电位于 blender-weather-fx。
一次调用
scripts/scene_mood.py -- --time golden # sun 6 deg, warm, long shadows
scripts/scene_mood.py -- --time night --fog-visibility 250 # moonlight + stars + haze
scripts/scene_mood.py -- --time noon --overcast 0.8 # soft grey day
scripts/scene_mood.py -- --mood cyberpunk # moonless, neon rim pair, fog, bloom
scripts/scene_mood.py -- --time morning --fog-visibility 120 --fog-height 4 # valley fog
时段:noon morning afternoon golden sunrise sunset blue_hour night moonless。氛围:cyberpunk horror underwater desert(每种氛围都会设置默认值,显式标志会覆盖这些默认值)。使用 --elevation DEG(负值表示低于地平线)和 --heading DEG(0 = +Y,90 = +X)覆盖太阳位置。如果省略 --heading,太阳将位于相机视线方向的 135° 处,形成能展现形体的侧光或逆光。正面光看起来很平。
脚本会创建 ENV_World、ENV_Mood 集合(太阳或月亮、雾盒、点缀灯光),以及用于氛围的 ENV_Grade(合成器节点树)。你的对象不会受到影响,重新运行时会替换脚本创建的所有内容。脚本会返回主光源的强度、颜色和仰角、曝光值以及任何警告。
如何确保物理准确
- 天空:使用
ShaderNodeTexSkyMULTIPLE_SCATTERING(5.0+;SINGLE_SCATTERING是旧版的“Nishita”),并设置sun_disc=False。太阳由 Sun 灯模拟,因为它在两种渲染引擎中都能产生清晰的阴影。灯光的颜色及其相对于天空的强度来自一张表格,数据根据 Blender 5.2 自带的天空模型测量,并按每个仰角列出(夕阳颜色约为[1.0, 0.22, 0],正午约为[1.0, 0.86, 0.68])。这样可以确保天空与太阳保持一致。 - 尺度:在 AgX、曝光值为 0 的情况下,正午时 0.18 灰卡上的太阳照度约为 4 W/m²。
- 曝光平衡:每种预设都会测量地面与朝向太阳的墙面之间的灰卡,并缩放环境灯光,使灰卡达到该预设的亮度(正午 1.0、金色时段 0.85、日落 0.7、蓝调时段 0.35、夜晚 0.2、无月夜 0.1)。实际灯光会保持原有功率,与环境光的效果相符。
- 物理替代方案:
--use-exposure会将差值设为view_settings.exposure。结果会返回practical_scale:将你的灯光功率乘以该值,即可保持相同的观感。 - 夜晚:月亮由 Sun 灯模拟,缩放前为 0.3 W/m²(仰角 35°,冷色
[0.72, 0.82, 1.0];月光的物理色温约为 4100 K,因 Purkinje 位移而呈现蓝色)。夜空穹顶采用天顶渐变,地平线处有城市辉光(钠橙色;赛博朋克氛围下为洋红色),星星仅对相机光线可见。 - 雾:在场景和相机周围放置盒状体积。密度 = 3.912 / 可见度(Koschmieder 定律:以米为单位的可见度 → 每米消光系数)。添加
--fog-height可生成指数型地面雾。曝光会补偿雾造成的光线损失,最多补偿 4 EV,使雾保持浓密,而不是仅仅变暗。相机看到的背景会向雾色混合。
雾与体积效果
| 效果 | --fog-visibility(米) |
|---|---|
| 空气清澈 / 远处薄霾 | 5000–20000 |
| 霾、沙漠尘埃 | 1000–3000 |
| 薄雾 | 500–1000 |
| 雾 | 100–500 |
| 浓雾、恐怖氛围 | 20–60 |
| 水下(清澈 → 浑浊) | 30 → 8 |
- 光束需要四个条件:强主光源(太阳灯/聚光灯)、遮挡物(窗户、树木、遮光图案)、前向散射(
--fog-anisotropy 0.6–0.85),以及 EEVEE 的use_volumetric_shadows(脚本会启用此项)。 - Cycles 5.x 默认使用无散射方式渲染体积(无偏差,不设步长)。
scene.cycles.volume_biased=True会恢复光线步进(volume_step_rate)。高度雾属于非均匀体积,噪点更多,因此需要增加采样数或使用降噪。 - EEVEE 体积使用 froxel:将
volumetric_tile_size从 4 调到 2 可提升细节,volumetric_end必须覆盖雾的范围(脚本会设置此项)。距离相机很近的浓雾容易出现条带,因此建议使用 Cycles。 - 无需体积即可实现廉价的远处薄霾:使用 Mist 通道(
view_layer.use_pass_mist、world.mist_settings.start/depth),并在合成器中混合。 - 更深入的细节请参阅 references/fog-volumetrics.md。
规则
- 先确定光线方向(侧光/逆光),再确定时间。低角度阳光(日落黄金时刻)=长阴影和暖色主光,与冷色天空补光形成对比,这是最讨喜的组合。
- 夜景不只是“加一层蓝色”:要保留对比度(清晰的月光阴影、成片的暖色实景光源、暗色剪影),降低饱和度,并添加实景光源。参见 references/night-and-moods.md。
- 实景光源使用真实色温(
light.use_temperature=True、light.temperature):钠灯 2000 K、钨丝灯 2700 K、暖色 LED 3000 K、中性 LED 4000 K,霓虹灯使用自发光灯管。功率和换算请参见 references/light-values.md。 - 保持视图变换为 AgX(脚本会设置该值,并应用类似
AgX - Punchy的氛围预设)。--keep-view会保留你当前的设置。 - 每种氛围都要通过渲染而非视口进行验证:雾、星星和辉光只会在渲染结果中显示。使用
blender-renderingrender_batch.py --preset preview。
注意事项
- 地平线以下的天空纹理会显示一片暗色“地面”。将地面平面或地形延伸至地平线,或让地平线不出现在画面中。
- 辉光/眩光阈值是视图曝光之前的场景线性值。使用
--use-exposure时,脚本会为你缩放阈值。 - 如果合成器节点树不是
ENV_Grade,脚本不会覆盖它,而是报告这一情况。 SunLight.use_nodes和灯光节点树在 5.x 中已弃用(计划在 6.0 中移除)。请改用灯光颜色和temperature。- 天空纹理的
sun_direction仅适用于旧版 Preetham/Hosek 模型。sun_rotation为 0 时,太阳朝向 +Y;为 90° 时,朝向 +X(经实测)。 - 更改渲染引擎后无需重新运行。脚本会同时设置 EEVEE 和 Cycles 的体积设置。
评论
支持 Markdown