关于 3d-falling-leaves
用于在 3D 场景中制作落叶动画的技能,面向图形开发者,指导实现翻转与飘移,并将落叶融入场景后进行验证。
主要功能
- 01双面叶片几何与着色
- 02每片叶子的固定随机参数
- 03随风联动的翻转与飘移
- 04实例化渲染与回收
- 05深度、阴影和季节集成
适用场景
- 01为 3D 环境添加稀疏落叶
- 02制作多样落叶运动并避免帧间抖动
- 03检查落叶在建筑和室内的表现
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ mengto/ skills --skill 3d-falling-leaves安装后在 Claude Code 中输入/3d-falling-leaves确认已加载。
附带文件agents/openai.yamlREFERENCES.md
详细介绍
3D 落叶
让单片叶子在场景中飘动时,依次呈现正面、侧面和背面。清晰可见的侧面瞬间是这一效果的关键。
制作出逼真的单片叶子
使用双面四边形或轻微弯曲的网格,并赋予叶片易于辨认的轮廓、叶柄和克制的叶脉细节。朝向镜头的点精灵无法转到侧面。先制作一片缓慢飘动的叶子,再增加数量。
让背面颜色稍浅、饱和度稍低,并正确调整其光照法线的方向。对于自定义着色器,可使用 gl_FrontFacing 区分正反面;如果引擎的材质已处理双面光照,就不要再次翻转法线。让光线透射效果保持微妙,并与场景中的太阳光关联,而不要让叶片始终发光。
使用带填充边距的纹理图集来放置多种叶片轮廓。将边缘颜色延伸到透明像素中,并在 mip 级别中保留填充边距,以防出现暗边和图集串色。将颜色图集视为 sRGB;将编码遮罩或材质通道的图集视为数据。Seijaku 的程序化图集编码了通道,不是普通的树叶照片。
协调翻转和飘移
为每片叶子分配持久的种子值:位置种子、缩放、相位、翻转速率、滚转速率、下落速度、横向滑移和调色板变化。不要在每帧生成新的随机值。
横向速度应随翻转变化,让叶子在侧面朝向观察者时滑移得最快。对于远离零值的角速度 omega:
const angle = phase + omega * time;
const sideOffset = -(slip / omega) * Math.cos(angle);
// d(sideOffset)/dt = slip * sin(angle)
沿叶子选定的水平方向应用该偏移。使用单独的缓慢滚转和倾斜;不要让所有叶子共享同一种节奏。加入具有细微逐叶响应差异的公共风场。以有界的模拟步长积分变化的风,或使用闭式场;绝不要通过无界循环追赶整个隐藏标签页期间积累的时间。
实例化与回收
对于中等数量的叶子,使用 InstancedMesh 和可复用的 CPU 临时对象;对于更大的叶群,则使用实例化属性和着色器动画。种子属性只上传一次;更新时间、风、季节强度和相机锚点 uniform。使用 CPU 路径时,正确刷新实例矩阵和边界。请参阅 InstancedMesh。
将回收区域中心放在相机前方,方向沿水平视线。视线几乎竖直向上或向下时,保留一个备用水平方向。随着相机移动,保持现有叶子的世界坐标位置;移动生成/回绕边界,而不要将所有活动叶子都设为相机的子级。
在可见中央区域之外进行回绕。使用 1.0 - smoothstep(inner, outer, distance) 在边界附近淡出,其中 inner < outer;GLSL 中反向的 smoothstep 边界未定义。将重置事件隐藏在雾中、区域顶部附近,或柔和的边界淡出之后。为每个下落周期设定种子,让变化自然且不产生逐帧抖动。
先从稀疏的叶群开始,并缩小其可见范围,再增加数量。区分容量、活动数量和实际可见的叶子数量。使用少量近景叶子、层次清晰的中景叶子,以及更小的远景叶子。避免最近的叶子以巨大的模糊形状遮挡镜头。
融入世界
- 对建筑和地面进行深度测试。排除被覆盖的室内空间,或提供屋顶/地形碰撞代理;仅进行深度测试无法防止树叶落入室内。
- 若要获得清晰的轮廓,默认采用带深度写入的 Alpha 测试。只有实际渲染目标启用了多重采样时,MSAA Alpha-to-Coverage 才能柔化边缘。自定义着色器必须自行实现 Alpha 剔除;仅设置材质不会插入任意自定义着色器逻辑。
- 如果需要 Alpha 混合,请谨慎处理深度写入和排序。默认情况下,不会对实例逐一进行深度排序。
- 在任何阴影或遮挡通道中,都要匹配树叶的镂空和风力形变。如果树叶投射阴影的成本或伪影超过了其视觉效果,请禁用树叶投射阴影。
- 让季节状态控制调色板和活动密度;不要为每个季节都分配一个新的树叶系统。
验证
观察一片树叶完成翻滚和完整下落周期。确认它的正面和背面不同、边缘会变薄,而且重置过程不可见。横向行走、转身、抬头观察、进入房间,并在隐藏标签页后恢复。检查视野在狭窄和宽阔视口中的表现、经过最终色调映射器后的效果,以及冻结在构图状态时的减弱动态效果。测量过度绘制和更新成本,不要想当然地认为粒子没有开销。
阅读 REFERENCES.md 了解参考实现。Seijaku 的 leafFall 提供了闭式动画模式;请将其中硬编码的屋顶矩形替换为目标场景的几何体或空间体积。