mcpField
3
3d-four-seasons

3d-four-seasons

github.com/mengto创意与媒体7.1k537 次安装3 天前更新
代码仓库

关于 3d-four-seasons

用于为 3D 场景加入协调的四季变化,同时保留场景、摄像机和交互。指导开发者将季节状态用于植被、材质、光照、积雪与动态效果。

主要功能

  1. 01四季混合状态
  2. 02协调季节光照与材质
  3. 03按树种调整植被
  4. 04依据暴露情况添加积雪
  5. 05流畅切换与减少动态效果

适用场景

  1. 01创建易于辨认的四季场景
  2. 02切换季节并避免颜色累积偏移
  3. 03仅在暴露表面选择性覆盖积雪

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mengto/skills --skill 3d-four-seasons

安装后在 Claude Code 中输入/3d-four-seasons确认已加载。

附带文件agents/openai.yamlREFERENCES.md

详细介绍

3D 四季

让一个易于辨认的地点贯穿四季。每个季节都应改变若干相互协调的视觉线索,同时保留相机状态和交互方式。

设计季节特征

盘点落叶树、常青树、裸露表面、避风表面、灯光、天空和现有天气。根据项目选择适合的树种和气候;下表是温带场景的起点。

季节植被与地面光线与氛围动态效果
春季新鲜的植被;适宜树种开花柔和温暖的日光;轻柔薄雾零星花瓣或嫩叶
夏季茂密浓绿的植被;地面覆盖完整更强的日光;阴影中的绿意清晰可见克制的落叶与微风
秋季符合树种特点的琥珀色、红色和棕色;落叶较低的暖色阳光;金色薄雾更多飘落的树叶
冬季落叶树枝干裸露;常青树保留;裸露处覆雪冷色天空补光;苍白的阳光;温暖的室内光可选的零星降雪;较少的落叶

仅在粒子效果有助于场景表现时才使用它们。季节选择器不需要暴风雪或完整的天气模拟器。

共享一种状态

使用由四个分量组成的混合值,顺序为 [spring, summer, fall, winter]。将 autumn 作为 fall 的别名接受,然后规范化为一个内部键。权重初始值均为非负数,且总和为 1。

const presets = {
  spring: [1, 0, 0, 0], summer: [0, 1, 0, 0],
  fall: [0, 0, 1, 0], winter: [0, 0, 0, 1],
};
const weights = [0, 1, 0, 0];
let target = presets.summer;
function setSeason(name) {
  const key = name === 'autumn' ? 'fall' : name;
  if (!Object.hasOwn(presets, key)) return false;
  target = presets[key];
  return true;
}
function stepSeason(dt, reducedMotion = false) {
  const a = reducedMotion ? 1 : 1 - Math.exp(-1.4 * Math.min(Math.max(dt, 0), 0.05));
  for (let i = 0; i < 4; i++) weights[i] += (target[i] - weights[i]) * a;
}

将相同状态传入材质 uniform、天空、太阳光与补光、粒子密度,以及可选的环境音频。选择新季节时,应将当前混合效果转向新状态,而不是排入另一个动画或重置为夏季。根据已设定的基础值和权重计算每项结果;反复对上一帧的颜色进行染色会导致偏移。

逼真地改变植被与积雪

使用针对树种的调色板和稳定的实例 ID。在冬季,通过确定性阈值或抖动逐渐减少落叶树的枝叶。保留常青植被的覆盖。为阴影和深度材质应用匹配的可见性与风力规则,避免已消失的树叶仍投射夏季的阴影。

要以较低成本表现积雪,可将冬季权重与朝上的世界空间几何法线及暴露遮罩结合:

snow = winterWeight * smoothstep(0.3, 0.85, worldNormal.y) * exposure

将材质混合为浅色、粗糙的雪材质。仅靠朝上的法线也会让遮蔽处的桌面和室内地板变白;请为物体添加暴露标签,或提供遮蔽遮罩。材质叠加不会增加厚度,也不会改变轮廓。只有在深度表现重要的特写边缘处,才添加局部积雪几何体。如果场景模拟积雪堆积和融化,请将降雪强度与积雪覆盖量分开处理。

保持过渡响应灵敏

预先分配粒子池,并重复使用材质和几何体。更改 uniform,而不是重新编译着色器或重建场景。扩展着色器时保留现有材质钩子,并使用稳定的程序缓存键;应匹配已安装渲染器的着色器片段,不要假定旧的注入点仍然存在。

让季节与一天中的时间及天气保持独立。根据这些输入一次性计算最终光照状态,避免多个控制器覆盖同一组太阳或雾效参数。在受控的状态变化时刷新开销较大的环境贴图,并尽可能使用缓存。

使用支持键盘操作的控件,显示当前选中状态并更新无障碍标签。启用减少动态效果时,应立即应用所选季节的外观,并保留构图完整的静态场景。页面隐藏时暂停持续动画。

验证

使用同一台摄像机捕捉四季。每个季节都应无需标签即可辨认。在过渡期间快速切换春天 → 冬天 → 夏天 → 秋天,并检查是否出现颜色漂移、阴影过时、分配峰值以及摄像机控制丢失。验证室内/室外的雪景曝光、常绿植物保留情况、粒子数量,以及桌面端/移动端渲染效果。

阅读 REFERENCES.md。Seijaku 展示了共享的 uSeason 权重、setSeason、snowInject、植被稀疏化和季节性光线着色。完整的降雪物理模拟和气候模拟属于扩展功能,并非该实现所声称具备的功能。

评论

支持 Markdown