Loading
0404 / 09物理引擎不知道粒子会发光。它只认识位置、速度与类型数组,不认识泛光、轨迹或网格。
这种分离是刻意的。渲染可以让状态更容易理解,却不能通过改变物理让状态显得更有趣。过长轨迹会让随机漂移看起来有目的,过强泛光会把并未形成结构的粒子融成一团。
为便于检查规则,此处增强了线条亮度。
连接线始终由状态派生:同类型、屏幕直接距离 ≤30 px、每对只画一次,全局最多 8,192 条。轨迹使用前三帧缓冲,亮度为 0.30、0.10、0.03,并在 1.5× 以上自动关闭。
WebGPU 与 WebGL2 实现同一接口:渲染、调整尺寸、设置点大小与轨迹、报告设备丢失并销毁资源。模拟循环向两者提供相同的位置、类型与连接段。
系统优先尝试 WebGPU;适配器缺失或失败时切换到 WebGL2。视觉技术可以降级,行为不会改变。
WebGL2 可以绘制 GL_POINTS,而 WGSL 没有等价的可编程点大小。每个 WebGPU 粒子因此是一个由六个顶点组成的实例化四边形。顶点着色器展开它,片元着色器裁出圆形并计算径向光晕。
WebGL2 回退不执行多阶段泛光
连接线、可选轨迹幽灵和当前粒子先构建 HDR 场景;泛光从该场景以四分之一分辨率生成。最终阶段绘制网格,再叠加清晰场景与泛光。WebGL2 保留线、轨迹、着色器光晕与网格,但省略多阶段泛光。
连接线、轨迹残影和当前粒子先进入 HDR 场景纹理。场景缩小到四分之一分辨率,依次水平与垂直模糊,最后与清晰场景和程序化网格合成。两维都缩小四倍后,模糊只处理十六分之一的像素。
清晰场景保存精确位置,泛光表达密度与能量。
四槽缓冲环保存当前帧与前三帧,旧帧亮度为 0.3、0.1、0.03。它是短暂视觉记忆,不是引擎创造的运动。
速度超过 1.5× 后轨迹关闭,因为采样点已经相隔太远,无法诚实描述路径。
三十像素内的同类粒子可以连接。每一对只出现一次,总数上限 8,192。只在环形接缝处靠近的粒子不会连接,以免平面画布出现横跨整个屏幕的线。
后备路径使用 GL_POINTS、相同配色、加法混合、轨迹与连接线。它没有完整多阶段泛光,但保留了位置、运动与局部关系的层级。
WebGPU 画布不能直接改成 WebGL2。设备丢失时,React 挂载新画布并重新绑定现有循环。位置、速度、矩阵、种子和时间都继续存在,只有视图被替换。
打开模拟器,把速度提高到 1.5× 以上。物理没有突然改变;渲染器只是停止作出无法继续支持的视觉陈述。