Unity的噪声函数库(包括c#版本和shader版本),有如下功能:
-
支持噪声类型:
- WhiteNoise2D
- ValueNoise(1D,2D)
- PerlinNoise(1D,2D)
- WorleyNoise2D
-
支持编辑器生成以上2D类型的噪声贴图.
-
支持通过多个基础噪声,生成分形噪声.
-
支持调整噪声的频次和震幅.
-
支持生成无缝衔接的噪声贴图
-
提供Shader版本的噪声函数
Attention: 内置的噪声函数,默认的频次与振幅均为1,满足以下规范:
- 参数分布范围为(-infinite,+infinite)
- c#版本返回值范围为(-1,1)
- shader版本返回值范围为(0,1)
如想获取不同频次和振幅的噪声函数,请使用TransformedNoise2D(INoise2D source,float frequency,float amplitude)
.
Usage:
var noise = new WhiteNoise2D();
var result = noise.Evaluate(1,1);
Usage:
var noise = new ValueNoise2D();
var result = noise.Evaluate(1,1);
var noise = new PerlinNoise2D();
var result = noise.Evaluate(1,1);
var noise = new WorleyNoise2D();
var result = noise.Evaluate(1,1);
分形噪声是由若干不同频次和振幅的噪声叠加而成的。
下图由3个PerlinNoise叠加而成的分形噪声
var noise = new FractalNoise2D(new PerlinNoise2D(),new PerlinNoise2D(),PerlinNoise2D());
var noiseTex = noise.CreateTexture(new NoiseTextureGenerateOptions(){
width = 512,
height = 512,
cellSize = 64
});
在编辑器中,我们可以:
- 通过
Window/Noise/Base
来打开基础噪声贴图生成工具. - 通过
Window/Noise/Fractal
来打开分形噪声贴图生成工具.
运行时,通过
Texture2D INoise2D.CreateTexture(NoiseTextureGenerateOptions options);
来创建噪声贴图
Shader部分的实现参考了如下的文章(Reference):
https://thebookofshaders.com/10/
add include in your shader as follow:
#include "Packages/com.ms.noise/Shader/Libaray/Random.hlsl"
.....
float4 Frag(Varyings i) : SV_Target{
// in fragment, generate noise with input uv.
return PerlinNoise(i.uv * 10);
}