3D 게임 그래픽에서 유리를 통과해 보이는 배경, 마법 효과의 부드러운 가장자리, 혹은 나뭇잎 사이로 비치는 햇살 같은 투명 효과는 현실감을 높이는 핵심 요소입니다. 이러한 투명도를 렌더링 파이프라인에서 처리하는 대표적인 두 가지 기법이 바로 알파 블렌딩(Alpha Blending)과 알파 테스트(Alpha Test)입니다.
두 기법은 모두 이미지의 알파 채널(투명도 정보)을 사용하지만, 픽셀을 화면에 그릴지 말지 결정하는 수학적 방식과 그에 따른 성능 부하가 완전히 다릅니다. 이 글에서는 두 기법의 동작 원리를 픽셀 셰이더와 출력 병합 단계에서 코드 레벨로 분석하고, 각 기법이 게임 성능에 미치는 영향을 상세히 비교해 보겠습니다.
1. 알파 블렌딩 (Alpha Blending)
알파 블렌딩은 이미 화면에 그려진 색상(Destination Color, $C_{dst}$)과 현재 그리려는 픽셀의 색상(Source Color, $C_{src}$)을 알파 값($A_{src}$, $0.0 \sim 1.0$)에 따라 부드럽게 합성(Blending)하는 방식입니다. 출력 병합(Output Merger) 단계에서 수행되는 이 수학적 연산은 반투명 효과를 완벽하게 표현합니다.
동작 원리 및 수식
알파 블렌딩의 가장 기본적인 수식은 다음과 같습니다.

이 연산은 모든 픽셀에 대해 수행되므로, 픽셀 셰이더가 연산한 색상이 최종적으로 프레임 버퍼에 기록되기 전에 메모리에서 $C_{dst}$를 읽어오고, 합성 연산을 거쳐 다시 기록하는 과정이 필요합니다.
HLSL 코드 레벨 분석
픽셀 셰이더에서는 단순히 알파 값을 포함한 색상을 반환하고, 실제 블렌딩은 그래픽스 API 세팅에 따라 출력 병합 단계에서 자동 수행됩니다.
High-level shader language
// 포워드 렌더링 셰이더 예시 (HLSL)
float4 frag(v2f i) : SV_Target {
float4 col = tex2D(_MainTex, i.uv);
col.a *= _Transparency; // 사용자 정의 투명도 적용
return col; // 알파 값이 포함된 색상 반환
}
- 장점: 부드럽고 사실적인 반투명 효과(유리, 연기, 마법 효과 등) 표현 가능.
- 단점: 모든 픽셀에 대해 메모리 읽기/쓰기 및 합성 연산이 발생하므로 필레이트(Fill-rate) 및 메모리 대역폭 부하가 큽니다.
2. 알파 테스트 (Alpha Test)
알파 테스트는 훨씬 단순하고 빠른 방식입니다. 픽셀을 합성하는 대신, 픽셀의 알파 값이 특정 임계값(Threshold)보다 크면 그리고, 작으면 버리는 이진(Binary) 결정을 내립니다. 이 결정은 픽셀 셰이더 내부에서 이루어지며, 통과하지 못한 픽셀은 이후의 모든 연산(라이팅, 텍스처링 등)이 생략됩니다.
동작 원리

HLSL 코드 레벨 분석
HLSL에서는 clip() 함수를 사용하여 알파 테스트를 구현합니다.
High-level shader language
// clip() 함수를 이용한 알파 테스트 셰이더 (HLSL)
float _Cutoff; // 임계값 (예: 0.5)
float4 frag(v2f i) : SV_Target {
float4 col = tex2D(_MainTex, i.uv);
// 알파 값이 _Cutoff보다 작으면 픽셀을 즉시 버림 (연산 중단)
clip(col.a - _Cutoff);
return col; // 통과한 픽셀만 색상 반환
}
- 장점: 통과하지 못한 픽셀은 렌더링 연산이 생략되므로 연산량이 $O(N_{pixel})$로 매우 적고, 필레이트 및 메모리 부하를 대폭 줄일 수 있습니다.
- 단점: 가장자리가 날카롭고 계단 현상이 발생하여 부드러운 반투명 효과를 표현할 수 없습니다.
3. 핵심 비교 및 성능 영향
두 기법은 성능 부하의 지점이 완전히 다릅니다.
| 구분 | 알파 블렌딩 (Alpha Blending) | 알파 테스트 (Alpha Test) |
| 연산 방식 | 색상 합성 (수학적 연산) | 이진 결정 (그리기/버리기) |
| 연산 단계 | 출력 병합 (Output Merger) | 픽셀 셰이더 (Pixel Shader) 내부 |
| 성능 부하 지점 | 필레이트 (Fill-rate) & 메모리 대역폭 | 픽셀 셰이더 연산량 (Discard 시 절약) |
| 표현 효과 | 부드러운 반투명, 오버드롭(Overdraw) | 날카로운 컷아웃, 계단 현상 |
성능 영향 분석
- 오버드롭(Overdraw): 알파 블렌딩은 카메라 앞에 여러 반투명 오브젝트가 겹쳐 있을 때, 그 뒤의 모든 픽셀 색상을 읽어와 합성해야 하므로 심각한 오버드롭 부하를 유발합니다.
- 셰이더 최적화: 알파 테스트는
clip()에 의해 통과하지 못한 픽셀은 라이팅 및 텍스처 샘플링 연산조차 수행되지 않으므로, 복잡한 셰이더를 사용하는 오브젝트(예: 풀, 나무)의 렌더링 속도를 비약적으로 향상시킬 수 있습니다.
요약 및 결론
부드럽고 사실적인 투명 효과가 필수적인 유리나 연기 같은 표현에는 알파 블렌딩을 사용해야 하지만, 오버드롭 부하를 항상 경계해야 합니다. 반면 날카로운 가장자리가 허용되는 풀, 나뭇잎, 창살 같은 표현에는 알파 테스트를 사용하여 복잡한 라이팅 연산을 과감히 생략하고 픽셀 셰이더 부하를 줄이는 것이 최적화의 핵심입니다.
프로젝트의 요구 사항과 성능 목표에 따라 두 기법을 적절히 혼용하거나, 최근에는 알파 테스트의 날카로운 가장자리를 후처리 기법으로 보완하는 방식 등을 도입하여 최적의 비주얼과 성능을 동시에 달성할 수 있습니다.