利用简单噪声生成艺术效果
利用简单噪声生成艺术效果
00 原文链接
Getting Creative with Perlin Noise Fields · Sighack
01 记录
以下内容为AI总结:
1. 核心算法
文章使用的是 Perlin Noise Field / Perlin Flow Field / Vector Field。
基本思路是:
1 2 3 画布上的每个位置都有一个方向。 粒子在画布上移动时, 根据当前位置的方向场决定下一步往哪里走。 方向场不是纯随机, 而是由 Perlin Noise 生成, 所以方向变化更平滑, 更有自然感。纯随机方向会产生突兀变化, 而 Perlin Noise 生成的方向场具有连续性, 粒子路径会更像烟雾, 水流, 毛发, 星云等自然形态。
2. 代码结构思路
作者用 Processing 写了一些简单类来支持快速迭代:
1 2 3 4 5 6 7 8Particle: 单个粒子, 负责位置更新。 Particle Set: 一组粒子, 可以绑定不同的绘制函数。 Layer: 多个粒子组组成一层, 一层模拟完成后再绘制下一层。这个结构的重点不是复杂, 而是让作者可以快速替换参数, 图元, 颜色, 层级关系, 从而产生大量变化。
3. 25 个变体主要改了什么
文章后半部分是 25 次迭代。每次都基于同一个底层 flow field, 但修改不同维度:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23背景颜色: 白底黑线, 黑底白线, 灰度背景, 星空背景。 透明度: 低 alpha 叠加, 让粒子密集区域自然变暗或变亮。 线宽: 固定线宽, 随生命周期变化, 尾迹逐渐变细。 颜色: 手选调色板, HSB/HSL 空间随机, 黄金比例生成色相。 绘制图元: 线段, 圆弧, 圆, 矩形, 三角形, 文字 X。 绘制方向: 沿粒子运动方向绘制, 或垂直于运动方向绘制。 层级: 多层粒子叠加, 每层使用不同颜色, 透明度, 粗细或图元。 Perlin Noise 参数: 改变噪声尺度, 让运动从细碎涂鸦变成长距离流线。所以这些图看起来差异很大, 但底层机制其实都没有变。作者刻意只在一个简单系统内做变化。
4. 文章真正想表达的观点
文章的重点其实有两个。
第一, 生成艺术不一定需要复杂算法。一个简单的粒子系统 + Perlin flow field, 如果开放颜色, 图元, 透明度, 层级, 噪声尺度等参数, 就可以产生非常丰富的结果。
第二, 创造力来自迭代, 不是一次性灵感。作者一开始也觉得变体很快就用完了, 但继续做下去之后, 会逐渐发现可复用的“创作积木”, 例如颜色生成器, 星空背景, 彗星形状, 多层叠加等。作者最后的结论是: 复杂作品通常不是一开始就完整设计出来的, 而是从简单系统持续迭代出来的。
5. 对技术美术比较有价值的点
这篇文章值得看的地方不是 Perlin Noise 本身, 而是它展示了一种很实用的效果开发方法:
1 2 3 4 5 6 7 8先固定一个稳定的底层机制: Perlin Flow Field + Particle Simulation 然后开放表现层变量: 颜色, 透明度, 图元, 宽度, 生命周期, 层级, 噪声尺度 最后通过批量迭代找视觉方向: 不急着重写算法, 先扩大参数空间和绘制策略。如果放到 Unity / Shader / VFX Graph 里, 它对应的思路就是:
1 2 3 4 5 6 7 8 9 10 11Flow Field: 用 noise texture 或 procedural noise 生成方向场。 Particle Update: 粒子按方向场积分移动。 Renderer: 不只画点或线, 可以画 ribbon, quad, arc, sprite, triangle, glyph。 Art Direction: 用 lifetime, velocity, noise value, layer index 控制颜色, alpha, width, distortion。简而言之, 这篇文章是在用一个很小的算法证明: 生成艺术的丰富度, 很大程度来自参数化表现和持续迭代, 而不是来自算法复杂度本身。
02 备注
利用简单的Perlin Noise, 也可以迭代出负责的效果. 无论是直接使用算法, 还是利用算法在SD中生成图片. 或者是Houdini这种程序化建模工具中都有价值.
当然, 正如AI总结的.
- 稳定的底层机制
- 表现层变量
- 迭代法
是一种稳定的创作方式.