SuperAPI AI 工具集

threejs-rain-snow-and-wet-surfaces

设计与创作

查看项目

更新于 10-16 09:21

技能介绍

用途

该技能把 Three.js 的雨、雪与湿润表面效果耦合在一起,围绕一条因果链组织实现:一个时间源与一个风场驱动空中降水,每个接收器有且只有一个所有者负责对已沉积的雨或雪进行积分。融化与再冻结只在液体和雪之间做等量质量转移。可视粒子数量用于采样天气,不用于设置沉积质量。

主要能力

  • 空中降水运动:区分解析式顶点运动(位置是种子、时间与积分风场的精确函数)与 GPU 常驻的递推状态(受湍流、碰撞、反馈或路径历史影响下一状态时使用)。
  • 物理表面沉积:以物理面积求积对强度通量积分,将水平/源面积通量一次性转换为接收器相对的表面到达量。
  • 持续性状态:为液体与雪库存各自维护一个接收器状态所有者,并对跨系统量声明单位、坐标系、时间间隔、权威/版本、支撑、有效性与重置语义。
  • 材质投影:从已提交的接收器快照派生所有表面效果,包括雪的高度与法线、湿度与积水掩码、涟漪法线、溅射等。
  • 呈现与验证:通过单一 RenderPipeline 呈现,并提供诊断视图与可观测检查项。

使用方式

使用 Three.js r185 的 WebGPURenderer、TSL、storage nodes、节点材质与节点后处理栈。必须在分配计算或存储之前初始化渲染器:

await renderer.init();

if (renderer.backend.isWebGPUBackend !== true) {
  throw new Error('This weather path requires the WebGPU backend.');
}

构建顺序为:

  1. 命名所有者与单位:声明单调采样的时间源与秒级更新间隔;世界米每秒的空气速度场(含坐标系、支撑、节奏、有效性);相变、融化或蒸发依赖时的开尔文温度与命名湿度约定;以 kg m^-2 s^-1 表示的液/冰质量面积通量为降水强迫;每个液体或雪库存的接收器状态所有者;HDR 呈现、色调映射与输出转换的所有者。外观云与因果降水应作为两条独立分支。
  2. 分配状态前先选定运动模型:位置是精确函数时用不可变种子与解析顶点运动;湍流、碰撞、反馈或路径历史影响下一状态时用 GPU 常驻递推状态。作者化的时变风场只有在位移积分可得时才保持解析。无界视觉天气使用以相机为中心的流式细胞格(其身份、生成相位与轨迹在稳定世界空间中哈希);局部天气使用世界锚定的有界体积。撞击与累积始终使用世界稳定的接收器细胞格,与视觉池独立。
  3. 分离沉积与视觉采样:用物理面积求积积分强度通量:
sum_i A_i = represented receiver area
deltaMass = deltaTime * sum_i(massFlux_i * A_i)

每个 A_i 包含以平方米表示的物理接收器雅可比。当稀疏撞击代表已积分的转移时,将这一外延质量与动量在撞击间划分,使其总和恰好闭合一次父级转移。渲染的条纹/雪花密度、精灵尺寸与视觉 LOD 不参与该计算。 4. 全网格更新排序,使用如下因果顺序:锁定时间、风与降水强迫 → 推进解析或递推的空中降水 → 解析并分箱撞击 → 发布沉积/撞击转移 → 积分接收器液体与雪状态 → 提交接收器状态 → 构建渲染投影。当后续阶段消费前面阶段的整网格结果时,将求解器、碰撞/分箱、扫描/压缩、间接参数与接收器各通道拆分为有序调度。r185 的 computeAsync() 视为初始化/入队便利,而非 GPU 完成栅栏。稳定帧状态保持在 GPU 上;主机回读仅用于帧关键执行之外。 5. 只投影一个已提交的接收器状态:同一高度场派生雪位移与雪法线;物体上的雪在稳定模型空间采样,并用变换后的世界空间支撑法线门控;先应用早期湿润响应,再启用大雨涟漪法线;一个湿度/积水掩码同时用于粗糙度、吸收、涟漪资格、溅射强度与掩码诊断;溅射朝向由世界空间接收器法线决定,拒绝朝下、无支撑或按所选可见性策略隐藏的候选。 6. 呈现与证伪:在 MeshStandardNodeMaterial 或 MeshPhysicalNodeMaterial 的颜色、粗糙度、法线、不透明度与位移插槽中使用。通过单一 RenderPipeline 呈现。编码的基础色纹理标记为 SRGBColorSpace;法线、粗糙度、掩码、噪声、LUT、涟漪与天气场视为数据。HDR 缓冲区保持线性,直到唯一的色调映射/输出转换所有者。为强迫版本与年龄、运动/细胞格、撞击、沉积质量、接收器项、雪高/法线、湿度/涟漪、溅射朝向/可见性、数据纹理解释与最终输出提供诊断。

适用场景

适用于基于 WebGPU 的实时天气渲染:降水运动、物理沉积、长期积雪与湿润状态、湿滑表面材质响应、涟漪与溅射等。

限制与路由边界

该技能要求 WebGPU 后端,非 WebGPU 环境会抛出错误。有界水体、折射、焦散与 Beer-Lambert 厚度应使用 $threejs-water-optics;非天气粒子系统使用 $threejs-particles-trails-and-effects;屏幕空间触摸或清除历史使用 $threejs-dynamic-surface-effects;场景级 HDR/后处理所有权使用 $threejs-image-pipeline;大场景阴影分配使用 $threejs-scalable-real-time-shadows。本技能拥有降水传输与天气专属的接收器投影;路由选定的接收器所有者拥有持久的液体或雪库存。

可观测检查

  • 相机平移保持降水相位与撞击(失败:细胞格身份或撞击支撑为相机相对)。
  • 风变化弯曲未来运动而不平移整个场(失败:当前风乘了已流逝时间而非被积分)。
  • 条纹长度跟随下落速度/曝光,漂移跟随共享风(失败:精灵几何或某个表面分支使用了独立时钟或风)。
  • 无界天气没有发射器接缝,局部天气有刻意边界(失败:所选视觉域契约不完整)。
  • 雪轮廓与光照同步移动(失败:位移与法线来自不同场)。
  • 动画物体上的雪保持附着其表面(失败:覆盖在世界空间而非稳定模型空间采样)。
  • 湿表面在大雨涟漪出现前先变化(失败:粗糙度被涟漪掩码而非接收器湿度门控)。
  • 变换后溅射仍停留在有支撑的可见面上(失败:候选法线或可见性在局部/不稳定空间评估)。
  • 密集递推天气没有逐滴对象循环或整块热缓冲区上传(失败:状态或呈现离开了 GPU 常驻分支)。
  • 数据字段保留值且最终颜色只有一个显示变换(失败:数据纹理被当作颜色解码,或输出转换执行两次)。

其他具体实现细节、参数取值与目标平台性能指标以原文为准。