Rendering · Patch Decal
Patch Decal
대량의 소형 Cube Decal Projector — Dual Quaternion 기반 경량 프로젝션
scroll

Patch Decal

아주 많은 수의 고정 크기 cube decal projector를 월드 공간에 뿌리는 렌더링 기능입니다. per-pixel decal projection 대신 dual quaternion 역산을 사용해 연산 비용을 낮추고, 대신 대량의 패치를 동시에 렌더링할 수 있습니다.

10 × 10 × 10 cm 고정 크기 패치

10 cm
size : 10×10×10 cm
transform: dual_quaternion

각 패치는 10 × 10 × 10 cm 크기로 고정됩니다. 위치와 회전은 dual_quaternion으로 정의하며, 이를 통해 월드 공간 어디에나 임의의 자세로 배치할 수 있습니다.

크기가 고정되어 있기 때문에 스케일 파라미터는 없으며, 동일한 패치 데이터를 대량으로 인스턴싱하는 데 적합합니다.

역산으로 per-pixel projection 대체

기존 Per-Pixel Decal
ray-mesh intersection
projection matrix
depth buffer sample
per-pixel 연산량
Patch Decal (DQ 역산)
dual_quaternion inverse
fixed cube UVW lookup
대량 인스턴싱 가능
경량 연산

dual quaternion 역산을 통해 픽셀이 cube 내부에 있는지 판별하고 UV를 결정합니다. 고비용의 실시간 projection을 포기하는 대신, 수백~수천 개의 패치를 동시에 렌더링할 수 있습니다.

두 가지 렌더 패스

Floor
Patch Pass 1
Objects
Patch Pass 2
Lighting
P1
바닥 렌더링 후 · 오브젝트 렌더링 패스 전 Pass 1

패치가 바닥 위에 뿌려집니다. 이후 캐릭터나 오브젝트가 그 위에 렌더링되므로, 패치가 캐릭터 발 또는 오브젝트 하면을 뚫고 나오지 않습니다.

바닥 데칼 · AO 대체 · 지면 흔적
P2
오브젝트 렌더링 후 · 라이팅 패스 전 Pass 2

오브젝트 또는 캐릭터 표면 위에 패치가 뿌려집니다. 라이팅 이전에 삽입되므로 패치도 조명을 받습니다.

캐릭터 표면 잔여물 · 오브젝트 위 이펙트

Use Cases

🏠
바닥-벽 AO 대체
Pass 1

바닥과 벽이 만나는 모서리에 패치를 뿌려 ambient occlusion 처리를 대신합니다.

💧
물·모래 잔여물
Pass 2

물이나 모래 영역을 벗어난 직후 캐릭터 표면에 패치를 부착하고, 시간이 지남에 따라 서서히 페이드아웃합니다.

🌊
물·모래 튐 이펙트
Pass 1

물이나 모래 속으로 뛰어들 때 주변 바닥에 튀는 물방울·모래 패치를 순간적으로 대량 배치합니다.