全实时雪地渲染技术-开源项目

📅 2026/7/31 9:03:28
全实时雪地渲染技术-开源项目
「16-全实时雪地渲染技术-巴比伦JS」/~1a003ZscWu~:/链接https://pan.quark.cn/s/4d5472d3a776SNOWFLOW一个实时雪地渲染技术演示。基于 WebGPU Babylon.js全程手写 WGSL。仓库中没有任何纹理、网格、HDRI 或动画数据——你在屏幕上看到的一切都是在加载时由 GPU 实时生成的。▶ 在线演示 snowflow-lilac.vercel.app运行要求​ 支持 WebGPU 的桌面浏览器Chrome/Edge 113、Firefox 141、Safari 26以及独立显卡或较新的集成显卡。设计上不提供 WebGL 回退若检测到navigator.gpu缺失页面会明确提示并停止运行。操作控制操作功能点击画面捕获指针W / A / S / D相对摄像机方向移动鼠标视角转动 · 滚轮缩放Shift冲刺右键长按雪地冲浪​ — 在雪面上滑行并掀起雪浪1 – 5五个法术2 号为持续施法F1 / 设置面板与性能叠加层叠加层将所有美术参数暴露为实时滑块——太阳角度、风向、次表面散射半径、形变深度、色调映射曲线、曝光等——并附带帧时间图中位数 / 95% / 1% Low、Draw Call、三角形数与各系统 CPU 耗时分解。任意系统均可单独关闭并提供法线、深度、级联覆盖、形变缓冲区与原始阴影贴图的调试视图。核心功能地形采用嵌套环形几何 Clipmap8 个环内层间距 8.5 cm半径约 870 m33.3 万三角面仅一个静态网格一次 Draw Call顶点仅携带(gridIndex, ringLevel)世界坐标放置、CDLOD 过渡与位移全部在顶点着色器中完成CPU 无需重建每帧无数据上传底层高度场由分层梯度噪声 解析导数生成围绕单一主导风呈各向异性宽阔的横卧沙丘脊线长距离低缓起伏沿风向剪切的中尺度漂移迎风/背风不对称稀疏岩石露头高度场一次性烘焙为4096² RG32F 纹理并镜像回 CPU角色接地采样的是与绘制完全一致的表面而非其重实现版本。雪地着色多尺度法线烘焙宏观坡度 解析雪脊与波纹 三层平铺细节陡坡面三平面投影包裹漫反射 深度相关蓝调次表面散射背散射​ GGX 高光SH 环境光包含求解出的雪地反弹光程序化视角相关闪光受掠射角门控压缩度、湿度与结冰作为表面状态通道被材质读取而非独立材质。阴影为手写三级级联带世界空间 PCSS遮挡物搜索 → 半影估计 → 旋转泊松滤波世界空间纹素对齐基于旋转不变包围球稳定Babylon.js 内置级联生成器在此不可用地形没有与绘制匹配的 CPU 几何因此每个投射物必须注册其实际使用的顶点程序。形变系统Deformation持久化、累加式地形状态缓冲区两个2048² RGBA16F​ Target覆盖 80 m3.9 cm/纹素每帧一次全屏 PassPing-Pong在同一 Dispatch 中完成滚动、松弛与泼溅环面寻址ToroidalUV fract(worldXZ / size)视口跟随玩家而无需拷贝缓冲区新暴露纹素由同一 Pass 检测并清零四个通道凹陷深度、位移质量、压缩度、结冰。第二个通道位移质量区分了“带隆起雪埂的轨迹”与“扁平脚印贴花”。回填逻辑各向异性扩散松散雪埂坍塌速度是压实沟底的 3 倍雪埂向凹陷处塌陷上风向风驱填充缓慢指数衰减约71% 的轨迹深度在一分钟后保留期间持续扩散、软化形变为真实几何在最终渲染与三级阴影级联中通过同一 Include 生效因此轨迹自投影、雪埂破坏轮廓。脚掌、冲浪雪浪、五个法术均通过同一个brush()调用写入同一缓冲区。角色系统完全程序化生成​ —— 无骨骼文件、无动画片段、无手工网格。18 根骨骼绑定姿势来自数值表几何体兜帽、躯干、手臂、裤腿、靴子、腰带在加载时从该表放样生成运动由运动状态求解而非播放动画脚部踩踏距离驱动的站立/摆动状态机在触地瞬间精确写入一次脚的全局位置并绝对锁定双骨骼 IK 朝向该点拉伸——已踩住的脚不可能滑动因为代码中没有任何逻辑能移动它。步态相位随地面行进距离推进步幅与地面速度在数学上天然一致。衣物Verlet 布料4 个布片带距离、弯曲与形状记忆约束9 个身体碰撞胶囊体下摆贴合雪面。褶皱存在于静止形状而非法线贴图中。36×12 的布料求解结果在顶点着色器中通过 Catmull-Rom 重建渲染为 72×32 表面曲面细分与模拟开销完全解耦。兜帽边缘与袖口的壳毛发Shell Fur为局部圆环体发射 22 次通过哈希发丝场进行 Alpha Test。仅一张小纹理承载所有数据第 0–3 行存骨骼矩阵第 4 行起存模拟布料节点。每帧一次上传无额外分配。雪地冲浪Snow-Surf雪浪为扫掠网格Swept Mesh而非粒子特效。脊柱为滑板路径每 30 cm 重采样一次存入 96×3 数据纹理网格本身是(column, row, side)的静态晶格所有顶点在 VS 中放置19 米与 2 米的雪浪消耗相同的 Buffer 与相同的 4.6 KB 上传带宽横截面为基于转向切线积分的破波浪切线从底部略低于水平到顶端 284°一个卷曲参数即可连续控制从低矮堆积到悬垂唇缘的形态振幅与卷曲按两侧分别解析转弯外侧承担绝大部分积雪峰值墙高在全速刻划时达 2.4 m0.88 秒后坍塌雪浪长度 寿命 × 速度无需第二个常数法线从与几何完全相同的wakePoint差分得出二者永不冲突。两类喷溅源自同一脊柱紧贴波峰的密集慢速水帘飞离的弹道颗粒附加屏幕空间速度拖尾与满载边缘的镜头抖动五个法术一种水体材质、一个网格、一次 Draw Call、八股水流。其中四个法术移动同一连贯水体结构上属于同一种对象沿脊柱的扫掠曲面带半径、平行输运标架与泡沫通道——与冲浪雪浪构造相同。未启用的股流通过清零行关闭Draw Call 数量不随法术数量变化。法术描述Sweep横扫​新月形雪泥从地面升起向外推进犁出沟壑并抛起雪埂Ribbon缎带​持续施法追踪手部与准星绘制进动的 8 字在掠过的雪面刻下细曲线释放后头部锁定准星加速水流以释放时的弯曲形态弧线击中目标Bloom绽放​定点喷发带隆起边缘的陨石坑 沿自身轴线升降的束腰柱体 4 秒底部照亮的坠落帷幕Crystallise结晶​沿黄金角螺旋生长的六棱柱Alpha 混合 深度写入透过冰层可见雪地但棱柱互不穿透切面法线来自屏幕空间导数边缘绝对锐利Vortex漩涡​环绕玩家的三股螺旋上升雪流空中质量沿螺旋以切向速度发射唯一写入负凹陷的系统​折射无需场景拷贝与二次不透明 Pass。天空 LUT 已存储地平线下求解出的雪地反弹光沿折射射线单次采样即可物理估算任意方向后方颜色三次不同折射率采样得到色散路径长度吸收得到色调。每帧声明4 个池化动态光源全部运行与太阳相同的snowSubsurface逻辑——法术通过雪埂顶部照亮雪地而非仅在近面打亮。雪地、长袍、雪浪、空中喷溅、水体与冰层全部从同一 Include 读取同一光照池。天空与大气Nishita 单次散射积分 多重散射近似 迭代求解雪地反弹烘焙为等距柱状 LUT SH 辐照度 Mip 层级高光。采用解析大气而非捕获 HDRI整体观感高度依赖 10–15° 仰角的太阳——调整太阳高度时地平线暖调、天顶渐变、环境色调与直射阳光颜色同步变化远景为在天空盒上光线步进的高度场无几何天然位于一切之后解析法线山脊相互遮挡朝向太阳进行二次短步进以生成自身投射阴影使用雪地材质逻辑照明受同一大气雾化与近景雪地在颜色上无缝衔接后处理管线以相机空间深度预 Pass线性视图深度作为 Varying 传递 高光掩码驱动整条链路TAAHalton(2,3) 抖动直接写入投影矩阵并整帧冻结确保预 Pass 与最终 Pass 亚像素对齐基于深度的重投影、方差裁剪、五点 Catmull-Rom 历史采样Bloom三级阈值基于曝光值仅太阳盘、闪光与受照喷溅参与预过滤使用 Karis 平均体积光God Rays沿射线向太阳方向在预 Pass 中积分天空可见性太阳仰角高时自动淡出景深刻意轻微焦平面跟踪 Spring Arm 自身长度按各采样点的模糊圈加权屏幕空间反射仅作用于冰面由预 Pass 掩码门控Crystallise 未施放时整帧跳过AgX / ACES 色调映射 → 对比度自适应锐化 → 颗粒感 → 暗角性能数据测量环境WebGPU Timestamp Queries2560×1440Chrome / Win11 / RTX 5070 Ti全系统开启指标数值GPU 帧时间3.22 ms​— 基础场景Clipmap、雪地、3 级联、天空、角色、形变、预 Pass1.64 ms— 后处理链~1.1 ms— 远景~1.2 ms— 角色骨骼、布料、毛发、喷溅 0.02 msDraw Calls15–19三角形数~353,00090 FPS 预算余量7.9 ms渲染循环零分配所有 Buffer 构造时定长每帧写入均进入预分配的 Typed Array所有材质、程序化纹理与渲染管线均在加载界面显式isReady()门控并预热确保首个法术施放不会在帧中间编译管线。显存占用约 350 MB4096² 高度纹理两个 2048² 形变 Target三个 2048² 阴影级联天空与细节 LUT本地运行npm install npm run dev # Vite 开发服务器端口 :5173 npm run build # 生产构建至 dist/ npm run preview # 预览生产构建目录结构src/ ├── main.js # 入口与帧调度 ├── core/ # 设置、输入、相机臂、性能、加载、GPU 辅助 ├── terrain/ # 高度场、Clipmap 网格、形变状态缓冲 ├── render/ # 天空 IBL、阴影级联、深度预 Pass ├── character/ # 骨骼、程序化几何、布料求解、雪面接触 ├── vfx/ # 池化粒子、雪地冲浪雪浪 ├── spells/ # 五个法术、共享水体、光源池 ├── post/ # 后处理链 ├── ui/ # 设置面板与性能叠加层 └── shaders/ # 全部 WGSLlib/ 存放共享 Include资产与许可证无任何第三方美术资产。​运行中看到的每一张“纹理”、每一个环境贴图、每一个网格均由 GPU 在加载时实时生成天空 大气积分雪粒与地形 噪声角色 数值表放样织物编织与毛发 片元着色器实时求值运行时依赖babylonjs/core、babylonjs/materialsApache-2.0构建依赖ViteMIT不参与最终输出分发。本项目源码基于 MIT 许可证发布。