MOONSUN
[그래픽스] Procedural Noise의 이해 : Noise → FBM → Domain Warping 본문
자연스러운 구름, 연기, 물결 같은 패턴은
사진을 찍어서 만드는 것이 아니라 수학적 규칙으로 생성할 수 있다.
이런 방식을 Procedural Texture라고 부른다.
그 핵심 흐름은 단 하나다.
Noise → FBM → Domain Warping
1. Noise란 무엇인가?
Noise = “연속성을 가진 랜덤”
Noise는 단순한 난수가 아니라, 이웃한 위치끼리는 비슷한 값을 갖는 랜덤이다.
- 랜덤(Random):
- 각 위치마다 완전히 다른 값
- 점처럼 튀고 끊김
- 노이즈(Noise):
- 근처 위치는 비슷한 값
- 부드럽게 이어짐
시각적인 느낌으로, Random은 TV 화면의 지글지글한 점이고, Noise는 구름이나 물결 같은 부드러운 변화의 느낌이다.
Noise는 자연스러운 변화의 최소 단위다.
1-1. Noise는 어떻게 만들어지는가?
Noise의 핵심 아이디어는 간단하다.
- 공간을 격자로 나눈다
- 각 격자에 랜덤 값을 하나씩 둔다
- 격자 사이를 부드럽게 이어 붙인다
이 “부드럽게 이어 붙이는 과정” 덕분에, Noise는 끊기지 않고 흐르는 형태를 가진다.
결과적으로, 경계가 보이지 않고, 밝음 → 어두움 → 밝음을 자연스럽게 연결할 수 있게 된다.
하지만 여기까지는 아직 부족하다..
1-2. Noise의 한계
단일 Noise는 부드럽고, 자연스러운 큰 형태를 가지지만,
디테일이 부족하고, 패턴이 단조로운 한계가 있다.
그래서 등장하는 것이 FBM
2. FBM (Fractal Brownian Motion)
FBM = Noise를 여러 번 겹쳐서 더한 것
Noise 하나로는 단순하기 때문에,
크기가 다른 Noise를 → 여러 층으로 → 조금씩 섞는다
비유하자면,
- 큰 붓으로 한 번 칠함 → 큰 형태
- 중간 붓으로 덧칠 → 중간 디테일
- 아주 작은 붓으로 톡톡 → 미세 디테일
즉, 이걸 전부 합친 것이 FBM이다.
2-1. FBM의 핵심 규칙
FBM은 보통 이런 규칙을 따른다.
반복할수록
- Noise는 더 촘촘해지고 (주파수 증가)
- 영향력은 줄어든다 (진폭 감소)
큰 구조가 가장 중요하며, 작은 디테일은 살짝만 기여하는 느낌.
결과적으로, 자연에서 흔히 보이는 프랙탈 구조의
구름, 연기, 산, 파도 같은 형태를 나름 자연스럽게 구현한다.
2-2. FBM의 한계
FBM도 좋아보이지만,
- 패턴이 전체적으로 균일하며
- 어딘가 “정돈된” 느낌으로 살짝 인공적인 인상 을 준다
원인은
Noise는 여전히 정적인 좌표 위에서 계산되고 있기 때문
자연물을 구현하기에는 너무 얌전하다.
3. Domain Warping : 좌표 뒤틀기
Domain Warping의 핵심 아이디어는
값을 바꾸지 말고, 좌표를 흔들자
일반적인 Noise:
value = fbm(uv)
warp = fbm(uv)
value = fbm(uv + warp)
즉, Noise로 또 다른 Noise의 입력 위치 자체를 왜곡한다
3-1. Domain Warping의 효과
Domain Warping의 한 줄 변화로 아래 같은 일이 생긴다.
- 경계가 휘어진다
- 패턴이 찢어지고 뒤틀린다
- 흐름과 난류가 생긴다
- 반복 구조가 사라진다
시각적으로, 연기처럼 소용돌이 치고 물이 흐르고 뒤엉키는 느낌을 줄 수 있다.
즉, 이 순간부터 패턴은 그럴듯한 자연 현상이 된다.
3-2. Domain Warping의 자연 현상 구현
자연의 핵심 특징은 이것이다.
형태 자체가 흐름에 의해 왜곡된다
- 연기: 공기의 흐름에 따라 휘어짐
- 구름: 바람과 난류에 뒤틀림
- 불꽃: 상승하면서 요동침
Domain Warping은 이 “흐름에 의한 왜곡”을 가장 간단하게 흉내 낸 방법이다.
4. 요약 정리
Procedural Texture는 복잡한 수학이 아니라 생각의 흐름이다.
1. 자연은 끊기지 않는다 → Noise
2. 자연은 여러 크기의 구조를 가진다 → FBM
3. 자연은 흐름에 의해 뒤틀린다 → Domain Warping
이 세 가지만 이해하면,
구름·연기·불·물결 셰이더를 구현할 수 있다.
'D3D' 카테고리의 다른 글
| [그래픽스] Domain Warping 기반 Somoke 패턴 구현 (0) | 2025.12.18 |
|---|---|
| [그래픽스] HDR 렌더링 : 렌더타겟, 노출, 톤 매핑 (0) | 2025.12.17 |
| [D3D] IBL 구현 이슈 : IBL Specular가 Roughness에 반응하지 않았던 이유 (0) | 2025.12.16 |
| [그래픽스] IBL (Image Based Lighting) : PBR을 위한 환경 기반 간접광 (0) | 2025.12.10 |
| [그래픽스] PBR(PBR Rendering)에서의 감마 보정 (0) | 2025.12.03 |