잔디 렌더링 — 10가지 기법 총정리
이 장은 지금까지 배운 것들이 실제 게임에서 어떻게 하나로 합쳐지는가를 보여주는 사례연구입니다. 잔디밭 하나에 GPU 인스턴싱(4장)·빌보드/텍스처(2장)·알파 테스트(7장)·레이마칭(6장)·버텍스 바람(4장)·LOD/컬링(7장)이 전부 들어갑니다. 대량 잔디를 모바일에서도 60fps로 그리는 10가지 기법을 각각 Direct3D 11/HLSL로 코드 한 줄·상태 하나까지 구현합니다.
v' = v * M(HLSL mul(v, M)),
행렬 행 우선 저장, 왼손 좌표계, 클립 z 범위 [0, 1], 텍스처 V축 위→아래.
원본 WebGL 데모의 로직을 그대로 이식하되, D3D11의 상태 기반 API와 HLSL로 옮기고 그 밑의 원리를 파헤칩니다.
clip/discard),
단일 드로우콜 인스턴싱, 거리별 LOD가 핵심입니다.
기법 한눈에 비교
| 기법 | 비용 | 핵심 | 적합 거리 |
|---|---|---|---|
| ① 지오메트리 | 높음 | 진짜 메시 blade, 품질 최고 | 근거리 |
| ② 빌보드/크로스쿼드 | 중간 | 4정점 쿼드, 알파 오버드로우 주의 | 중거리 |
| ③ 셸 텍스처링 | 중간 | 레이어 적층, 정점 적고 오버드로우↑ | 근~중거리 평지 |
| ④ 지형 텍스처 | 거의 공짜 | 평면에 텍스처, 입체감 없음 | 원거리 |
| ⑤ 레이마칭 | 높음(픽셀) | 메시 0, 프래그먼트에서 볼륨 행진 | 특수/스타일 |
| ⑥ 밟힘 | 중간 | 밟힘맵 샘플로 눕히기 | 플레이어 주변 |
| ⑦ 베지어 잎 | 중~높음 | 큐빅 베지어로 우아한 곡선 | 근거리 고품질 |
| ⑧ 툰/스타일 | 중간 | 색 밴딩 + 넓은 잎 | 스타일 게임 |
| ⑨ 바람 그리드 | 낮음 | 바람장 + vorticle 돌풍 | 전역 효과 |
| ⑩ LOD 통합 | 가변 | 근:지오 · 중:빌보드 · 원:텍스처 | 전 거리 |
세부 페이지
지오메트리 잔디
blade 한 포기 = 삼각형 스트립. 수만 포기를 단일 드로우콜로 인스턴싱하고 바람은 버텍스에서 sin으로.
빌보드 / 크로스쿼드
잔디 다발을 4정점 쿼드에 텍스처로 압축, 카메라를 향해 회전. 오버드로우 히트맵으로 비용 확인.
셸 텍스처링
지면을 살짝 띄운 여러 겹(shell)을 인스턴싱으로 적층, 노이즈 임계값으로 strand를 discard.
지형 텍스처
먼 거리는 평면에 잔디 텍스처 한 장. 정점·오버드로우 거의 0. LOD 스택의 마지막 단계.
볼류메트릭 레이마칭
메시 0. 풀스크린 삼각형에서 픽셀마다 광선을 쏘고 3D 노이즈로 잔디 밀도를 판정해 색을 쌓기.
인터랙티브 밟힘
플레이어 주변 잔디가 바깥으로 휘고 납작해짐. 밟힘맵(RenderTexture)을 버텍스에서 샘플.
큐빅 베지어 잎
잎 하나를 4개 제어점의 큐빅 베지어로 정의해 우아하게 휘게. Ghost of Tsushima 방식.
툰 / 스타일라이즈드
색을 2~3단계로 밴딩하고 뿌리는 어둡게(AO), 끝은 하이라이트. Breath of the Wild 풍.
통합 바람 그리드
월드를 셀 그리드로 보고 바람 방향/세기를 저장, 움직이는 소용돌이(vorticle)로 자연스러운 돌풍.
LOD 통합 씬
카메라 거리에 따라 근:지오메트리 · 중:빌보드 · 원:텍스처로 자동 전환(경계 페이드). 실전 조합.