mcpField
T
threejs-particles-trails-and-effects

threejs-particles-trails-and-effects

github.com/linegel开发11140 次安装5 周前更新
代码仓库

关于 threejs-particles-trails-and-effects

面向 Three.js 的 GPU 粒子、轨迹与视觉效果设计技能,指导开发者处理状态归属、渲染、时间行为、验证和性能预算。

主要功能

  1. 01GPU 驻留的粒子状态与更新
  2. 02确定性生成与身份生命周期
  3. 03压缩与邻域表示选择
  4. 04轨迹和时间历史处理
  5. 05深度、HDR 与输出归属
  6. 06验证与资源预算

适用场景

  1. 01设计循环粒子模拟
  2. 02构建 GPU 压缩粒子池
  3. 03添加轨迹并避免历史残留
  4. 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 外,安装时一起下载的参考资料和脚本。

LICENSE
agents/
openai.yaml
references/
particles-trails-and-effects-system.md
scripts/
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 时间。仅在可见工作负载相同的情况下比较已纳入的替代方案。

纳入泛光时,应通过禁用泛光来验证画面路径,并确保轮廓、层级职责、深度和运动清晰可辨,无须依赖光晕。扩展规模时,先停止空闲工作、移除不必要的可写状态或压缩,然后减少活动数量、场带宽、透明层数和后期处理范围,同时保留选定的运动类别和所有者。

阅读资源核算和诊断与故障特征,了解适用的分支。完成此技能的标准是:有种子的结果可重复;每个纳入的事件、更新、邻域、压缩、轨迹、绘制和后期处理阶段都有顺序证据;稳定身份和重置控制均通过验证;帧路径不需要任何回读;深度和输出所有权唯一;纳入泛光时,关闭泛光后的图像仍清晰易读;并且完整场景符合指定的资源和时间预算。

评论

支持 Markdown