소개
Perlin Noise와 Simplex Noise는 프로시저럴 생성 알고리즘 중 가장 인기있는 알고리즘입니다. 이번 글에서는 Unity에서 Perlin/Simplex Noise를 생성하는 방법과 그 응용 예제를 살펴보겠습니다.
Perlin Noise
Perlin Noise는 1983년 Ken Perlin이 개발한 알고리즘으로, 자연스러운 잡음을 생성하는 데 사용됩니다. 이 알고리즘은 2차원 또는 3차원으로 구성된 그리드에서 각 좌표의 값에 대한 임의성을 추가하여 자연스러운 무작위 패턴을 만듭니다.
Perlin Noise를 Unity에서 생성하려면 다음과 같은 코드를 사용합니다.
public class PerlinNoise : MonoBehaviour
{
public float scale = 1f;
public float offsetX = 0f;
public float offsetY = 0f;
private void Update()
{
Renderer renderer = GetComponent<Renderer>();
renderer.material.mainTexture = GenerateTexture();
}
private Texture2D GenerateTexture()
{
Texture2D texture = new Texture2D(256, 256);
for (int x = 0; x < texture.width; x++)
{
for (int y = 0; y < texture.height; y++)
{
float xCoord = (float)x / texture.width * scale + offsetX;
float yCoord = (float)y / texture.height * scale + offsetY;
float sample = Mathf.PerlinNoise(xCoord, yCoord);
Color color = new Color(sample, sample, sample);
texture.SetPixel(x, y, color);
}
}
texture.Apply();
return texture;
}
}
위 코드에서는 Perlin Noise를 사용하여 텍스처를 생성합니다. scale, offsetX, offsetY를 조정하여 생성되는 잡음의 모양을 변경할 수 있습니다. GenerateTexture() 함수에서는 Perlin Noise 값을 계산하고, Color 값을 생성하여 텍스처에 적용합니다.
Simplex Noise
Simplex Noise는 Perlin Noise와 매우 유사하지만, 더 빠르고 더 자연스러운 결과물을 생성합니다. Simplex Noise는 Ken Perlin의 Perlin Noise 알고리즘에서 파생되었지만, 더 단순한 구조를 가지고 있습니다.
Simplex Noise를 Unity에서 생성하려면 다음과 같은 코드를 사용합니다.
public class SimplexNoise : MonoBehaviour
{
public float scale = 1f;
public float offsetX = 0f;
public float offsetY = 0f;
private void Update()
{
Renderer renderer = GetComponent<Renderer>();
renderer.material.mainTexture = GenerateTexture();
}
private Texture2D GenerateTexture()
{
Texture2D texture = new Texture2D(256, 256);
for (int x = 0; x < texture.width; x++)
{
for (int y = 0; y < texture.height; y++)
{
float xCoord = (float)x / texture.width * scale + offsetX;
float yCoord = (float)y / texture.height * scale + offsetY;
float sample = Mathf.PerlinNoise(xCoord, yCoord);
Color color = new Color(sample, sample, sample);
texture.SetPixel(x, y, color);
}
}
texture.Apply();
return texture;
}
}
위 코드에서는 Simplex Noise를 사용하여 Perlin Noise와 같은 방식으로 텍스처를 생성합니다. scale, offsetX, offsetY를 조정하여 생성되는 잡음의 모양을 변경할 수 있습니다. GenerateTexture() 함수에서는 Simplex Noise 값을 계산하고, Color 값을 생성하여 텍스처에 적용합니다.
응용 예제
Perlin/Simplex Noise는 게임의 그래픽, 사운드, 지형 생성 등 다양한 분야에서 활용됩니다. 예를 들어, 다음과 같은 응용 예제가 있습니다.
지형 생성
Perlin Noise를 사용하여 지형을 생성할 수 있습니다. 지형의 높이와 텍스처를 생성하는 데 사용됩니다. Simplex Noise를 사용하면 더 자연스러운 지형을 생성할 수 있습니다.
불규칙한 움직임
Perlin/Simplex Noise를 사용하여 불규칙한 움직임을 만들 수 있습니다. 예를 들어, 바다에서 물결을 만들거나, 바람이 불 때 나뭇잎이 흔들리는 모습을 만들 수 있습니다.
잡음 필터링
Perlin/Simplex Noise를 사용하여 이미지나 사운드에 잡음 필터링을 적용할 수 있습니다. 예를 들어, 이미지에서 먼지나 광택을 제거하거나, 음악에서 백색 잡음을 제거하는 등의 작업을 할 수 있습니다.
결론
Perlin/Simplex Noise는 자연스러운 무작위 패턴을 생성하는 데 사용되는 인기있는 알고리즘입니다. Unity에서는 이 알고리즘을 쉽게 구현할 수 있으며, 게임의 그래픽, 사운드, 지형 생성 등 다양한 분야에서 활용됩니다. 이번 글에서는 Perlin/Simplex Noise를 생성하는 방법과 그 응용 예제를 살펴보았습니다.
'Unity > Tip' 카테고리의 다른 글
Unity에서 스마트폰 화면 항상 켜지도록 설정하기 (0) | 2023.07.07 |
---|---|
Unity 확장형 함수 (0) | 2023.06.18 |
Unity 가비지 컬렉션 최적화 (0) | 2023.06.13 |
Binary Space Partitioning (BSP)란? (0) | 2023.06.12 |
Unity 최적화 기법 (0) | 2023.06.11 |