본문으로 이동

펄린 노이즈

카노위키

펄린 노이즈(Perlin Noise)는 컴퓨터 그래픽에서 자연스러운 질감, 지형, 움직임 등을 표현하기 위해 켄 펄린(Ken Perlin)이 1983년에 개발한 그라디언트 노이즈(Gradient Noise)의 한 종류이다. 완전히 무작위적인 백색 소음(White Noise)과 달리, 펄린 노이즈는 이웃한 값들이 서로 부드럽게 이어지는 특징을 가져 절차적 생성(Procedural Generation)에 널리 사용된다.

켄 펄린은 1982년 영화 트론(Tron)을 제작하면서 컴퓨터 생성 이미지의 "기계적인" 느낌을 줄이기 위해 이 알고리즘을 개발했으며, 이 공로로 1997년 아카데미 기술 공로상을 수상했다.

개요

펄린 노이즈는 격자(Grid) 구조와 각 격자점(Grid Point)에 할당된 무작위 그라디언트(Gradient) 벡터를 기반으로 생성된다. 특정 좌표의 노이즈 값을 계산하기 위해, 해당 좌표를 둘러싼 격자점들의 그라디언트 벡터와 좌표로부터 격자점으로의 거리 벡터를 내적(Dot Product)한 후, 이 값들을 부드럽게 보간(Interpolation)하여 최종 값을 얻는다.

이러한 방식 덕분에 펄린 노이즈는 다음과 같은 중요한 특성을 가진다.

  • 결과값이 연속적이며, 급격한 변화 없이 부드럽게 변한다.
  • 동일한 입력 좌표에 대해서는 항상 동일한 결과값을 반환한다.
  • 시각적으로 자연스러운 무작위성을 표현할 수 있다.

생성 원리

  1. 격자 설정: 정수 좌표로 이루어진 다차원 격자를 정의한다.
  2. 그라디언트 할당: 각 격자점에 무작위 단위 벡터(그라디언트)를 할당한다. 이 벡터는 미리 정의된 테이블에서 가져오거나 해시 함수를 통해 생성될 수 있다.
  3. 내적 계산: 노이즈 값을 구하려는 특정 지점을 둘러싸고 있는 각 격자점(예: 2D에서는 4개, 3D에서는 8개)에 대해, 격자점에서 해당 지점으로 향하는 벡터와 격자점의 그라디언트 벡터를 내적한다.
  4. 보간: 내적을 통해 얻은 값들을 부드러운 곡선 함수(주로 페이드 함수라 불리는 5차 다항식, 6t515t4+10t3)를 사용하여 보간한다. 이를 통해 격자 경계에서 값이 불연속적으로 변하는 것을 방지하고 부드러운 결과물을 만들어낸다.

옥타브 (Octaves)

단일 펄린 노이즈는 부드러운 파도 형태를 띠지만, 더 복잡하고 사실적인 패턴을 만들기 위해 여러 개의 펄린 노이즈 함수를 중첩시키는 기법이 사용된다. 이를 '옥타브(Octaves)' 또는 '프랙탈 노이즈(Fractal Noise)'라고 한다.

기본 주파수의 노이즈(낮은 옥타브)에 더 높은 주파수와 낮은 진폭을 가진 노이즈(높은 옥타브)들을 여러 겹 더해가는 방식으로, 큰 형태의 윤곽과 함께 세밀한 디테일을 동시에 표현할 수 있다.

특징

  • 자연스러움: 구름, 지형, 물결, 불꽃 등 자연 현상의 불규칙성을 모방하는 데 매우 효과적이다.
  • 제어 용이성: 주파수(Frequency)와 진폭(Amplitude) 같은 파라미터를 조절하여 노이즈의 패턴을 쉽게 제어할 수 있다.
  • 차원 확장성: 1D, 2D, 3D 등 다양한 차원으로 쉽게 확장이 가능하여, 선, 평면, 공간 상의 노이즈를 모두 생성할 수 있다.

응용 분야

  • 절차적 지형 생성: 게임 월드의 산, 계곡, 평야 등 다양한 높낮이의 지형을 자동으로 생성한다.
  • 텍스처 생성: 나무의 나이테, 대리석 무늬, 구름 등 자연스러운 질감을 만들어낸다.
  • 애니메이션: 캐릭터의 머리카락이 흔들리거나, 불꽃이 타오르는 등의 움직임을 부드럽고 자연스럽게 표현한다.
  • 셰이더 효과: 물의 표면이 일렁이거나 안개가 피어오르는 등의 시각 효과를 실시간으로 렌더링하는 데 사용된다.

같이 보기