Unity 6.3
0 онлайн 59 гостей 3 в системе
Вход

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, закрепите возвращаемые значения.