Я работаю над проектом в Unity, который должен создать несколько простых 3D гор / холмов. Поскольку мои требования состоят в том, чтобы создать «простую» форму, я, похоже, не могу найти ответ, и я подумал, что, возможно, я смогу получить некоторую помощь отсюда. В любом случае, это является нормальным выходом из перлин-шума, хотя он плавный, выход все еще сложен с большим количеством холмов / гор. Я ищу что-то вроде этого . Мне нужно быть уверенным, что у меня не будет высоты вокруг границ выходного изображения. Я думаю, у тебя есть идея. Удачного дня!
Вот код, который я сейчас использую из онлайн-урока:
using UnityEngine;
public class PerlinNoise : MonoBehaviour
{
private static int width = 256;
private static int height = 128;
public float scale = 20f;
public float offsetX = 100f;
public float offsetY = 100f;
private int xcont = 0, ycont = 0;
public float[,] array = new float[width,height];
private void Start()
{
offsetX = Random.Range(0f, 99999f);
offsetY = Random.Range(0f, 99999f);
}
void Update()
{
Renderer renderer = GetComponent<Renderer>();
renderer.material.mainTexture = GenerateTexture();
}
Texture2D GenerateTexture()
{
Texture2D texture = new Texture2D(width, height);
//GENERATE A PERLIN NOISE MAP FOR THE TEXTURE
for(int x=0;x<width;x++)
{
for(int y=0;y<height;y++)
{
Color color = CalculateColor(x,y);
texture.SetPixel(x, y, color);
}
}
texture.Apply();
return texture;
}
Color CalculateColor(int x, int y)
{
float xCoord = (float)x / width * scale + offsetX;
float yCoord = (float)y / height * scale + offsetY;
float sample = Mathf.PerlinNoise(xCoord,yCoord);
if (xcont == width - 1)
{
xcont = 0;
ycont++;
}
else xcont++;
if (ycont == height - 1 ) ycont = 0;
array[xcont,ycont] = sample;
return new Color(sample, sample, sample);
}
}