Mathf.PerlinNoise
Declaration
public static float PerlinNoise(float x, float y);Параметры
| Параметр | Описание |
|---|---|
| x | координата X точки отбора проб. |
| y | координата Y точки отбора проб. |
Возвращаемое значение
поплавок Значение между 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... 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, закрепите возвращаемые значения.