7장 블렌딩
블렌딩 : 현재 래스터라이즈 과정에 있는 픽셀과 같은 위치에 있는 이전의 픽셀을 서로섞는 테크닉.기본형 위에 새로운 기본형을 섞는다.
다양한 효과(특히 투명) 가능
7.1 블렌딩 방정식
나무 상자를 배경으로 빨간색 주전자를 그리는데 주전자가 만약 반투명하다면?
나무 상자 위 주전자의 삼각형을 래스터라이즈 하는동안 주전자와 나무 상자의 픽셀 컬러를 조합하는 과정이 필요함
현재 계산되고 있는 픽셀(원본 픽셀)을 앞서 쓰여진 픽셀 값(목적지 픽셀)과 결합하는 방식을 블렌딩이라 부른다.블렌딩의 효과는 투명 효과에 제한되지는 않는다. 컬러가 조합되는 방법을 지정하는 다양한 옵션들이 제공됨.
현재 그려지고 있는 픽셀은 앞서 후면 버퍼에 그려진 픽셀과 블렌드된다는 것을 기억하자. 나무 상자의 이미지는 먼저 그려진 것이므로 이 이미지의 픽셀은 후면 버퍼에 보관된 것이다. 주전자는 이후에 그려져 나무 상자의 픽셀과 섞는작업이 가능하다.
따라서 블렌딩이용을 위해 다음의 규칙이 반드시 지켜져야함
-RULE-
블렌드를 이용하지 않는 물체를 먼저 그린다. 이어 블렌드를 이용할 물체들을 카메라와의 거리에 따라 정렬한다. 물체들이 뷰 스페이스 내에 있다면 Z성분을 통해 간단히 정렬이 가능하므로 가장 손쉬운 작업이 가능하다. 만지막으로 블렌딩을 이용하는 물체들을 뒤에서 앞 순서로 그려나간다.
두 개의 픽셀 값을 섞는 데는 다음의 식이 이용된다.
각각의 변수는 4D 컬러 벡터(r,g,b,a)이다 곱셉기호는 성분 단위 곱을 나타낸다.
OutputPixel - 블렌드 결과 픽셀
SourcePixel - 후면 버퍼의 픽셀과 블렌드할 현재 픽셀
SourceBlendFactor - 블렌드할 원본 픽셀의 퍼센트를 지정하는 [0,1] 범위 내의 값
DestPixel - 후면 버퍼 내의 픽셀
DestBlendFactor - 블렌드할 목적지 픽셀의 퍼센트를 지정하는 [0,1]범위 내의 값
원본과 목적지 블렌드 인수는 원본과 목적지 픽셀을 다양한 방법으로 변경하여 여러가지 효과를 연출할 수 있도록 해준다.
블렌딩은 디폴트로 비활성화되어 있으며, D3DRS_ALPHABLENDENABLE 렌더 상태를 true로 지정하여 활성화할 수있다.
-TIP-
블렌딩은 상당한 작업이 필요하며 반드시 필요로 하는 기하정보에 대해서만 활성화 되어야하고 해당 렌더링이끝나면 비활성화하야함. 또함 한번에 처리하여 하나의 프레임 내에서 여러번 블렌딩을 켜고 끄는일을 피하는 것이 좋다.
7.2 블렌드 인수
원본과 목적지 블렌드 인수에 다양한 조합의 값을 넣으면 여러 가지 블렌드 효과를 만들어낼 수 있다.원본 블렌드 인수와 목적지 블렌드 인수를 지정하기 위해서는 각각 D3DRS_SRCBLEND와 D3DRS_DESTBLEND 렌더 상태를 이용하면 된다.
Device->SetRenderState(D3DRS_SRCBLEND, Source);
Device->SetRenderState(D3DRS_DESTBLEND, Destination);
Source와 Destination의 값으로는 다음의 블렌드 인수 중 하나를 넣으면 된다.
원본 블렌드 인수와 목적지 블렌드 인수의 디폴트 값은 각각 D3DBLEND_SRCALPHA와 D3DBLEND_INVSRCALPHA이다.
7.3 투명
알파 성분의 주된 이용 분야는 바로 블렌딩이다. 각 버텍스 컬러의 알파 성분은 컬러와 마찬가지로 삼각형의 면에 셰이드 되지만, 픽셀의 컬러를 결정하는 것이 아니라 픽셀의 알파 성분에 영향을 준다.
알파 성분은 주로 픽셀의 투명도 단계를 지정하는 데 이용된다. 각 픽셀의 알파 성분에 8비트씩을 할당했다고 가정하면 알파 성분의 유효 범위는 [0, 255]가 되며 실제로는 [0, 100%] 불투명도에 해당한다.
알파 성분으로 픽셀의 투명도를 지정하기 위해서는 원본 블렌드 인수를 D3DBLEND_SRCALPHA로, 목적지 블렌드 인수를D3DBLEND_INVSRCALPHA로 지정해야 한다. 이 값은 디폴트 블렌드 인수이기도 하다.
7.3.1. 알파 채널
셰이딩에서 계산된 알파 성분을 이용하는 방법 이외에도 텍스처의 알파 채널에서 알파 정보를 얻는 방법이 있다. 알파 채널은 알파 성분을 보관하기 위해 각 텍셀에 할당된 비트들이다. 기본형에 텍스처를 매핑할 때는 알파 채널의 알파 성분 또한 매핑되며, 이는 곧 텍스처를 입힌 기본형 픽셀의 알파 성분이 된다.
7.3.2 알파 채널 원본 지정하기
디폴트로, 현재 텍스처가 알파 채널을 가지고 있는 경우에는 알파 채널에서 알파를 가져오고,만약 알파 채널이 없다면 버텍스 컬러에서 알파를 얻는다.
다음과 같은 렌더 상태를 이용하면 어떤 원본을(난반사 컬러나 알파 채널) 이용할 것인지를 지정할 수 있다.
//셰이드 과정에서 난반사 컬러로 알파를 계산한다.
Device->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_DIFFUSE);
Device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
//알파 채널에서 알파를 얻는다.
Device->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
Device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
7.4 DX 텍스처 툴로 알파 채널 만들기
대부분의 일반적인 이미지 파일 포맷들은 알파 정보를 보관하지 않는다. 이 섹션에서는 DX 텍스처 툴을 이용해 알파 채널을 포함하는 DDS 파일 제작법을 살펴보려고 한다. DDS파일은 DX 애플리케이션과 텍스처를 위해 특별히 디자인된 이미지 파일 포맷이며,BMP나 JPG등과 같은 다른 파일과 마찬가지로 D3DXCreateTextureFromFile을 이용해 텍스처로 로딩할 수 있다 DirectX 텍스처 툴은 DXSDK 루트의 \Bin\DXUtils 디렉토리에 보관되어 있다.
7.6 요약
*알파 블렌딩은 앞서 레스터라이즈를 거쳐 후면 버퍼 내의 동일한 위치에 있는 픽셀과 현재 래스터라이즈중인 기본형의 픽셀을 조합할 수 있도록 해준다.
*블렌드 인수는 원본과 목적지 픽셀을 섞는 방법을 선택할 수 있게 해준다.
*기본형 텍스처의 알파 채널이나 기본형 재질의 난반사 성분에서 알파 정보를 얻을 수 있다.
Throughout the tournament, Jake faced a diverse array of opponents and challenging hands. His ability to adapt his strategies and remain focused under pressure proved invaluable. As the tournament progressed, Jake’s tactical play https://joocasinopokies1.com/ and psychological insights allowed him to outmaneuver his competitors. By the time he reached the final table, his skill and perseverance had earned him the top spot and the championship title. Jake’s success underscored the importance of experience, preparation, and resilience in the pursuit of gambling excellence.