Hotdry.

Article

姓名即山水:程序化生成无限水墨风格的集体景观

探索基于姓名哈希的无限程序化山水生成,解析种子驱动地形、东方水墨渲染与集体创作的工程实现。

2026-06-13web

在生成艺术的语境中,如何将个人身份转化为可无限延展的集体景观?{Mountains, Trees, Names}* 项目给出了一个优雅的答案:每个参与者的姓名通过哈希算法生成确定性种子,驱动程序化山水在 WebGL 画布上无限延伸。这种将东方水墨美学与算法生成相结合的思路,为实时渲染领域提供了值得借鉴的技术路径。

种子驱动的确定性生成

项目的核心机制在于将字符串(姓名)转化为伪随机数生成器的种子。通过哈希函数处理输入姓名,系统能够生成唯一的数值种子,确保同一姓名在任何时间、任何设备上都能重现相同的树木形态。这种确定性随机(Deterministic Random)策略是无限地形生成的关键 —— 它允许系统在用户平移或缩放视口时,按需生成远处的新地形,而无需存储完整的地形数据。

在技术实现上,项目采用分层噪声函数组合来控制地形特征。Perlin 噪声或 Simplex 噪声作为基础层提供宏观起伏,而叠加的高频噪声则负责细节纹理。通过调整噪声的八度数(octaves)和持久度(persistence),可以在计算效率与视觉丰富度之间取得平衡。

程序化山水的算法实现

从三角形基元到复杂山脉的演进,项目经历了多次技术迭代。早期版本使用简单的三角形拼接构建山体轮廓,通过均匀随机与噪声随机相结合的方式控制三角形的分布与角度。这种基础方法虽然计算简单,但缺乏自然山脉的有机感。

后续迭代引入了中点位移算法(Midpoint Displacement)来生成更真实的山脊线。该算法从一条基准线段开始,递归地在各段中点处引入垂直方向的随机偏移,逐步构建出具有分形特征的地形轮廓。相比单纯噪声叠加,中点位移能够产生更具方向性的山脊结构,更符合东方山水画中 "远近高低各不同" 的构图逻辑。

在渲染层面,项目使用 SVG 的 radialGradientstop 元素实现渐变色彩,模拟水墨渲染的层次效果。通过为每个山体单元分配不同的色相偏移和透明度,系统能够在不依赖复杂光照计算的情况下,营造出传统山水画的景深氛围。

东方美学的参数化表达

项目的视觉风格深受北宋王希孟《千里江山图》的启发,采用石青、石绿为主色调,配合赭石点缀,形成典型的青绿山水配色。在技术实现上,这种配色方案被编码为可调参数:主色调的色相范围控制在 180°-220°(青绿色系),饱和度保持在 40%-60% 以模拟矿物颜料的质感,明度则根据山体层次进行递减。

树木的生成采用递归分形算法,每个姓名种子决定分支的角度、长度和递归深度。通过 Charming.js 库,系统能够将抽象的种子数值转化为具有独特形态特征的树木结构。这些树木不仅是装饰元素,更是参与者身份的视觉标记 —— 每棵树的位置、形态都与输入姓名一一对应。

APack 生成的印章作为作者标记,以固定尺寸散布于景观之中,既保留了传统书画的落款文化,又通过算法随机分布避免了人工布局的刻意感。印章的绿色与山体的青绿形成色彩呼应,同时通过尺寸差异建立视觉层次。

无限延伸的交互架构

实现无限平移缩放的关键在于视口管理与动态生成的协同。系统仅渲染当前视口可见区域的地形数据,当用户拖动或缩放时,根据新的视口边界计算需要生成的地形块。由于生成算法是确定性的,相同的坐标位置总是产生相同的地形特征,这保证了平移过程中的连续性。

在性能优化方面,项目采用 D3.js 的数据绑定机制管理 SVG 元素,通过 enter/update/exit 模式高效处理地形块的增删。对于大规模地形,可以考虑引入 Canvas 或 WebGL 渲染管线,将几何计算移至 GPU,以支持更高密度的细节呈现。

从数字到实体:Riso 印刷的技术考量

项目在 ITP Winter Show 2025 上的物理呈现采用了 Riso 印刷技术,将数字景观转化为 60 张 A4 纸张的墙面装置。Riso 印刷的油墨透明特性与数字渲染的半透明渐变形成有趣的对话,每张纸的轻微错位和油墨不均反而增添了手工质感。

色彩选择上,最终采用蓝(山)、橙(树)、绿(印章)的三色组合。这种有限的色板策略既降低了印刷复杂度,又通过高对比度确保了远距离可读性。对于希望将生成艺术实体化的开发者,Riso 印刷提供了一种成本可控、效果独特的输出方案。

可落地的技术参数清单

基于该项目的实践经验,以下是构建类似系统的关键参数建议:

地形生成参数

  • 噪声种子:字符串哈希值(建议使用 FNV-1a 或 MurmurHash)
  • 中点位移粗糙度:0.4-0.6(控制山脊曲折程度)
  • 地形块尺寸:视口的 1.5-2 倍(预加载边界)

视觉渲染参数

  • 山体渐变:径向渐变,中心明度 +20%,边缘透明度 0.3-0.5
  • 色彩范围:HSL (180-220, 40-60%, 30-70%)
  • 树木递归深度:4-6 层(平衡细节与性能)

交互性能参数

  • 缩放范围:0.1x-5x(防止过度缩放导致的精度问题)
  • 平移惯性:0.85-0.95 阻尼系数
  • 生成延迟:16-32ms(避免阻塞主线程)

这种将个人数据转化为集体景观的思路,不仅适用于艺术创作,也可延伸至数据可视化、个性化推荐等场景。关键在于找到数据特征与视觉形式之间的映射关系,让算法生成既保持确定性(可复现),又具备足够的随机性(多样性)。


资料来源

web

内容声明:本文无广告投放、无付费植入。

如有事实性问题,欢迎发送勘误至 i@hotdrydog.com