MOONSUN
[D3D] 알파값(투명도) 처리 방식 : Alpha Test, Alpha Sorting, Alpha Blending 본문
나뭇잎, 풀, 유리, 연기처럼 알파(투명도) 값을 가진 오브젝트는
Depth Buffer와 블렌딩 문제 때문에 일반 오브젝트와 다르게 처리해야 한다.
주요 처리 방식 세 가지를 간단하게 정리해보았다.
1. 알파 테스트 (Alpha Test)
물체를 투명 or 불투명 으로만 처리하는 방식.
- 픽셀의 알파 값(투명도)을 확인하고, 기준(threshold)보다 작으면 해당 픽셀을 버리는 방식.
HLSL/GLSL에서는 clip()로 구현
clip(texOpacColor.a - 0.5f); // alpha - threshold
원리
- 픽셀이 버려진 경우, Depth Buffer에 기록되지 않으므로 뒤 오브젝트가 보임.
- Blend는 사용하지 않고, DepthWrite를 켤 수도 있다.
장점 & 단점
| 장단점 | 내용 |
| 장점 | Depth 문제 없이 뒤 오브젝트가 보임 |
| 구현 간단, 성능 부담 적음 | |
| 단점 | 부드러운 반투명 효과(픽셀 혼합) 불가. |
| 경계 픽셀 계단 현상 발생 가능. |
사용 예
나뭇잎, 풀, 철망 등 투명 영역 제거 목적
2. 알파 블렌딩 (Alpha Blending)
픽셀 색상을 배경과 혼합하여 부드러운 반투명 표현
기본 혼합 공식
FinalColor = SrcAlpha * SrcColor + (1 - SrcAlpha) * DestColor
원리
- DepthWrite OFF, Blend ON
- 렌더 순서 중요: 뒤 → 앞 순으로 그려야 함
- 알파값이 0~1 범위이므로 모든 픽셀 보임 가능
- 반투명 픽셀 색상을 계산해 혼합
장점 & 단점
| 장단점 | 내용 |
| 장점 | 자연스러운 반투명 표현 가능 |
| 단점 | 렌더 순서에 따라 시각적 오류 발생 가능 |
| 여러 오브젝트 겹치면 Depth 충돌 문제 가능 | |
| CPU/GPU 연산량 증가 → Alpha Test 보다 느림 |
사용 예
유리, 물, 연기 등 단순 반투명에 적합
3. 알파 소팅 (Alpha Sorting) + 블렌딩 (Blend)
여러 반투명 오브젝트가 겹칠 때, 카메라에서 먼 순서대로 정렬 후 Alpha Blending 적용
원리
- 불투명 오브젝트 먼저(앞→뒤, Z값 작은 순)
- 반투명 오브젝트는 뒤→앞(Z값 큰 순) 정렬 후 렌더링
- 픽셀 색상을 정확히 혼합 가능
- 2Pass 렌더링을 하면 내부가 비치지 않도록 처리 가능
- 1차: 불투명 렌더링, Depth 기록
- 2차: 반투명 렌더링, 깊이값 확인 후 처리
장점 & 단점
| 장단점 | 내용 |
| 장점 | 겹친 반투명에서 자연스러운 색 혼합 가능 |
| 연기, 불꽃 등 복잡한 반투명 장면 적합 |
|
| 단점 | 오브젝트 많으면 CPU 정렬 비용 발생 |
| 순서 관리 필수 | |
| 2Pass 사용 시 Draw Call 증가 → 오버헤드 |
사용 예
숲, 연기, 불꽃, 연속되는 반투명 오브젝트
| 방식 | DepthWrite | Blend | 알파 처리 | 장점 | 단점 | 사용 예 |
| Alpha Test | ON/OFF | OFF | 0/1 판단 | 빠름, Depth 문제 없음 | 부드러운 반투명 불가 | 나뭇잎, 풀, 철망 |
| Alpha Blending | OFF | ON | 0~1 | 부드러운 단일 반투명 | 렌더 순서 의존, 느림 | 나뭇잎 한 장, 유리, 물 |
| Alpha Sorting + Blend | OFF | ON | 0~1 + 정렬 | 겹친 반투명 자연스럽게 표현 | 정렬 비용, 2Pass 오버헤드 | 나뭇잎 숲, 연기, 불꽃 |
4. 정리
단순 뒤 오브젝트 보이기 → Alpha Test
부드러운 반투명 한 장 → Alpha Blending
겹친 반투명 오브젝트 → Alpha Sorting + Blend
5. 참고 사항
- 게임에서는 대부분 속도가 중요 → Alpha Test 사용 빈도 높음
- 알파 블렌딩은 여러 겹치면 CPU/GPU 부담 증가
- Alpha Sorting은 거리 기반 정렬이므로 완벽하지 않음
- 2Pass 렌더링으로 내부 투과 문제 해결 가능
'D3D' 카테고리의 다른 글
| [그래픽스] Toon Shading의 OutLine 표현 : 실루엣 Pass (0) | 2025.11.11 |
|---|---|
| [그래픽스] Toon Shading (툰 셰이딩) : Lambert 단계화 & Ramp Texture 방식 (0) | 2025.11.10 |
| [D3D] 노멀 매핑(Normal Mapping) 과 접선 공간 (Tangent Space) (0) | 2025.10.02 |
| [D3D11] 01. RenderingTriangle 삼각형 그리기 (0) | 2025.09.29 |
| [D3D] Direct3D 11 렌더링 파이프라인 주요 객체 (0) | 2025.09.29 |