跳转至

20260421 水墨画笔触2D、3D实现调研

调研水墨画笔触/画面的2d/3d实现,包括且不限于游戏引擎、blender以及程序化随机化等方面,以及开源闭源的情况。

下面是基于你给的方向,把「水墨画笔触 / 画面」在 2D / 3D 里的技术路线、游戏引擎 / Blender 实践、程序化随机化手法,以及开源 / 闭源生态整理成的一份可直接用于立项或技术选型的调研总结。


一、整体技术图景:从传统笔触到数字水墨

数字水墨本质上是非真实感渲染(NPR)在中国画语境下的一个分支。典型技术拆解可以粗略分为:

  1. 轮廓线 / 勾线
  2. 法线与视线点积(dot(n, v))/ 视差(rim light)检测轮廓与折痕,再用水墨笔触纹理叠加。
  3. 屏幕后处理(对深度 / 法线图做边缘检测)。
  4. 在 3D 里常配合“扩张外壳”描边模型或 SDF 笔触。
  5. 内部墨色 / 皴法与晕染
  6. 贴图 + 噪声(Perlin / Voronoi / 分形噪声)模拟纸纹、墨色浓淡和飞白。
  7. 物理 / 半物理扩散:基于宣纸和水墨传输模型,用流体或扩散方程模拟墨晕[1][2]。
  8. 多通道 / 多图层渲染:分“基本笔画区、扩散区、不规则边界区”分别处理[3]。
  9. 风格整体调控
  10. 光照“非写实”:简化高光 / 阴影,按墨分五色(焦、浓、重、淡、清)映射灰度或明度。
  11. 轮廓 vs 内部:很多方案把描边和内部墨色分开着色,再合成[4]。
  12. 实现维度
  13. 2D:图像后处理、Shader Graph、粒子或屏幕空间笔触。
  14. 3D:顶点 / 片元 Shader、后处理、几何节点(Blender)或 Houdini 程序化建模 + UE/Unity 渲染。

二、2D 水墨渲染实现

2.1 图像级后处理(Engine / 通用)

典型做法(以游戏引擎为例):

  1. 灰度与对比度调节
  2. 把源图像转为偏冷灰度,提升对比以强化墨色层次,而不是简单“黑白 + 模糊”。
  3. 边缘检测 + 笔触线条
  4. Sobel / Laplacian 边缘 + 噪声纹理 → 不规则墨线(非纯几何线)。
  5. 或直接用法线 + 深度(在 3D 场景的 2D 输出上做)。
  6. 墨晕与模糊
  7. 多次高斯模糊 + 噪声遮罩,控制“哪里晕、晕多大”;
  8. 有论文用基于图像的水墨扩散模型,在高频细节区域降低扩散保留细节[5]。
  9. 纸纹和留白
  10. 将宣纸纹理(高频噪声)乘进亮度 / Alpha 通道,营造纸张吸墨感;
  11. 通过阈值 / 遮罩控制大片留白(山雾空白、云、水面等)。

优点

  • 对 2D 游戏或视频后期很友好,只改后处理,兼容现有素材。
    缺点
  • 与 3D 结构绑定有限,深度感与笔触方向难做到“随物赋形”。

2.2 2D 游戏典型实践

2D 水墨手游 / 小游戏大量采用:

  • 引擎层面:Unity / Cocos / WebGL
  • 技术要点:
  • 场景直接绘制为水墨风 Tile / 背景图,角色和 UI 用普通 2D Sprite;
  • 再叠加一层全屏水墨后处理(描边 + 晕染),强化整体统一感;
  • 粒子系统 + 手绘水墨粒子(墨滴、墨烟、破墨溅射)做技能与交互特效。

三、3D 水墨渲染:Unity / Unreal / 自研引擎

3.1 Unity 技术路线

人员成本和资料最丰富,适合作为主力研发引擎。

  1. 基于 Shader 的 3D 水墨风格
    常见做法(多个技术博客和项目实践中反复出现):

  2. 轮廓线

    • 方式 A:在 Shader 中利用 dot(n, v)、rim lighting,检测视角边缘,叠加水墨笔触纹理;
    • 方式 B:扩一个外壳模型反向法线 + 固定暗色 / 墨线纹理;
  3. 内部墨色 / 皴法

    • 使用 2D 或伪 3D Noise(把 2D Noise 映射到世界坐标)生成笔触走向、皴纹;
    • 通过世界空间或对象空间坐标采样笔触纹理,控制“山体皴纹顺势而下”;
  4. 多 Pass / 多层混合

    • 基础色(Diffuse)

    • 墨线层

    • 泼墨 / 飞白遮罩层(噪声乘进 Alpha)
    • 宣纸纹理层。
  5. 三维山水 / 国画风场景案例
    有较完整的“仿宋代水墨山水 3D 渲染”技术拆解:

  6. 使用 Height / Normal 贴图 + 噪声构造皴法;

  7. 通过伪 3D Noise 与世界坐标映射,保证从不同角度看皴纹连贯;
  8. 远近景用不同笔触密度、对比度和饱和度模拟“远山淡墨,近景重墨”[6]。

  9. 正式开源项目示例(3D_ChineseInkPaintingStyleShader)

  10. 基于 Unity 的完整 3D 水墨 Shader 示例,提供项目源码;

  11. 主要实现:
    • 勾线 Shader + 水墨纹理混合;
    • 使用随机函数(基于顶点位置的 sin/cos)和噪声图控制笔触粗细、墨色随机变化;
  12. 许可证允许学习和二次开发(需确认具体 License 条款)。

  13. URP / Shader Graph 实现

  14. 使用 Shader Graph 拼接非真实感节点(NormalFromHeight、VertexID、Truchet 等)可以在图形化界面完成基础水墨效果;

  15. 对技术美术友好,方便做风格探索和程序化控制(参数暴露给 Inspector)。

3.2 Unreal Engine(UE4 / UE5)技术路线

Unreal 在重型 3D 水墨场景 / 动画上更常见。

  1. 材质 + 后处理组合

  2. 场景材质中实现水墨着色:

    • 利用材质节点做 paper texture / ink noise / height-based 皴纹;
    • 法线与视线点积、曲率检测 + 外扩 outline mesh 做墨线;
  3. 后处理材质叠加统一的水墨滤镜(纸纹、墨晕、失焦)。

  4. Custom Shading Model / 魔改引擎

  5. 有项目通过自定义 Shading Model 来支持东方绘画风格(Toon、国画等),在 GBuffer 阶段就编码“墨色层级”和“轮廓强度”。

  6. 程序化与大场景

  7. 利用 UE5 的 PCG(Procedural Content Generation)和 Houdini 进行程序化山体 / 植被;

  8. 然后在材质中施加水墨着色,使宏观构图符合“水墨构图规律”(三远法、层层叠山)。

  9. 闭源特色:电影级动态水墨引擎

  10. 如电影《哪吒之魔童闹海》团队自研的“动态水墨渲染引擎”,在 3D 动画中实时模拟墨晕、留白和粒子化水墨效果[7]。

  11. 此类引擎多属于

    企业内部闭源技术

    • 有专利描述“粒子水墨”“3D 水墨渲染”等;
    • 对外只以技术分享或论文形式部分披露思路,不开放源码。

3.3 其他 / 自研引擎

  • 部分公司(如 Lumverse、一些国产 3D 引擎)展示了“水墨江南实时三维场景”,

通常也是:

  • 自研渲染管线 + NPR 模块;
  • 内建纸纹、墨线、墨晕 Shader;
  • 出于商业考虑大多闭源。

四、Blender 生态下的水墨实现

Blender 是免费开源三维平台,但具体的水墨插件 / Asset 既有闭源商用,也有教程 / 节点网络可自建。

4.1 商业 / 闭源插件

  1. Watercolor Renderer(实时水彩 / 水墨风渲染插件)
  2. 面向 Eevee 的实时水彩渲染插件:
    • 全局风格配置 + 局部顶点绘制两套控制;
    • 模拟纸纹、颜料扩散、边缘色散等。
  3. 在多个素材站出售(非开源,付费)。
  4. Inkwood Shader 预设包
  5. 将 3D 模型“重新设计”为水墨 / 油画风格:
    • 在 Eevee 下实时工作,含轮廓线、笔触和纸纹;
  6. 同样是商业资产包(闭源)。
  7. InkTool(三维水墨创作工具)
  8. 基于 Geometry Nodes 的 3D 水墨插件,可以把任何模型转成“国画风墨线 + 块面”;
  9. 通过几何节点生成轮廓线、笔触实例化等;
  10. 发布渠道多为爱发电 / B 站推广,通常是付费、不开源源码。

4.2 开放教程 / 节点实现

  1. 水墨材质节点网络(公开教程)
  2. 用 Blender Shader Nodes 实现:
    • 底层:噪声(Noise / Musgrave) + 纸纹(纹理图);
    • 中层:通过 Object / World 坐标驱动笔触走向;
    • 顶层:混合 Base Color 与笔触 Mask,控制飞白与浓淡。
  3. 相关实现已被人移植到 Unity Shader 中,说明节点逻辑相对简单、可迁移。
  4. Grease Pencil + 手绘线条
  5. 用 Grease Pencil 绘制 2D / 2.5D 墨线,再配合底层 3D 模型;
  6. 有人制作传统墨水风格的 Grease Pencil 笔刷(纹理笔 + 抖动参数),免费分享在社区(但笔刷本身多为资产,代码无关)。
  7. Geometry Nodes 程序化勾线 / 构图
  8. 利用几何节点依数据(法线、曲率、位置)筛选边缘,生成国画式轮廓线;
  9. 再配合材质实现淡墨填色和纸纹。

总结

  • Blender 本身是开源;
  • 高质量水墨插件多为闭源商用(Watercolor Renderer、Inkwood、InkTool 等);
  • 但你完全可以依据公开教程自己搭 Shader/Node 网络,复刻出接近效果。

五、程序化与随机化:让水墨“活起来”

程序化与随机化是让数字水墨摆脱“平贴纹理”、“机械重复”的关键。主要有几层:

5.1 噪声驱动的随机笔触

  1. 轮廓抖动与飞白
  2. 用 2D / 3D 噪声扰动轮廓线的 UV 或世界坐标:
    • offset = noise(worldPos * scale + randomSeed)
    • 将偏移乘进颜色 / Alpha,形成不规则边缘和飞白;
  3. Unity 里常用噪声贴图 _OutlineNoise 来扰动轮廓,使轮廓随模型而非随屏幕。
  4. 笔触粗细 / 浓淡随机化
  5. 在顶点 Shader 中以顶点坐标 / VertexID 作为随机种子,通过 sin/cos 函数生成伪随机数控制:
    • 笔触宽度;
    • 不同区域墨色深浅。
  6. 在 Unity 的水墨项目中,已有人用顶点位置作为随机源控制 outline 粗细和颜色抖动。

5.2 程序化生成笔触而非“死贴图”

很多 3D 水墨项目都强调:

放弃预制贴图,采用实时程序化生成笔触,笔触随镜头与场景要素“生长”。

典型做法:

  1. 笔触路径由几何 / 摄像机驱动
  2. 按视距、视角、运动速度,用程序生成“刷痕”:
    • 摄像机远时:笔触更粗、更抽象;
    • 近景:增加细节、多层皴纹;
  3. 山体、树木、云水等元素的分布(Houdini / PCG 程序化生成)提供笔触生长路径。
  4. SDF + GPU 实例化(UE5 课程报告中给出的思路)
  5. 将笔触做成 SDF 纹理 / 体积,然后用 GPU 大量实例化,实时在 3D 空间排布墨线;
  6. 通过自定义“墨迹扩散算法”模拟水墨在纸上的扩散。
  7. 粒子 + 手绘纹理混合
  8. 粒子系统用来控制“有规律的笔触路径”,而不是完全随机粒子云;
  9. 粒子贴图使用手绘水墨笔触纹理,构成剑气、墨烟、浪花等效果;
  10. 随粒子生命周期改变 Alpha / 尺寸模拟“浓到淡、湿到干”。

5.3 数据驱动 / AI 向的程序化

在近两年 AIGC 水墨方向中,有几种思路值得借鉴:

  1. 深度学习驱动风格迁移
  2. 对传统水墨数据训练图像 / 视频风格迁移模型,将普通 3D 渲染或实拍转为水墨风格[8];
  3. 可用于离线生成贴图 / 概念分镜,而非实时游戏。
  4. 数据驱动笔触渲染
  5. 论文中有“Data-Driven Ink Painting Brushstroke Rendering”类方法:从真实笔触数据中学习笔触形状分布与扩散特征,从而程序化合成高保真笔触。
  6. 3D Ink Painting 工具(InkBrush 等)
  7. 有研究型工具允许在 3D 空间中用“笔刷”直接画墨线,内部用程序化笔触和动画生成真正体积化的墨迹[9]。

六、开源 vs 闭源:可用资源一览

这里只给出关键代表性方向,省略具体 URL,便于阅读。

6.1 值得关注的开源 / 免费方向

  1. Unity / GitHub 项目
  2. 3D_ChineseInkPaintingStyleShader(3D 水墨 Shader 项目)
  3. Unity 官方 + 社区的 NPR 教程(Toon / Outline)可直接改造用于水墨。
  4. 各类 Fluid / Smoke 模拟 demo,可复用为墨晕物理基础。
  5. Blender 相关
  6. Blender 自身(完全开源),支持:
    • Shader Node 自建水墨材质;
    • Geometry Nodes 程序化勾线 / 程序化山水;
    • Grease Pencil 用于 2D 墨线动画;
  7. 社区笔刷、材质节点多为免费共享(注意 License)。
  8. 学术代码与开源 Demo
  9. 浙江大学等关于“GPU 实时水墨画绘制”的代码示例[1](部分课程 / 论文配套);
  10. 国外“Real-time image-based Chinese ink painting rendering”等论文,有的提供数据或伪代码,可自行实现。
  11. AIGC 图像开源模型
  12. 各类开源文生图模型(如 Stable Diffusion 社区中的中式水墨 LoRA、Qwen-Image 等开源模型)可以用于:
    • 自动生成水墨贴图、笔触纹理、场景概念;
    • 生成 2D 水墨背景 / 插画资源。
  13. 不适合作为实时渲染核心,但很适合做资产生产管线。

6.2 主要闭源方向

  1. 商业插件 / 资产
  2. Blender:Watercolor Renderer、Inkwood、InkTool 等;
  3. C4D:RenderDancer(水墨渲染器)等;
  4. 这些一般以一次性授权方式售卖,不开放源码,但可学习其参数设计与使用流程。
  5. 内部引擎 / 大厂技术
  6. 动态水墨渲染引擎(《哪吒之魔童闹海》等);
  7. 各厂自研的 3D NPR 渲染管线(适配 UE / Unity 定制版本);
  8. 相关算法多通过专利 / 技术白皮书部分公开,但不会开源具体实现。
  9. AIGC 商业闭源模型
  10. 如 Banana Pro、部分高端视频生成模型,在水墨风格、文字渲染上表现突出,但:
    • 通常只提供云端 API,无法嵌入离线渲染管线;
    • 授权条款对游戏 / 影视商用有较多限制。

七、如果你要真正落地:推荐技术路线

根据你提的几个重点(2D/3D、游戏引擎、Blender、程序化随机化、开源 / 闭源),给一个比较务实的方案组合。

7.1 目标 1:可控、可实时的 3D 水墨游戏渲染(Unity)

推荐栈:Unity + URP + 自研 Shader + 程序化 Noise

  1. 立项阶段:
  2. 参考 GitHub 上的 3D_ChineseInkPaintingStyleShader 项目和“仿宋代水墨山水”Unity 实现案例,做一个技术 Demo:单一山体 + 天空 + 树
  3. 在 URP 中建立基础的 NPR 渲染框架(Outline + Toon + 自定义 Light Function)。
  4. 核心 Shader 要点:
  5. Outline:dot(n, v) + 噪声纹理扰动;提供笔触尺寸、随机强度参数;
  6. 内部墨色:1–2 张水墨皴纹贴图 + 1 张噪声图,世界空间采样;
  7. 飞白与纸纹:使用 2D 纸纹贴图乘进亮度 / Alpha;
  8. 远近景控制:根据深度 / 距摄像机距离调节对比度与细节密度。
  9. 程序化随机化:
  10. 使用 Shader 中的 worldPos / vertexID 做伪随机种子,控制:
    • 不同山体块的纹理偏移和笔触方向;
    • Outline 粗细随位置轻微抖动;
  11. 为树木、石头等元素提供“笔触模板”,由脚本或 Shader 随机组合排布。
  12. 资源管线:
  13. 贴图初版可由 AIGC(Stable Diffusion + 水墨 LoRA)生成,之后美术手工修正成循环纹理;
  14. 通过 Scriptable Render Feature 做屏幕后处理,再叠加全局水墨滤镜。

优点

  • 完全基于开源 / 自研 Shader,无 License 压力;
  • 与 Unity 整体生态兼容,适合中小团队。

7.2 目标 2:电影 / 宣传级 3D 水墨短片(Blender 导向)

推荐栈:Blender + Eevee/Cycles + 节点材质 + Geometry Nodes

  1. 造型与构图:
  2. 使用 Blender 建模 / 资产库 + 几何节点做程序化山体 / 植被;
  3. 几何节点生成勾线(基于边索引 / 法线变化筛选边)。
  4. 材质:
  5. 依据“水墨材质实现过程剖析”的节点:
    • 纸纹:纹理坐标 → 噪声 / 纸纹贴图 → 乘进 Base Color;
    • 墨色:利用 ColorRamp 控制“墨五色”,配合 UV / Object 坐标拉出皴纹走向;
    • 轮廓:用 Layer Weight / Fresnel 节点 + Noise 做边缘变体。
  6. 程序化随机:
  7. 使用 Object / Random Per Island 等节点,对不同对象 / 面随机赋值,推动材质参数细微变化(类似水墨手工不一致感);
  8. Blender 4.x 开始 Geometry Nodes 的字段系统,可以直接给实例化的笔触 / 树叶注入随机旋转、缩放、纹理偏移。
  9. 渲染与后期:
  10. Eevee 做实时预览,Cycles 做最终高质量渲染;
  11. 后期再用合成节点加一点镜头模糊、胶片颗粒和色调统一。

优点

  • 完全开源;
  • 适合做高质量短片、过场动画和宣传视频。

7.3 目标 3:研究级 / Demo 级程序化水墨与 AI 结合

如果你想做“下一代动态水墨引擎”的雏形,可以考虑:

  1. 先复现一篇经典 GPU 实时水墨论文中的核心扩散算法,用 Compute Shader 或 CUDA(如果目标是 PC / 主机)。
  2. 在 UE5 / Unity 里做“小规模 Demo”:限定墨层数量(例如仅角色轮廓与脚下水波使用物理墨晕)。
  3. 用开源文生图模型作为“纹理发生器”:
  4. 在离线阶段生成大量风格统一的水墨贴图、场景 concept;
  5. 在线阶段只做轻量级程序化变形与随机组合。

八、总结与选型建议

  1. 2D / 3D 上的差别更多在“是否需要与几何强绑定”
  2. 2D:后处理 + 贴图即可,技术门槛低;
  3. 3D:必须让笔触与法线、曲率、深度、视角绑定,Shader / 几何节点复杂度提升一档。
  4. 游戏引擎方面:
  5. Unity:资料多、开源 Demo 丰富、上手成本低,是实现 3D 水墨游戏最务实的选择;
  6. Unreal:适合高品质大场景和电影级短片,尤其在 UE5 + PCG + Houdini 流程下的程序化山水,但整体工程量更大。
  7. Blender 方面:
  8. 作为开源 DCC,是水墨场景生产的极佳工具;
  9. 高质量即用型水墨插件大多闭源商用,但节点网络方案完全可以自建,不受限制。
  10. 程序化随机化:
  11. 核心是:“不要把水墨当普通贴图,而要把笔触当‘程序生成的动态实体’”
  12. 噪声 / SDF / 粒子 / 几何节点 / PCG 都是为此服务的技术积木。
  13. 开源 vs 闭源:
  14. 开源:适合搭建自有技术栈,Unity/Blender + GitHub 项目 + 学术论文足够支撑一套完整水墨渲染方案;
  15. 闭源:大厂的动态水墨引擎、商业插件适合“即插即用”和参考,不利于深度定制。

如果你后续想更具体地落地到“某个项目(比如:3D 水墨 ARPG / 影视项目)”,可以告诉我项目约束(平台、预算、团队技能结构),我可以基于以上技术图谱帮你收敛成几条更具体的工程实施路径和任务拆解。


References

[1] 利用GPU 实时绘制水墨画效果. http://www.cad.zju.edu.cn/home/jhyu/Papers/GPU_ink.pdf
[2] 基于毛笔和宣纸的水墨传输模型与仿真算法. https://patents.google.com/patent/CN100338612C/zh
[3] 水墨画笔触的快速渲染算法及其应用. https://www.jcad.cn/article/id/469699e8-ab92-4314-8185-092b3fb5cefa
[4] 一种模型的渲染方法和装置(含水墨风格渲染描述). https://patents.google.com/patent/WO2022041548A1/zh
[5] 细节增强的水墨扩散模拟. https://www.jcad.cn/article/id/574f50ba-d255-4d27-a35c-e0e97bb880f1
[6] 仿宋代水墨山水画风格3D渲染Unity实现. https://indienova.com/indie-game-development/3d-rendering-of-imitation-song-dynasty-style-ink-landscape-painting-by-unity/
[7] 数字场景中传统文化IP 的算法重构与全球叙事(动态水墨渲染、粒子水墨技术). https://www.sinoss.net/upload/resources/file/2026/04/07/46989.pdf
[8] CN108305311A 一种数字化图像水墨风格渲染技术. https://patents.google.com/patent/CN108305311A/zh
[9] InkBrush: A Sketching Tool for 3D Ink Painting. https://dl.acm.org/doi/10.1145/3613904.3642128