프레임 버퍼 알파(Direct3D 9)

프레임 버퍼 알파 혼합은 꼭짓점 알파, 재질 알파 및 텍스처 알파와 약간 다릅니다. 꼭짓점, 재질 및 텍스처 알파는 현재 기본 형식에만 사용되는 투명도 값을 설정하며, 그 자체로는 다른 기본 형식에 영향을 주지 않습니다. 프레임 버퍼 알파 혼합은 현재 기본 형식을 프레임 버퍼의 기존 픽셀과 결합하여 최종 픽셀 색을 생성하는 방법을 제어합니다.

알파 혼합을 수행할 때 원본 색과 대상 색이라는 두 가지 색이 결합됩니다. 원본 색은 투명 개체에서, 대상 색은 이미 픽셀 위치에 있는 색입니다. 대상 색은 투명 개체 뒤에 있는 다른 개체, 즉 투명 개체를 통해 표시될 개체를 렌더링한 결과입니다. 알파 혼합은 수식을 사용하여 원본 개체와 대상 개체 간의 비율을 제어합니다.

Final Color = ObjectColor * SourceBlendFactor + PixelColor * DestinationBlendFactor 

ObjectColor는 현재 픽셀 위치에서 렌더링되는 기본 형식의 기여입니다. PixelColor는 현재 픽셀 위치에 있는 프레임 버퍼의 기여입니다.

사용할 수 있는 알파 혼합 요소 집합은 다음과 같습니다.

혼합 모드 요소 설명
D3DBLEND_ZERO (0, 0, 0, 0)
D3DBLEND_ONE (1, 1, 1, 1)
D3DBLEND_SRCCOLOR (Rs, Gs, Bs, As)
D3DBLEND_INVSRCCOLOR (1-Rs, 1-Gs, 1-Bs, 1-As)
D3DBLEND_SRCALPHA (As, As, As, As)
D3DBLEND_INVSRCALPHA (1-As, 1-As, 1-As, 1-As)
D3DBLEND_DESTALPHA (광고, 광고, 광고, 광고)
D3DBLEND_INVDESTALPHA (1-Ad, 1-Ad, 1-Ad, 1-Ad)
D3DBLEND_DESTCOLOR (Rd, Gd, Bd, Ad)
D3DBLEND_INVDESTCOLOR (1-Rd, 1-Gd, 1-Bd, 1-Ad)
D3DBLEND_SRCALPHASAT (f, f, f, 1); f = min(As, 1-Ad)
D3DBLEND_BOTHSRCALPHA DirectX 6 이상에서는 사용되지 않습니다. 원본 및 대상 혼합 요소를 별도의 호출에서 D3DBLEND_SRCALPHA D3DBLEND_INVSRCALPHA 설정하여 동일한 효과를 얻을 수 있습니다.
D3DBLEND_BOTHINVSRCALPHA DirectX 6의 경우 사용되지 않습니다. 원본 및 대상 혼합 요소를 별도의 호출에서 D3DBLEND_INVSRCALPHA 및 D3DBLEND_SRCALPHA 설정하여 동일한 효과를 얻을 수 있습니다.
D3DBLEND_BLENDFACTOR D3DRS_BLENDFACTOR 설정에서 가져온 color.r, color.g, color.b 및 color.a를 사용합니다.
D3DBLEND_INVBLENDFACTOR D3DRS_BLENDFACTOR 설정에서 가져온 1-color.r, 1-color.g, 1-color.b 및 1-color.a를 사용합니다.

 

Direct3D는 D3DRS_ALPHABLENDENABLE 렌더링 상태를 사용하여 알파 투명도 혼합을 사용하도록 설정합니다. 수행되는 알파 혼합 유형은 D3DRS_SRCBLEND 및 D3DRS_DESTBLEND 렌더링 상태에 따라 달라집니다. 원본 및 대상 혼합 상태는 쌍으로 사용됩니다. 다음 코드 조각은 소스 혼합 상태를 D3DBLEND_SRCCOLOR, 대상 혼합 상태를 D3DBLEND_INVSRCCOLOR 설정합니다.

// This code fragment assumes that lpD3DDevice is a 
//   valid pointer to a device.

// Enable alpha blending.
lpD3DDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, 
                            TRUE);

// Set the source blend state.
lpD3DDevice->SetRenderState(D3DRS_SRCBLEND, 
                            D3DBLEND_SRCCOLOR);

// Set the destination blend state.
lpD3DDevice->SetRenderState(D3DRS_DESTBLEND, 
                            D3DBLEND_INVSRCCOLOR);

이 코드는 원본 색(현재 위치에서 렌더링되는 기본 형식의 색)과 대상 색(프레임 버퍼의 현재 위치에 있는 색) 간에 선형 혼합을 수행합니다. 결과 모양은 대상 개체의 일부 색이 원본 개체를 통해 전송되는 것처럼 보인다는 착색 유리와 유사합니다. 나머지는 흡수되는 것처럼 보입니다.

이러한 혼합 요소의 대부분은 텍스처의 알파 값이 올바르게 작동해야 합니다. 따라서 꼭짓점 또는 재질 알파를 사용하는 경우 애플리케이션은 흥미로운 결과를 생성하는 모드로 제한됩니다.

알파 혼합