<aside> <img src="/icons/list_gray.svg" alt="/icons/list_gray.svg" width="40px" />

목차

</aside>

노이즈란 무엇인가?


흔히 컴퓨터 그래픽스에서 구성하는 **노이즈(Noise)**는 일반적인 random() 함수들과 근본적으로 다릅니다. **random()**이 매번 예측 불가능한 완전한 무작위 값을 반환하는 반면, 프로시저럴 노이즈(Procedural Noise)는 다음과 같은 핵심적인 특징을 가집니다:

이러한 특징 덕분에 노이즈는 절차적으로 지형, 구름, 불, 물결, 나무나 대리석 같은 머티리얼 등 '자연스러워 보이는 불규칙함'을 만드는 데 핵심적인 도구로 사용됩니다 .

1D 밸류 노이즈의 원리


image.png

밸류 노이즈의 아이디어는 간단합니다. "정수 좌표마다 임의의 점을 찍고, 그 사이를 부드럽게 잇는다."

Step 1: 결정론적 난수 함수 (Deterministic Random Function)

가장 먼저 필요한 것은, 같은 입력에 항상 같은 출력을 내보내는 '결정론적' 난수 함수입니다. HLSL의 **rand()**는 이 용도로 쓸 수 없으므로 직접 만들어야 합니다. 보통 입력값을 큰 소수들과 연산하는 해시(Hash) 함수를 사용합니다.

// 입력 float 값에 대한 결정론적 난수(0~1)를 반환하는 해시 함수
float rand(float n)
{
    // sin 함수를 이용한 간단한 해시. 입력값에 따라 고유한 값을 반환합니다.
    return frac(sin(n) * 43758.5453123);
}