DirectX/[AssortRock] DirectX11 2D

BLEND 상태 값에 관한 정리

헛둘이 2023. 2. 17. 15:07

D3D11_BLEND는 현재 픽셀의 색상과 블렌딩 대상 픽셀의 색상 값을 조합하여 최종 색상을 생성하는 방법을 결정하는데 사용된다.

 

블렌딩이 적용되는 경우, 현재 픽셀과 블렌딩 대상 픽셀의 색상 값은 결합되어 최종 색상 값이 생성된다.

이 때 D3D11_BLEND에서 지정한 방식에 따라 블렌딩이 수행되며, 최종 색상 값이 결정된다.

 

따라서 D3D11_BLEND는 현재 픽셀과 같은 위치에 다른 픽셀이 존재할 때,

두 픽셀을 조합하여 최종 색상을 생성하는 방식을 결정하는 역할을 한다.

 

용어 정리

- 현재 픽셀 : 블렌딩을 적용하는 대상 픽셀

- 블렌딩 대상 픽셀 : 현재 픽셀과 결합되어 새로운 색상을 만들어내는 대상 픽셀

- 블렌딩 소스 : 블렌딩 대상 픽셀에 적용되는 색상값 (텍스쳐나 다른 렌더타겟의 결과)

 

1. D3D11_BLEND_ZERO :

- 블렌딩을 적용하지 않고 현재 픽셀의 색상 그대로 사용

 

2. D3D11_BLEND_ONE :

- 블렌딩할 색상값을 1로 세팅해서 현재 색과 섞이게 한다.

 

3. D3D11_BLEND_SRC_COLOR :

- 블렌딩할 색상값을 직접 지정해줄 수 있다.

- 현재 픽셀 색상값은 고려하지 않고 블렌딩할 색상값만 사용한다.

- 따라서 블렌딩할 색상값이 현재 색상값을 덮어쓰게 된다.

= (현재 픽셀 * 블렌딩 소스) + (기존 픽셀 * (1 - 블렌딩 소스))

 

4. D3D11_BLEND_INV_SRC_COLOR :

- 현재 픽셀의 색상을 반전시킨 색상값을 블렌딩할 색상값으로 사용한다.

- 한 마디로 3번과 다른 점은 블렌딩할 색상값을 사용하는데, 반전된 색상값을 사용한다는 것

= ( (1 - 현재 픽셀) * 블렌딩 소스) + (기존 픽셀 * (1 - 블렌딩 소스))

 

5. D3D11_BLEND_DEST_COLOR :

- 현재 픽셀의 색상값을 보존하고 블렌딩할 색상값을 더해서 새로운 색상을 만든다

- 이 옵션을 사용해 블렌딩할 경우 현재 색상값은 그대로 유지되며, 블렌딩할 색상값이 더해져 색상이 섞이게 된다.

- 이 때 블렌딩할 색상값과 알파 채널 값에 따라 현재 색상값의 투명도를 조절할 수 있다.

- 이미지나 텍스쳐 등에 적용되는 그림자 효과나, 투명도가 있는 레이어를 겹쳐서 더 다채로운 효과를 구현할 수 있다.

= ( 현재 픽셀)* (1 - 블렌딩 소스)) + (기존 픽셀 * 블렌딩 소스)

 

6. D3D11_BLEND_INV_DEST_COLOR :

- 현재 픽셀의 색상값을 반전시키고, 블렌딩할 색상값을 더해서 새로운 색상을 만든다.

= ((1 - 현재 픽셀) * (1 - 블렌딩 소스)) + (기존 픽셀 * 블렌딩 소스)

 

7. D3D11_BLEND_SRC_ALPHA :

- 현재 픽셀의 알파값을 블렌드하는데 사용한다.

- 이 옵션을 사용하면 현재 픽셀의 알파 채널 값이 다른 색상과 섞이게 되어 더 부드럽고 투명한 블렌딩 효과를 구현할 수 있다.

- 그렇다고 알파 채널 값 자체를 사용하는 것은 아니고 그 값을 0.0에서 1.0 사이의 값으로 정규화하여 사용한다.

- 이렇게 정규화된 값은 현재 픽셀의 알파 채널 값이 1일 때는 1.0이 되고, 0일 때는 0이 된다.(중간인 경우 선형보간해서 사용)

 

8. D3D11_BLEND_INV_SRC_ALPHA

- 현재 픽셀의 색상을 반전시킨 색상과 블렌딩하는 옵션

- 즉 현재 픽셀의 색상값을 RGB로 나타내고, 이를 반전시킨 다음 이를 블렌딩한다.

- 현재 픽셀의 색상값과 반전된 색상값을 조합하여 다양한 시각적 효과를 구현할 수 있다.

 

9. D3D11_BLEND_DEST_COLOR :

- 현재 픽셀의 색상값이 아닌 기존 픽셀의 색상값을 사용하여 블렌딩이 이루어진다.