关于 threejs-particles-trails-and-effects
面向 Three.js 的 GPU 粒子、轨迹与视觉效果设计技能,指导开发者处理状态归属、渲染、时间行为、验证和性能预算。
主要功能
- 01GPU 驻留的粒子状态与更新
- 02确定性生成与身份生命周期
- 03压缩与邻域表示选择
- 04轨迹和时间历史处理
- 05深度、HDR 与输出归属
- 06验证与资源预算
适用场景
- 01设计循环粒子模拟
- 02构建 GPU 压缩粒子池
- 03添加轨迹并避免历史残留
- 04验证透明 HDR 效果
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ linegel/ threejs-complete-set-of-skill --skill threejs-particles-trails-and-effects安装后在 Claude Code 中输入/threejs-particles-trails-and-effects确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
LICENSEagents/openai.yamlreferences/particles-trails-and-effects-system.mdscripts/trail-ring-oracle.mjs详细介绍
表征优先的粒子、轨迹与特效
管理驻留于 GPU 的对象空间与世界空间特效:生成、运动、生命周期、压缩、绘制表征、深度/混合行为以及场景线性 HDR 发射。视口历史交由 $threejs-dynamic-surface-effects 处理,天气累积交由 $threejs-rain-snow-and-wet-surfaces 处理,创作的事件运动交由 $threejs-procedural-motion-systems 处理,共享后期处理则交由 $threejs-image-pipeline 或 $threejs-bloom 处理。
当特效使用由其他系统负责的碰撞、强制或交换数据时,请在步骤 1 之前完成此处的本地交接:
- 指明数量及单位、生产者帧/原点、变换版本和原点代次;
- 指明半开源区间、采样频率、采样相位、不可变的生产者版本以及获准的池消费者;
- 声明支持范围/滤波器、有效性、过时策略、错误策略以及缺失/溢出策略;
- 标记单向读取,或指明双向数据的源/反作用所有者、应用顺序以及已应用的状态版本;
- 绑定 GPU 资源代次、生产与消费通道、完成依赖项,并在不连续、重定位或代次变化时重置,同时确保稳定帧无需回读。
源所有者保留权威;池仅消费不可变的发布数据。若路由需要其他系统所有者,请调用 $threejs-choose-skills。然后阅读耦合输入,了解特效专属的所有权与降级规则。
流程
1. 定义可观测内容及其所有者
编写一份特效契约,其中包含:
- 事件区间、确定性种子、特效类别、变换以及流动/冲击方向;
- 坐标系、距离/时间单位、生命周期时钟以及跳转/重置行为;
- 可见作用:轮廓、运动、照明、残留或遮挡;
- 深度测试、深度写入、混合/排序、HDR 信号以及最终输出的所有者;
- 所有外部生产者,以及该池仅用于呈现还是由独立所有的物理实体提供支持。
每项可见或物理声明都归属一个所有者,且每项输入都有帧、时间、有效性策略和消费者时,此步骤即告完成。
2. 选择运动与邻域表征
选择能够表征该机制的最精简可写状态:
| 机制 | 表征 |
|---|---|
| 姿态和外观完全由生成数据与时间决定 | 不可变的生成记录;在顶点 TSL 中进行解析求值 |
| 状态按粒子独立递归 | 结构数组热状态;一个明确命名的计算积分阶段 |
| 碰撞或场反馈会改变状态 | 递归状态,以及同帧、同采样时间的所属 GPU 场/代理 |
| 邻居交互很重要 | 在有界局部交互前构建空间网格/哈希,或进行排序与扫描 |
独立选择分配方式:
| 占用行为 | 分配/压缩 |
|---|---|
| 空槽的成本低于扫描/散射流量 | 稳定槽位、携带代次的标识、存活标记以及有界可见范围 |
| 密集输出能显著减少后续工作 | 执行 mark -> exclusive scan -> scatter -> publish indirect count,写入第二组状态 |
| 移除操作与唯一的源/目标所有权串行化 | 可使用密集尾部交换;以原子方式移动所有状态和标识通道 |
对于递归或压缩池,请在实现前阅读状态与压缩。对于邻居交互,请阅读邻域交互。每个可写通道以及每个选定的压缩或邻域阶段,都有下游消费者或经测量确认的节省作为依据时,此步骤即告完成。
3. 明确状态转换和身份生命周期
明确规定顺序:
ordered event packets
-> deterministic spawn/range allocation
-> optional neighborhood build from committed source state
-> analytic evaluation or one recurrent next-state update, including interaction
-> optional ordered compaction
-> optional trail sample and publication
-> draw from the committed state/count
-> post consumers
仅生成一次冷参数,并且只更新循环通道。实体在槽位移动期间保持身份稳定。在呈现前,出生、死亡、槽位重用、瞬移、表示形式变化以及先前状态不可用,都会使运动矢量、轨迹、插值和时间历史失效。解析式粒子会同时计算先前和当前呈现时间;循环池会保留其模拟状态对,并在渲染器进行插值或跳过 tick 时,单独保留带时间戳的先前呈现状态。
相机切换或其他仅影响呈现的不连续情况,只会重置受影响的屏幕空间运动和时间累积,不会重启粒子模拟、生命周期、身份或有效的世界空间轨迹历史。
如果效果会影响 TAA、运动矢量、轨迹或多帧后期处理,请阅读时间身份。每个状态版本只有一个写入方、绘制使用已提交的版本,并且重用的槽位无法继承先前实体历史时,此步骤即告完成。
对于带状轨迹或历史轨迹,请阅读轨迹历史与带状轨迹。
4. 构建 r185 GPU 路径
使用 three/webgpu 中的 WebGPURenderer,调用 await renderer.init(),并要求此规范路径满足 renderer.backend.isWebGPUBackend === true。将关于 WebGPU 不可用情况的教学引导至 $threejs-compatibility-fallbacks。对于循环状态,使用 Fn().compute(...)、renderer.compute(...)、存储节点和 StorageInstancedBufferAttribute。使用 SpriteNodeMaterial 绘制精灵粒子;使用 InstancedMesh 和 NodeMaterial 系列材质绘制有形状的粒子。密集压缩通过 IndirectStorageBufferAttribute 发布间接命令,并调用 geometry.setIndirect()。
r185 中的 computeAsync() 等待的是渲染器初始化,而不是 GPU 完成。将全局阶段依赖表达为有序分派,并让帧关键计数和状态驻留在 GPU 上。
实现计算、间接绘制、边界或完成逻辑时,请阅读 r185 执行事实。当每个获准的生成、更新、邻域、压缩、轨迹发布和绘制阶段都有明确的 GPU 顺序,空状态和溢出状态会发布有效的计数和映射,并且稳态帧路径不执行回读或逐粒子对象更新时,此步骤即告完成。
5. 绑定表示形式、深度和输出
面向摄像机的火花使用精灵或实例化四边形,有形状的碎片使用实例化光照网格,贴合表面的等离子体使用基于外壳生成的几何体,尾流使用生成的胶囊体/轮廓几何体。对于贴合流场的效果,请阅读外壳与尾流。对于火花或碎片效果,请阅读解析式火花与溶解碎片。
为每种绘制类别明确深度和透明度约定。对于由存储驱动的运动,使用分块解析式边界或 GPU 归约。让场景线性 HDR 中的美术效果只经过一个色调映射/输出转换处理方。全场景泛光读取 HDR 美术效果;只有在美术设计明确要求包含/排除效果,且透明混合有效、附件开销经过测量时,才分配选择性自发光 MRT。
接受透明或自发光效果之前,请阅读深度、HDR 与输出。当遮挡、排序、边界、HDR 贡献和最终转换各自都有一个经过测试的处理方时,此步骤即告完成。
6. 验证机制并控制预算
捕获有种子的固定时间状态,并仅展示适用的证据:事件和生成范围;对于池化状态,展示实时数量/槽位数量、溢出、身份以及年龄/速度;对于压缩状态,展示压缩次数和映射;对于轨迹,展示头部/数量、按时间顺序排列的样本和断点;对于局部交互,展示邻域占用情况和溢出;对于选定的绘制和后期处理类别,展示边界、深度模式、原始 HDR、可选的选择性信号、泛光贡献、过绘制和 GPU 时间。仅在可见工作负载相同的情况下比较已纳入的替代方案。
纳入泛光时,应通过禁用泛光来验证画面路径,并确保轮廓、层级职责、深度和运动清晰可辨,无须依赖光晕。扩展规模时,先停止空闲工作、移除不必要的可写状态或压缩,然后减少活动数量、场带宽、透明层数和后期处理范围,同时保留选定的运动类别和所有者。
阅读资源核算和诊断与故障特征,了解适用的分支。完成此技能的标准是:有种子的结果可重复;每个纳入的事件、更新、邻域、压缩、轨迹、绘制和后期处理阶段都有顺序证据;稳定身份和重置控制均通过验证;帧路径不需要任何回读;深度和输出所有权唯一;纳入泛光时,关闭泛光后的图像仍清晰易读;并且完整场景符合指定的资源和时间预算。