Inkwash:一个水彩速写应用及其原理详解

查看原文 HN 讨论

文章摘要

Inkwash 是一个「装在单个 HTML 文件里的水彩模拟器」,在浏览器里重现了用钢笔配合水笔速写的体验。它由艺术家 Johno Whitaker 与 Claude Fable 5 协作完成:用户先用钢笔勾线,再用蘸水的笔触晕染,墨线会以真实的方式扩散、晕开边缘,并产生水彩特有的色彩分离效果。

技术上,模拟器维护了多张浮点纹理「画纸」,分别追踪不同属性:墨水场(用 RGB 表示光学密度即吸收率,而非颜色)、固着层(已沉淀并与纸张结合的颜料)、湿度场、速度网格(约 256 格的粗粒度水流层)以及用于不可压缩计算的压力场。流体部分采用了 Jos Stam 的 Stable Fluids 算法(半拉格朗日平流,反向移动流体以保证稳定),再加上压力投影和涡度增强来维持画面的活力。湿度纹理则像一个「许可系统」,控制着整套模拟:只有湿润的纸面才存在流速,颜料的流动性随湿度增加,水分随时间指数级蒸发。

最具特色的是「色谱分离」效果:黑墨中不同染料在遇水时移动速度不同,着色器按通道以不同速率扩散,自然分离出「深色核心加冷色光晕」,无需特效,纯靠物理。最终成像用比尔–朗伯定律模拟光线穿过颜料的指数衰减,让笔触叠加处自然加深,避免了普通 alpha 混合产生的死黑。整个应用是一个无外部依赖的自包含 HTML 文件,却能在手机上跑出 60 fps,即便每帧要执行十二个着色器通道。

HN 评论精华