Harmonic Perlin Gradients 是一个用于生成程序化色彩场的技能,其方法是将 Perlin 噪声值通过一组由音乐和声比例(纯律音程)推导出的阈值映射到调色板上。音乐结构决定颜色在何处发生切换,而噪声则决定这些切换呈现出的形状。
用途
该技能适用于以下场景:从采样图像调色板生成渐变;创建带有音乐比例的程序化纹理或风景;通过系统性变化批量生成主题化色彩场;任何将“颜色 + 噪声 + 乐理”组合起来的任务。
核心模式
- 从源图像中提取调色板(深色 → 浅色,15-21 种颜色)。2. 选择一个和声音程(和弦、音阶、序列)。3. 将频率比归一化到 [0,1] 区间作为阈值。4. 渲染 Perlin 噪声场,通过阈值将噪声值映射到调色板。5. 在相邻调色板颜色之间进行插值以实现平滑混合。
和声音程与位置对照
- 八度(Octave):比例 1, 2,归一化位置 0.0, 1.0
- 纯五度(Perfect Fifth):1, 3/2, 2 → 0.0, 0.5, 1.0
- 大三和弦(Major Triad):4, 5, 6 → 0.0, 0.5, 1.0
- 小三和弦(Minor Triad):10, 12, 15 → 0.0, 0.4, 1.0
- 大七度(Major 7th):8, 10, 12, 15 → 0.0, 0.286, 0.571, 1.0
- 属七度(Dominant 7th):4, 5, 6, 7 → 0.0, 0.333, 0.667, 1.0
- 小七度(Minor 7th):10, 12, 15, 18 → 0.0, 0.25, 0.625, 1.0
- 减七度(Diminished 7th):2^(0/12), 2^(3/12), 2^(6/12), 2^(9/12),等距分布
- 增和弦(Augmented):2^(0/12), 2^(4/12), 2^(8/12),等距分布
- Sus4:6, 8, 9 → 0.0, 0.667, 1.0
- 大调五声音阶:1, 9/8, 5/4, 3/2, 5/3, 2 → 0.0, 0.125, 0.25, 0.5, 0.667, 1.0
- 小调五声音阶:1, 6/5, 4/3, 3/2, 9/5, 2 → 0.0, 0.2, 0.333, 0.5, 0.8, 1.0
- 全音音阶(Whole Tone):2^(i/6)(i=0..6),等距分布
- 泛音列(Harmonic Series):1, 2, 3, ..., N,向低端聚集
- 泛音音阶(Overtone Scale):1, 9/8, 5/4, 11/8, 3/2, 13/8, 7/4, 2,非均匀分布
归一化公式:position = (ratio - min) / (max - min)
噪声模式及其特点
- fbm:平滑、类渐变;适合柔和场、地平线;关键参数 scale 1.0-2.0,octaves 1-2
- warp:有机、流动;适合大理石、熔岩、云层;warpAmt 1.0-3.0
- ridge:尖锐山峰、纹理;适合山脉、裂纹;gain 0.5-0.65,高 octaves
- turbulence:翻涌、细胞状;适合风暴、等离子体;高 octaves,abs(fbm)
- terraced:平坦台地、地形图;适合地层、等高线图;terraceSteps 5-12
调参
平滑度(渐变 → 纹理):octaves(1 = 极平滑,2 = 柔和,4+ = 细节丰富);scale(越低特征越宽,越高越精细);gain(越低各倍频之间衰减越平滑)。 对比度(哑光 → 戏剧性):gamma(1.0 = 线性,<0.7 = 高对比,>1.2 = 发白);调色板索引间距(相邻索引 = 微妙,大幅跳跃 = 戏剧性)。 方向性:vBias(0.3-0.7 增加垂直渐变形成地平线效果);负 vBias 会反转(上亮下暗)。
调色板提取指南
从源图像中采样 15-21 种颜色,按深到浅排序,包括:3-4 种最深色调(阴影/背景)、8-10 种中间调(主色域)、3-4 种高光(最亮区域)。颜色在感知上均匀分布,相邻条目应看起来有区别但不突兀。
每个渐变的颜色索引选择
按音乐情绪匹配调色板范围:明亮开阔 → 中高区间(8-20),例:大三和弦、五声音阶;温暖柔和 → 中区间(5-17),例:属七度、sus4;深沉忧郁 → 低到中(2-14),例:小三和弦、小七度;全范围 → 跨越(0-20),例:泛音列、泛音音阶;柔和粉彩 → 仅高区间(10-20),例:增和弦、全音音阶。
实现结构
生成器产出自包含的内联 JS 的 HTML 文件:Python 脚本(generate_15.py)为每个渐变定义调色板、音程和噪声配置;HTML 模板包含 Perlin 噪声实现、fbm/warp/ridge 函数和渲染循环;输出为独立 HTML 文件,每个渐变一个。模板中的关键 JS 函数:perlin(x,y)、fbm(x,y,...)、warp(x,y,...)、ridge(x,y,...)。
常见错误与修正
- 所有渐变看起来一样 → 每个渐变改变 octaves、scale、vBias 和调色板范围
- 过暗/无高光 → 确保调色板索引到达亮端(16+)
- 过淡/无对比 → 使用更大的调色板索引跨度或更低的 gamma
- 烟雾状/液态外观 → 使用 octaves 1-2 的普通 fbm,而非 warp
- 颜色间出现生硬条带 → 确保相邻阈值颜色之间平滑插值
- 噪声过细/杂乱 → 降低 scale(1.0-2.0)和 octaves(1-2)