블렌딩, 스텐실버퍼, 그림자
목 차 블렌딩 스텐실버퍼 그림자 블렌딩방정식 블렌딩인수 투명 알파채널만들기 스텐실버퍼 반사 거울 그림자 평면투영그림자 애니메이션및게임실습 2
블렌딩
블렌딩방정식 블렌딩 애니메이션및게임실습 4
블렌딩방정식 블렌딩 현재계산되고있는픽셀 ( 원본픽셀 ) 을앞서쓰여진픽셀값 ( 목적지픽셀 ) 과결합 후면버퍼 + 전면버퍼 그리기순서 블렌딩을이용하지않는물체그리기 블렌딩을이용할물체들을거리에따라정렬 블렌딩을이용할물체들을뒤에서앞순서로그리기 애니메이션및게임실습 5
블렌딩방정식 블렌딩방정식 OPixel = SPixel SBledFactor + DPixel DBledFactor 블렌딩활성화 상당한작업필요 필요한경우에만사용 Device->SetRederState(D3DRS_APHABENDENABE, true); 애니메이션및게임실습 6
블렌딩인수 블렌딩인수 Device->SetRederState(D3DRS >SetRederState(D3DRS_SRCBEND, SRCBEND Source); Device->SetRederState(D3DRS_DESTBEND, Destiatio); D3DBEND_ZERO = (,,, ) D3DBEND_ONE = (1, 1, 1, 1) D3DBEND_SRCCOOR = (r s, g s, b s,a s ) D3DBEND_INVSRCCOOR = (1-r s,1-g s,1-b s,1-a s ) D3DBEND_SRCAPHA = (a s, a s, a s, a s ) D3DBEND_INVSRCAPHA = (1-a s s,,1-a s s,,1-a s s,,1-a s s) 애니메이션및게임실습 7
블렌딩인수 블렌딩인수 Device->SetRederState(D3DRS >SetRederState(D3DRS_SRCBEND, SRCBEND Source); Device->SetRederState(D3DRS_DESTBEND, Destiatio); D3DBEND_DESTAPHA = (a d, a d, a d, a d ) D3DBEND_INVDESTAPHA=(1-a d,1-a d,1-a d,1-a d ) D3DBEND_DESTCOOR DESTCOOR = (r d, g d, b d,a d ) D3DBEND_INVDESTCOOR=(1-r d,1-g d,1-b d,1-a d ) D3DBEND_SRCAPHASAT = (f, f, f, 1) f = mi(a s, 1-a d ) D3DBEND_BOTHINVSRCAPHA S : (1-a s,1-a s,1-a s,1-a s ), D : (a s, a s, a s, a s ) 애니메이션및게임실습 8
투명 알파채널 ~ 255 : % ~ 1% 셰이딩에서계산된알파성분이용 텍스처의알파채널 애니메이션및게임실습 9
투명 알파채널원본지정하기 텍스처의알파채널 Device->SetTextureStageState(, D3DTSS_APHAARG1, D3DTA_TEXTURE); Device->SetTextureStageState(, D3DTSS_APHAOP, D3DTOP_SEECTARG1); 정점색상에서알파획득 Device->SetTextureStageState(, D3DTSS_APHAARG1, D3DTA_DIFFUSE); DIFFUSE); Device->SetTextureStageState(, D3DTSS_APHAOP, D3DTOP_SEECTARG1); 애니메이션및게임실습 1
알파채널만들기 DDS DirectX 애플리케이션과텍스처 애니메이션및게임실습 11
투명 블렌딩이용과정 블렌딩인수 D3DRS_SRCBEND 와 D3DRS_DESTBEND 를지정 알파성분을이용한다면원본지정 : 재질, 알파채널 알파블렌딩렌더상태활성화 애니메이션및게임실습 12
투명 예제 애니메이션및게임실습 13
투명 예제 애니메이션및게임실습 14
스텐실버퍼
스텐실버퍼 스텐실버퍼 특수한효과를위한오프스크린버퍼 후면버퍼및깊이버퍼와동일한해상도 스텐실효과 후면버퍼의일정부분이렌더링되는것을막는효과 애니메이션및게임실습 16
스텐실버퍼 스텐실버퍼 응용분야 그림자볼륨 분해효과, 희미해짐효과 깊이복잡성의시각화 외곽선과실루엣 구조적으로채워진기하정보 동일면기하물체에의한 z-fightig 해결 애니메이션및게임실습 17
스텐실버퍼 스텐실버퍼이용하기 스텐실버퍼활성화및비활성화 Device->SetRederState(D3DRS_STENCIENABE, true); Device->SetRederState(D3DRS_STENCIEABE, false); 스텐실버퍼초기화 Device->Clear(,, D3DCEAR_TARGET D3DCEAR_ZBUFFER D3DCEAR_STENCI, xff, 1.f, ); 애니메이션및게임실습 18
스텐실버퍼 스텐실버퍼요청하기 깊이버퍼생성시같이생성 깊이버퍼와동일한오프스크린표면버퍼공유 D3DFMT_D24S8 32 비트깊이 / 스텐실버퍼생성 깊이버퍼 : 24비트, 스텐실버퍼 : 8비트 D3DFMT_D24X4S4D24X4S4 32비트깊이 / 스텐실버퍼생성 깊이버퍼 : 24비트, 스텐실버퍼 : 4비트 D3FMT_D15S1 16비트깊이 / 스텐실버퍼생성 깊이버퍼 : 15 비트, 스텐실버퍼 : 1 비트 애니메이션및게임실습 19
스텐실버퍼 스텐실테스트 ( 참조 & 매스크 ) 비교연산자 ( 값 & 매스크 ) 참조 & 매스크 애플리케이션이정의한스텐실참조값과매스크값의 AND 연산 값 & 매스크 현재테스트하려는픽셀의스텐실버퍼와애플리케이션이정의한매스크값의 AND 연산 표현식이 true 인경우후면버퍼의픽셀을출력 표현식이 false 인경우해당픽셀미출력 애니메이션및게임실습 2
스텐실버퍼 스텐실테스트제어하기 유연성제공을위해스텐실테스트변수설정가능 스텐실참조값 default : Device->SetRederState(D3DRS_STENCIREF, x1); 스텐실매스크 default : xffffffff Device->SetRederState(D3DRS_STENCIMASK, xffff); 애니메이션및게임실습 21
스텐실버퍼 스텐실테스트제어하기 비교연산자 Device->SetRederState(D3DRS_STENCIFUNC, value); typedef eum _D3DCMPFUNC { D3DCMP_NEVER = 1, D3DCMP_ESS = 2, D3DCMP_EQUA = 3, D3DCMP_ESSEQUA = 4, D3DCMP_GREATER = 5, D3DCMP_NOTEQUA = 6, D3DCMP_GREATEREQUA = 7, D3DCMP_AWAYS = 8, D3DCMP_FORCE_DWORD DWORD = x7fffffff } D3DCMPFUNC; 애니메이션및게임실습 22
스텐실버퍼 스텐실버퍼갱신하기 ij 번째픽셀에서스텐실테스트실패 Device->SetRederState(D3DRS_STENCIFAI, StecilOperatio); ij 번째픽셀에서깊이테스트실패 Device->SetRederState(D3DRS_STENCIZFAI, StecilOperatio); ij 번째픽셀에서깊이테스트및스텐실테스트성공 Device->SetRederState(D3DRS_STENCIPASS, StecilOperatio); 애니메이션및게임실습 23
스텐실버퍼 스텐실버퍼갱신하기 StecilOperatio D3DSTENCIOP_KEEP : 현재값유지 D3DSTENCIOP_ZERO : D3DSTENCIOP_REPACE : 스텐실참조값으로대체 D3DSTENCIOP_INCRSAT : 스텐실버퍼항목증가, 최대치 D3DSTENCIOP_DECRSAT : 스텐실버퍼항목감소, 최소치 D3DSTENCIOP_INVERT INVERT : 스텐실버퍼항목반전 D3DSTENCIOP_INCR : 스텐실버퍼항목증가, D3DSTENCIOP_DECR : 스텐실버퍼항목감소, 최대치 애니메이션및게임실습 24
스텐실버퍼 스텐실쓰기매스크 스텐실버퍼에쓰여지는모든값을매스크 default : xffffffff Device->SetRederState(D3DRS_STENCIWRITEMASK, xffff); 애니메이션및게임실습 25
반사 반사 사실감과공간감 입사각과반사각은같다 z 애니메이션및게임실습 26
반사 평면반사 후면 -> 전면 스텐실버퍼의사용 애니메이션및게임실습 27
반사 반사를위한수학 N V V ( N V ) N ( N V ) N V V ' = V 2[ V ( N V ) N] = 2( N V ) N V 애니메이션및게임실습 28
반사반사에서 로의변환행렬 v 에서 v 로의변환행렬 + + = 2 1 2 2 2 2 1 2 R y z y y y x x z x y x x + = 1 2 2 2 1 2 2 2 d d d R z y x z z z y z x 1 1 1 = = = 1 1 1 1 1 1 1 1 1 xy xz yz R R R 1 1 1 애니메이션및게임실습 29
반사 D3DXMatrixReflect t D3DXMATRIX* D3DXMatrixReflect( D3DXMATRIX* pout, // 결과반사행렬 CONST D3DXPANE *pplae // 반사할평면 ) 애니메이션및게임실습 3
거울 순서 전체장면렌더링 스텐실버퍼초기화 거울을구성하는기본형을스텐실버퍼에렌더링 스텐실테스트가항상성공하도록 : 1 거울만 1 나머지는 반사된주전자를후면버퍼와스텐실버퍼로렌더링 스텐실버퍼항목이 1 인경우에만통과 애니메이션및게임실습 31
거울 예제 애니메이션및게임실습 32
그림자
그림자 사실감과분위기 Bioware Neverwiter Nights 애니메이션및게임실습 34
그림자 사실감과분위기 Codemasters & Robel Act Blade of Darkess 애니메이션및게임실습 35
그림자 Spatial relatioships Orietatio & gameplay 애니메이션및게임실습 36
그림자 Basic Defiitios iti ight source Creator Creator ad receiver Receiver 애니메이션및게임실습 37
그림자 ight source types poit source area source 암영부 반암부 암영부 애니메이션및게임실습 38
그림자 Hard vs soft shadow 애니메이션및게임실습 39
그림자 그림자생성 별도의개체 : 텍스처 공간볼륨 장면에서조명의영향을받지않는부분 애니메이션및게임실습 4
그림자 미리생성된텍스처이용하기 Kasper Hoy Nielse 애니메이션및게임실습 41
그림자 그림자매핑 Pixar s rederig software 조명의관점에서렌더링 가까운것은백색, 먼것은검은색 애니메이션및게임실습 42
그림자 그림자매핑 애니메이션및게임실습 43
그림자 스텐실버퍼를이용한그림자볼륨 NVIDIA Ic 애니메이션및게임실습 44
그림자 투영텍스쳐그림자 애니메이션및게임실습 45
평면투영그림자 Plaar Projected Shadow 광원으로부터정점을통과하는직선을연장해서평면과교차하는위치에새로운정점을만들어그림자가되는모델을그리는방법 물체의형태를실시간에표현가능 평면렌더링 그림자모델의폴리곤수간략화가능 그림자텍스처미사용 애니메이션및게임실습 46
평면투영그림자평면투영그림자평행그림자 평행그림자 d t p t p t r = + + + = ) ( ) ( p d t d t p d t p = = + = + + ) ( ) ( ) ( p = + d p p d t p d t = = ) ( s p d p s + = 애니메이션및게임실습 47
평면투영그림자 점조명그림자 r( t) = p + t( p ) p p + d = s 애니메이션및게임실습 48
평면투영그림자평면투영그림자그림자행렬 그림자행렬 평면의방정식의계수 : ( x, y, z, d) 조명의위치벡터 ( ) 조명의위치벡터 : = ( x, y, z, w ) w= : 평행조명의방향 w 1 : 점조명의위치 w=1 : 점조명의위치 w z z y y x x w z y x z y x d d k + + + = = ),,, ( ),,, ( + k + + + = k k k S w y z y y y x y w x z x y x x x + + k d d d d k w z y x w z z z y z x y 애니메이션및게임실습 49
평면투영그림자 그림자행렬 D3DXMATRIX *D3DXMatrixShadow ( D3DXMATRIX *pout, CONST D3DXVECTOR4 *pight, // CONST D3DXPANE *pplae // 그림자평면 ) 애니메이션및게임실습 5
평면투영그림자 예제 애니메이션및게임실습 51
Questio? 애니메이션및게임실습 52