案例库 · 工程与运营 · 技术决策 · 1982–1985
柏林噪声:用一个小函数让 CG 画面自然起来
1985 年,肯·柏林用梯度噪声让计算机图形看起来自然,无需庞大的纹理库。
数学应用集团 (MAGI) · 纽约大学
那一手
早期的计算机生成图像看起来平整、机器味重,因为表面要么用完美平滑的几何体定义,要么用必须存储且只能重复的位图。真实的东西——烟、云、水、岩石——有种可信的不规则性,而如何在图形里重现这种不规则性,正是肯·柏林在 80 年代初参与《电子世界争霸战》时面对的问题。
柏林的解法是一种梯度噪声。这个函数在网格的四个角放置伪随机梯度向量,然后对点积做插值,这样空间里任何一点都能返回一个介于随机极值之间的平滑、自然的数值。因为它是函数,不是存储的图片,所以可以在任何位置、任何尺度计算。
它产生一种可控的伪随机外观,每个细节的大小保持不变,因此可以把缩放的副本叠加起来,按需生成斑点、木纹、水纹或地形图案。柏林在 1985 年的 SIGGRAPH 论文里描述了这种方法,它后来成了计算机图形中可信程序化纹理的基础。
为什么管用
- 作为函数,它程序化地生成纹理,不需要存位图,因此节省内存,可以用来增加更多细节。
- 输出是确定性的但又是伪随机的,所以看着自然,但可以复现。
- 缩放并叠加副本,就能从一个基本单元生成丰富、类似分形的表面。
值了多少用一个平滑的确定性函数制造随机感聪明
可以搬走什么
与其存储固定纹理,不如定义一个函数,它能在任何地方、无限地制造可信的变异,这样内存就不再是场景细节的限制。
后来呢
1997 年,柏林凭借这项技术获得奥斯卡技术成就奖,这项技术后来在电影特效、电子游戏和演示中无处不在,其继任者单纯形噪声如今已内置到许多图形处理单元中。
资料来源
发现哪里写错了?告诉我们。