在 WebGPU 中手写一个水墨晕染模拟器:Navier-Stokes 流体力学偏微分方程求解

发布时间:2026/10/10 3:55:18
在 WebGPU 中手写一个水墨晕染模拟器:Navier-Stokes 流体力学偏微分方程求解 在中国传统书画艺术中“墨分五色水晕墨章”被奉为墨戏的无上境界。当饱蘸浓墨的狼毫笔轻轻触碰吸水性极佳的生宣纸饱含胶质的松烟墨汁瞬间顺着宣纸内部交错纵横的植物纤维网络急速渗透。清水在前开道墨粒在后追随水与墨在毛细管压力的驱使下相互冲撞、弥散、交融最终在纸面上凝固成层次丰富、边缘虚实相生的飞白与晕染。在数字艺术与前端图形学的探索中如何在浏览器中逼真复刻这种灵动的晕染质感一直是一座令人心驰神往的技术险峰。在过去很多尝试局限于 2D Canvas 的径向渐变或简陋的高斯模糊滤波其生成的边缘不仅圆滑呆板更完全丧失了流体碰撞时特有的涡流卷曲与动态生命力。真正具有说服力的水墨晕染其物理内核必须扎根于经典的连续介质力学——不可压缩流体动力学纳维-斯托克斯方程Navier-Stokes Equations。今天我们将借助现代浏览器最高性能的通用计算通道——WebGPU Compute Shader用 WGSL 着色语言在 GPU 显存内部手写一套基于有限差分法的偏微分方程求解器在数字屏幕上复现那抹惊艳千年的东方水墨晕染。水墨物理机制与流体力学方程建模从微观物理层面解剖宣纸上的水墨演化本质上是“多孔介质中的两相不可压缩流体流动与被动标量对流扩散”。水流驱动着微小的炭黑悬浮颗粒其运动轨迹严格受制于著名的不可压缩纳维-斯托克斯方程组$$\frac{\partial \mathbf{u}}{\partial t} -(\mathbf{u} \cdot \nabla)\mathbf{u} - \frac{1}{\rho}\nabla p \nu \nabla^2 \mathbf{u} \mathbf{f}$$$$\nabla \cdot \mathbf{u} 0$$其中$\mathbf{u}$ 代表流体速度矢量场$p$ 为流体内部压力标量场$\rho$ 为流体密度$\nu$ 为运动粘度系数$\mathbf{f}$ 为外部注入的外力如毛笔拖拽或纸张倾斜重力第二个方程连续性方程表明流体是不可压缩的即速度场的散度处处为零Divergence-free。而悬浮在水中的墨汁浓度标量 $C$则遵循被动标量的对流-扩散方程Advection-Diffusion Equation$$\frac{\partial C}{\partial t} -(\mathbf{u} \cdot \nabla)C \kappa \nabla^2 C - \beta C$$其中 $\kappa$ 为墨汁在水体中的分子扩散系数$\beta$ 为宣纸干燥纤维对墨颗粒的不可逆物理吸附阻尼率。WebGPU 显存网格与计算管线编排在 WebGPU 中求解上述方程我们将二维画布划分为例如 $1024 \times 1024$ 的离散化欧拉网格Eulerian Grid。在显存中我们开辟数块与网格尺寸对齐的高精度浮点 Storage Buffer 或 2D 存储纹理速度缓冲区Velocity Buffer存储二维向量 $(u_x, u_y)$压力缓冲区Pressure Buffer存储标量 $p$墨汁浓度缓冲区Dye Density Buffer存储墨汁的浓度与水分含量宣纸纤维障碍图Paper Fiber Map预烘焙带有各向异性噪声的粗糙度阻尼场。在每一帧的模拟循环中WebGPU 的计算管线按序执行以下四个离散求解相位平流项求解Advection Phase采用无条件稳定的半拉格朗日法Semi-Lagrangian Scheme逆向沿着速度矢量回溯粒子在上一时间步的位置并进行双线性插值采样粘性扩散项求解Diffusion Phase采用隐式求解策略利用雅可比迭代法Jacobi Iteration并发解算扩散泊松方程外力与墨汁注入Force Dye Sourcing根据用户鼠标或笔触交互向网格定向注入局部冲量与高浓度墨汁质量守恒投影与压力泊松方程Projection Phase通过多次雅可比迭代求解速度场的散度并用压力梯度修正速度场强制保证流体的无散度特性消除由于数值离散产生的压缩误差。WGSL 核心计算着色器半拉格朗日平流与雅可比压力迭代以下是在 WebGPU Compute Pipeline 中运行的核心 WGSL 着色器实现切片struct SimUniforms { gridSize: vec2f32, dt: f32, viscosity: f32, }; group(0) binding(0) varuniform uniforms: SimUniforms; group(0) binding(1) var velocityIn: texture_2df32; group(0) binding(2) var velocityOut: texture_storage_2drgba32float, write; group(0) binding(3) var linSampler: sampler; // 1. 半拉格朗日平流着色器计算速度场自对流 compute workgroup_size(16, 16) fn cs_advection(builtin(global_invocation_id) id: vec3u32) { let coords vec2i32(id.xy); let uv (vec2f32(coords) 0.5) / uniforms.gridSize; // 采样当前网格节点的速度 let currentVel textureLoad(velocityIn, coords, 0).xy; // 逆时间步回溯历史源头坐标点 let pastUV uv - currentVel * uniforms.dt * (1.0 / uniforms.gridSize); // 利用硬件双线性采样器平滑抓取历史速度 let advectedVel textureSampleLevel(velocityIn, linSampler, pastUV, 0.0).xy; textureStore(velocityOut, coords, vec4f32(advectedVel, 0.0, 1.0)); } // 2. 雅可比迭代着色器求解压力泊松方程 (Laplacian p Div v) group(1) binding(0) var pressureIn: texture_2df32; group(1) binding(1) var divergenceIn: texture_2df32; group(1) binding(2) var pressureOut: texture_storage_2dr32float, write; compute workgroup_size(16, 16) fn cs_jacobi_pressure(builtin(global_invocation_id) id: vec3u32) { let c vec2i32(id.xy); // 提取四邻域像素的压力值 let pL textureLoad(pressureIn, c - vec2i32(1, 0), 0).r; let pR textureLoad(pressureIn, c vec2i32(1, 0), 0).r; let pB textureLoad(pressureIn, c - vec2i32(0, 1), 0).r; let pT textureLoad(pressureIn, c vec2i32(0, 1), 0).r; // 提取当前网格的散度 let div textureLoad(divergenceIn, c, 0).r; // 离散拉普拉斯算子逆解 let newPressure (pL pR pB pT - div) * 0.25; textureStore(pressureOut, c, vec4f32(newPressure, 0.0, 0.0, 1.0)); }宣纸纤维微观吸收与水墨渲染后处理单纯的流体物理模拟出来的运动看起来像是在光滑玻璃板上的墨水流动。要赋予其“跃然纸上”的灵魂必须在最终的片元着色管线中注入宣纸的微观物理属性多孔毛细阻力置换我们将一张高分辨率的生宣纸纤维扫描纹理作为渗透阻力场。水流在遇到致密的纤维束时被迫分流绕行在空隙较大的区域则加速奔涌自然勾勒出水墨特有的“锯齿状毛边”胶矾分离与水圈Water Ring Effect古墨中含有胶质。胶质由于分子量大在宣纸纤维中迁移速度较慢而纯水迁移极快。我们在着色器中对水分子场与炭黑粒子场施加不同的扩散速率差这使得墨滴外围形成了一圈晶莹剔透但没有颜色的“水痕圈”随后浓墨在内部层层沉淀再现出中国工笔画中最迷人的水晕圈纹。运行效能与美学成就这套完全由 WebGPU 驱动的水墨模拟器在 Chrome 浏览器中展现出惊艳的物理表现力在 $1024 \times 1024$ 的超高分辨率物理网格上包含 40 次雅可比迭代的单帧计算流水线在主流显卡上仅需4.8 毫秒整体帧率稳定维持在120 FPS支持多点触控与压感手写笔的实时墨迹泼洒墨汁在指尖划过之处不仅有物理波澜的翻滚回旋更在停笔的一刹那顺着虚拟宣纸的肌理悄然向外丝丝晕开虚实相济妙趣横生。这项实验再次向我们证明现代计算机图形学的终极魅力在于用极致严密的现代数学物理偏微分方程为那些沉淀在古典文明深处的诗意与意境搭建起一座通往数字永恒的彩虹之桥。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询