x | 采样点的 X 坐标。 |
y | 采样点的 Y 坐标。 |
浮点数 0.0 到 1.0 之间的值。(返回值可能略低于 0.0 或高于 1.0。)
生成二维 Perlin 噪声。
Perlin 噪声是一种在二维平面上生成的浮点值伪随机图案(尽管该技术推广到三个或更多维度,但未在 Unity 中实现)。噪声在每一点不包含完全随机的值,而是由其值在图案中逐渐增加和减小的“波”组成。该噪声可用作纹理效果的基础,也可用于动画、生成地形高程图和许多其他内容。
在 0..10 范围内采样的 Perlin 噪声(灰度值表示 0..1 之间的值)
可以通过传递适当的 X 和 Y 坐标来采样平面中的任何点。相同的坐标将始终返回相同的采样值,但该平面本质上是无限的,因此很容易通过选择随机区域进行采样来避免重复。
using UnityEngine; using System.Collections;
// Create a texture and fill it with Perlin noise. // Try varying the xOrg, yOrg and scale values in the inspector // while in Play mode to see the effect they have on the noise.
public class ExampleScript : MonoBehaviour { // Width and height of the texture in pixels. public int pixWidth; public int pixHeight;
// The origin of the sampled area in the plane. public float xOrg; public float yOrg;
// The number of cycles of the basic noise pattern that are repeated // over the width and height of the texture. public float scale = 1.0F;
private Texture2D noiseTex; private Color[] pix; private Renderer rend;
void Start() { rend = GetComponent<Renderer>();
// Set up the texture and a Color array to hold pixels during processing. noiseTex = new Texture2D(pixWidth, pixHeight); pix = new Color[noiseTex.width * noiseTex.height]; rend.material.mainTexture = noiseTex; }
void CalcNoise() { // For each pixel in the texture... for (float y = 0.0F; y < noiseTex.height; y++) { for (float x = 0.0F; x < noiseTex.width; x++) { float xCoord = xOrg + x / noiseTex.width * scale; float yCoord = yOrg + y / noiseTex.height * scale; float sample = Mathf.PerlinNoise(xCoord, yCoord); pix[(int)y * noiseTex.width + (int)x] = new Color(sample, sample, sample); } }
// Copy the pixel data to the texture and load it into the GPU. noiseTex.SetPixels(pix); noiseTex.Apply(); }
void Update() { CalcNoise(); } }
注意:返回值可能略低于 0.0f 或略高于 1.0f。如果您需要返回值范围在 0.0 到 1.0 之间,请将返回值进行范围限制。