코샵
끄적끄적 코딩 공방
코샵

인기 글

  • 분류 전체보기 (473) N
    • MongoDB (4)
    • 일기장 (4)
    • Unity (138)
      • Tip (41)
      • Project (1)
      • Design Pattern (8)
      • Firebase (6)
      • Asset (2)
    • 파이썬 (127)
      • Basic (40)
      • OpenCV (8)
      • Pandas (15)
      • PyQT (3)
      • SBC(Single Board Computer) (1)
      • 크롤링 (14)
      • Fast API (29)
      • Package (6)
    • Linux (4)
    • C# (97)
      • Algorithm (11)
      • Window (7)
    • TypeScript (42) N
      • CSS (4) N
    • Git (11)
    • SQL (5)
    • Flutter (10)
      • Tip (1)
    • System (1)
    • BaekJoon (6)
    • Portfolio (2)
    • MacOS (1)
    • 유틸리티 (1)
    • 서비스 (6) N
    • 자동화 (3)
    • Hobby (10)
      • 물생활 (10)
      • 식집사 (0)
전체 방문자
오늘
어제

최근 댓글

최근 글

반응형
hELLO · Designed By 정상우.
코샵

끄적끄적 코딩 공방

Unity/Tip

Perlin/Simplex Noise Algorithm

2023. 6. 17. 18:48
반응형

소개

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 가비지 컬렉션 최적화  (1) 2023.06.13
Binary Space Partitioning (BSP)란?  (0) 2023.06.12
Unity 최적화 기법  (0) 2023.06.11
    'Unity/Tip' 카테고리의 다른 글
    • Unity에서 스마트폰 화면 항상 켜지도록 설정하기
    • Unity 확장형 함수
    • Unity 가비지 컬렉션 최적화
    • Binary Space Partitioning (BSP)란?
    코샵
    코샵
    나의 코딩 일기장

    티스토리툴바