Version: 2023.1

Mathf.PerlinNoise

切换到手册
public static float PerlinNoise (float x, float y);

参数

x 采样点的 X 坐标。
y 采样点的 Y 坐标。

返回

float 介于 0.0 与 1.0 之间的值。(返回值可能会稍微低于 0.0 或超过 1.0。)

描述

生成 2D 柏林噪声。

柏林噪声是在 2D 平面上生成的浮点值的伪随机图案(虽然 该方法普及到三维或更高维,不过未在 Unity 中实现)。 该噪声不包含每个点处的完全随机值,而是由 “波”组成,其值在图案中逐渐增大和减小。该噪声可以 用作纹理特效的基础,以及用于动画、生成地形高度贴图 和许多其他内容。

\ 在范围 0..10 内采样的柏林噪声(灰度值表示 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... float y = 0.0F;

while (y < noiseTex.height) { float x = 0.0F; while (x < noiseTex.width) { 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); x++; } y++; }

// Copy the pixel data to the texture and load it into the GPU. noiseTex.SetPixels(pix); noiseTex.Apply(); }

void Update() { CalcNoise(); } }

Note: The return value can be slightly lower than 0.0f or slightly higher than 1.0f. If you need the range of return values to be between 0.0 and 1.0, clamp the return values.