Perlin Noise
原理
Perlin Noise属于晶格(grid) 噪声,其将空间分成一个个晶格(单位长度),输入的位置点配合晶格顶点处的随机梯度,生成噪声。常用于游戏中的地形生成等。
以二维Perlin Noise为例
P是输入点,周围四个红色圈代表其所在晶格的四个顶点。(u, v)是p点在这个晶格内的局部坐标(u,v范围在0~1),红色向量代表晶格顶点处的随机梯度向量,绿色向量代表四个顶点到输入点的距离向量。
接着通过这两个向量的点乘得到该顶点对P点的影响权重,四个顶点对应四个权重,w1, w2, w3, w4。
w1----------w2
| |
| |
w3----------w4
再对4个权重做插值,插值函数可以直接用线性函数 w1*(1-u)+w2*u,但实际上会选用更复杂的插值函数保证一阶和二阶导数的连续性:
x1=Lerp(w1, w2, u);
x2=Lerp(w3, w4, u);
y1=Lerp(x1, x2, v);
这里需要做3次插值(2次水平方向,1次竖直方向)。以上就是全部流程,通过输入一个二维坐标,输出一个浮点噪声值。
还有一个问题是如何得到一个顶点的随机梯度向量,其实应该说伪随机梯度向量,因为算法中同一个顶点每次生成的梯度是相同的。
Perlin使用的方法是预先生成一组伪随机梯度值,对二三维来说是梯度向量,保存在G[256](一维),G2[256][2](二维),G3[256][3](三维)中。对于一维情况可以直接根据顶点坐标去G中取值,对二三维情况需要一个数组Q,将0~255下标随机放在其中。对于输入的顶点坐标这样取值:
以上就完成了随机取梯度值的方法。Perlin在这里有一个改进,在三维中,P点周围的最近8个点构成了一个立方体,P点到立方体的每条边的的向量有12个,柏林使用这12个随机梯度向量替代了原先的256个梯度向量。
也就是从上面12个向量中挑一个。
实现
上面实现中,Fade()方法是插值函数,它保证了一二阶导数的连续性。permutation[256]保存了0~255的随机排列。
效果
转载于:https://www.cnblogs.com/hankeyyh/p/7247529.html
Perlin Noise相关推荐
- Perlin Noise algorithms(备忘)
代码 //--------------------------------------------------------------------------------------- // Perl ...
- 用DDA Convolution和Perlin Noise来模拟水粉画笔触
在西方,水彩画和水粉画是可以统称为Watercolor的,水粉画通常也称为不透明水彩画或树胶水彩画(Gouache),两者既有相似之处,又有所区别.水粉画是以水作为媒介,这一点,它与水彩画是相同的.所 ...
- 噪音 - Perlin Noise
转载自:http://www.cnblogs.com/babyrender/archive/2008/10/27/BabyRender.html 说起perlin noise, 最初也就是在课上大概了 ...
- html 生成image java makenoise,[图形学] 柏林噪声 (perlin noise)
参考论文:<An Image Synthesizer> Ken Perlin 如果你是游戏玩家,你也许曾在游戏风景中驻足,并仔细观察草木和岩石的贴图,并感叹于它那看似杂乱而又自然的纹脉.你 ...
- 【Ray Tracing The Next Week 超详解】 光线追踪2-4 Perlin noise
Preface 为了得到更好的纹理,很多人采用各种形式的柏林噪声(该命名来自于发明人 Ken Perlin) 柏林噪声是一种比较模糊的白噪声的东西:(引用书中一张图) 柏林噪声是用来生成一些看似杂乱 ...
- 3D数学之柏林噪声(Perlin Noise)
好了,转入正题. 其实它的原理并不是很难,但是由于网上实现的版本太多太杂,真要实现起来竟然不知从何处下手,而且自己写的时候会遇到各种各样的问题.最终写出来了,所以很欣然. 先看下,我在网上找的一些资料 ...
- 柏林噪声(Perlin Noise)
什么是柏林噪声? 说起噪声大家可能会想起这个: 但是这个噪声看起来很不自然,而且现实中的自然噪声并不长这个样子,比如起伏的山脉,大理石的纹理,天空的云彩,这些噪声虽然看起来杂乱无章,其实它们都有着内在 ...
- python perlin noise
python 利用 noise 生成纹理. # -*- coding: utf-8 -*- """ Created on Mon Apr 23 20:04:41 2018 ...
- Unity 使用柏林噪声(Perlin Noise)生成网格地图
前言 最近在尝试制作一个基于网格地图的RPG游戏,所以想着自己生成一个网格地图. 但是网格地图的生成有很多的方式,大多数的方式都达不到我的要求,我需要一个地图可以随机生成各种地形,也可以储存一些地形数 ...
最新文章
- mysql备份psb文件怎么打开_Navicat for MySQL 数据备份教程
- BZOJ 1194: [HNOI2006]潘多拉的盒子 [DP DFA]
- 国外计算机音乐专业,音乐留学干货 | 国外电子音乐专业留学如何?
- 基于docker搭建svn-server
- 面绘制经典算法:MarchingCube实现(控制台篇)
- Linux下ntpdate时间同步
- dig指定服务器查询域名解析时间
- 批量插入数据到mysql_批量插入数据到 MySQL的几种方式
- 如何使用makefile编译不同平台的目标文件(makefile的参数传递)
- 李沐分享斯坦福2021秋季新课:实用机器学习
- LOJ.114.K大异或和(线性基)
- 关于yii2学习笔记:gii的使用
- eclipse 与my eclipse区别,IDE
- Broadcasting in Python
- 图形文件的自由转换:DXF转PLT、DWG转其它格式......
- 工作也能用 Tinder 配对?一家叫 Palaround 的公司就在做这门生意
- 慧都科技邀您品鉴“2021重庆高效加工与智能化升级峰会”
- 移动端高度兼容iPhoneX
- Android Studio WiFi 之 获取 WiFi 名称、IP、Mac
- 武汉理工大学计算机考研复试资料,武汉理工大学计算机考研复试