혼합
현재 래스터화하는 픽셀(소위 원본 픽셀)을 후면 버퍼에 이미 래스터화되어 있는 픽셀(소위 대상 픽셀)과 섞는 혼합(blending) 기법이다. 물이나 유리 같은 반투명 물체를 렌더링할 수 있게 된다.
혼합 공식
현재 래스터화 중인 ij번째 픽셀, 즉 원본 픽셀(source pixel)에 대해 픽셀 셰이더가 출력한 색상이 Csrc라고 하자. 그리고 현재 후면 버퍼에 있는 ij번째 픽셀, 즉 대상 픽셀(destination pixel)의 색상이 Cdst라고 하자. 혼합을 적용하지 않는다면 Csrc가 Cdst를 덮어써서 후면 버퍼의 ij번째 픽셀의 새로운 색상이 된다. 그러나 혼합을 적용하면 Csrc와 Cdst를 일정한 공식에 따라 혼합해서 얻은 새로운 색상 C가 Cdst를 덮어쓰게 된다. 혼합 공식은 다음과 같다.
Fsrc와 Fdst는 각각 원본과 대상의 혼합 계수(blend factor)이다. 이 혼합 계수들을 적절히 설정하면 원본 픽셀과 대상 픽셀을 다양한 방식으로 혼합할 수 있으며, 여러 가지 효과를 낼 수 있다. 가운데는 여러 이향 연산자 중 하나이다. 위의 혼합 공식은 색상의 RGB 성분들에만 적용된다. 알파 성분은 다음과 같은 개별적인 공식으로 처리한다.
색상 혼합과 다른 혼합 계수들과 이항 연산자를 사용할 수 있다.
안개
게임에서 안개를 적절히 이용하면 먼 거리의 렌더링 결함이나 파핑(popping) 현상을 숨길 수 있다. 파핑은 절두체의 먼 평면 뒤에 있던 물체가 카메라가 이동함에 따라 절두체 안으로 들어오면서 갑자기 화면에 튀어나오는 것을 말한다. 게임이 묘사하는 세계의 날씨가 맑다고 해도 먼 거리에 약간의 안개를 포함시키는 것이 바람직하다.
안개 색상과 안개가 시작하는 거리(카메라 기준), 그리고 안개의 범위(안개 시작 지점에서 물체가 안개에 완전히 묻혀서 보이지 않게 되는 지점까지)를 설정해 둔다. 렌더링 도중에는 삼각형의 한 점의 색상을 다음과 같이 원래 색상과 안개 색상의 가중 평균으로 구한다.
s는 카메라 위치와 표면 점 사이의 거리의 함수로 치역은 [0, 1]이다. 표면 점과 카메라 사이의 거리가 멀수록 이 값이 1에 가까워져서 표면 점이 안개에 더 많이 묻힌다.
saturate는 주어진 인수를 [0, 1] 구간으로 한정하는 함수이다. dist(p, E)가 fogStart 이하일 경우 s가 0이 된다. 카메라와의 거리가 fogStart 이하인 표면 점은 안개 색에 영향을 전혀 받지 않는다.
dist(p, E)가 fogEnd 이상인 표면 점은 안개에 완전히 묻혀서 안개 색만 보이게 된다.
'그래픽스 > DirectX 12' 카테고리의 다른 글
[DirectX 12 3D게임 입문] Chapter 9 : 텍스처 적용 (3) | 2023.11.30 |
---|---|
[DirectX 12 3D게임 입문] Chapter 8.16 : 조명 - 연습문제 (0) | 2023.11.29 |
[DirectX 12 3D게임 입문] Chapter 7.9: Direct3D의 그리기 연산 제2부 - 연습문제 (0) | 2023.11.21 |
[DirectX 12 3D게임 입문] Chapter 6.13: Direct3D의 그리기 연산 - 연습문제 (0) | 2023.11.16 |
[DirectX 12 3D게임 입문] Chapter 5.7 ~ 5.12: 렌더링 파이프라인 - 테셀레이션 단계들 ~ 출력 병합기 단계 (1) | 2023.11.14 |