
물 머티리얼을 구현하는 데에는 사실 계획에 없었습니다. 스케쥴 문제로 따로 물 애셋은 언리얼이 기본으로 제공하는 Water 플러그인이나, 물 애셋을 들고와서 사용하자는 것이 기본 취지였습니다.
그러나, 언리얼이 제공하는 Water 플러그인은 너무 무거운 나머지, 개발하는데에서는 차질이 생길 것으로 보여서 따로 차용하지 않게 되었습니다.
또 한, 언리얼에서 기본으로 제공하는 물 머티리얼도 부자연스럽게 구성된 형태가 크게 마음에 들지 않았습니다. 그래서 따로 물 머티리얼을 추가적으로 구성해야한다고 판단했습니다.

우려 혹은 생각보다 언리얼에서는 물을 위해서 쉽게 구성시킬 수 있었습니다.
언리얼 엔진 렌더링 파이프라인에서 기본적으로 제공하는 Single Layer Water는 말 그대로 자연스러운 물 표현을 위한 고급 쉐이딩 모델입니다.
각 입력 파라미터는 다음과 같은 속성을 제어합니다.
| Scattering Coefficients | 물 입자 내 빛의 산란 정도를 제어 |
|---|---|
| Absorption Coefficients | 빛의 흡수 계수 설정 |
| PhaseG | 등방성/비등방성 방향성 제어 |
| Color Scale Behind Water | 수면 아래 색상 기여도 조절 |
볼륨 쉐이딩 모델
균일한 Participating Media 볼륨을 활용하여 물리 기반 쉐이딩을 구현합니다.
<aside> <img src="/icons/info-alternate_blue.svg" alt="/icons/info-alternate_blue.svg" width="40px" />
Participating Media

**참여 매질(Participating Media)**은 빛이 통과하면서 상호작용하는 매질을 의미합니다.
안개, 연기, 구름과 같은 대기 현상부터 우유 같은 반투명 물질, 직물과 같은 구조화된 물질을 시뮬레이션하는 데 사용됩니다.
| 흡수(Absorption) | 빛이 매질을 통과하며 에너지가 감소하는 현상 |
|---|---|
| 산란(Scattering) | 빛이 매질 내에서 방향이 임의로 바뀌는 현상 |
| 방출(Emission) | 매질이 빛을 발산하는 현상 |
| 외부 산란(Outscattering) | 매질 밖으로 빛이 산란되는 현상 |
</aside>
산란과 슐릭 위상 함수를 사용하여 표면의 투명도를 계산합니다.
<aside> <img src="/icons/info-alternate_blue.svg" alt="/icons/info-alternate_blue.svg" width="40px" />
슐릭 위상 함수(Schlick Phase Function)
슐릭 위상 함수는 참여 매질에서 빛의 산란을 계산하기 위한 수학적 모델입니다.
값에 따라, 산란 방향이 표현되는 것이 다릅니다.

| 값 | 산란 방향 |
|---|---|
| 0 | 모든 방향으로 균등하게 산란(등방성) |
| 양수 | 전방 산란(빛이 들어온 방향으로 계속 진행) |
| 음수 | 후방 산란(빛이 들어온 반대 방향으로 산란) |
</aside>
굴절은 수면 아래의 깊이와 색상을 읽어 왜곡을 적용하는 방식으로 처리됩니다.
렌더링 특성
<aside> <img src="/icons/computer-chip_blue.svg" alt="/icons/computer-chip_blue.svg" width="40px" />
메인 렌더링 프로세스
베이스 패스 → G-버퍼 생성 → 디퍼드 라이팅 → 싱글 레이어 워터 프로세스 → 일반 투명도 렌더링
</aside>
<aside> <img src="/icons/computer-chip_red.svg" alt="/icons/computer-chip_red.svg" width="40px" />
싱글 레이어 워터 프로세스 순서
G-버퍼 렌더링 → 타일 분류(컴퓨트 쉐이더) → SSR 패스 → 반사/하늘 합성 → 최종 워터 이미지
</aside>
순서
1단계: G-Buffer 렌더링
<aside> <img src="/icons/dialogue_blue.svg" alt="/icons/dialogue_blue.svg" width="40px" />
G-Buffer란?

G-Buffer는 디퍼드 셰이딩 파이프라인에서 사용되는 렌더 타겟 이미지 집합입니다.
다음과 같은 데이터를 버퍼에 저장합니다.
2단계: 타일 분류
3단계: 반사 처리
4단계: 최종 합성