표준(Normal)
계산식 : (Cs*As) + (Cd*(1-As))
(덮힐칼러*덮힐알파) + (깔린칼러*(1-덮힐알파))
SetRenderState( D3DRS_BLENDOP, D3DBLENDOP_ADD ) : SRC + DEST
SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA) : 덮힐칼러 * 덮힐알파
SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA ) : 깔린칼러 * (1-덮힐알파)
일명 알파블렌딩이다.
덮여지는 알파값의 나머지 만큼 밑의 그림이 보인다.
투명한 셀로판지 위에 그림을 그린것과 같다.


어둡게(Darken)
계산식 : MIN( Cs, Cd )
SetRenderState( D3DRS_BLENDOP, D3DBLENDOP_MIN ) : MIN( Cs, Cd )
SetRenderState( D3DRS_SRCBLEND, D3DBLEND_ONE ) : Cs * 1
SetRenderState( D3DRS_DESTBLEND, D3DBLEND_ONE ) : Cd * 1
둘중 어두운색을 취한다.


곱하기(Multiply)
계산식 : Cs * Cd
SetRenderState( D3DRS_BLENDOP, D3DBLENDOP_ADD ) : 0 + Cs * Cd
SetRenderState( D3DRS_SRCBLEND, D3DBLEND_ZERO ) : Cs * 0
SetRenderState( D3DRS_DESTBLEND, D3DBLEND_SRCCOLOR ) : Cs * Cd
색과 색을 곱하므로 점점 어두워진다는 특징이 있다.
형광펜의 느낌이 난다.


밝게(Lighten)
계산식 : MAX( Cs, Cd )
SetRenderState( D3DRS_BLENDOP, D3DBLENDOP_MAX ) : MAX( Cs, Cd )
SetRenderState( D3DRS_SRCBLEND, D3DBLEND_ONE ) : Cs * 1
SetRenderState( D3DRS_DESTBLEND, D3DBLEND_ONE ) : Cd * 1
둘중 밝은 색을 취한다.


스크린(Screen)
계산식 : 1 - ( 1-Cs ) * ( 1-Cd)
1 - ( 1 - Cd - Cs + (Cs+Cd)
1 - 1 + Cd + Cs - (Cs*Cd)
Cd + Cs - (Cs+Cd)
Cd + Cs * (1-Cd)
SetRenderState( D3DRS_BLENDOP, D3DBLENDOP_ADD ) : Cs * (1-Cd) + Cd
SetRenderState( D3DRS_SRCBLEND, D3DBLEND_INVDESTCOLOR ) : Cs * (1-Cd)
SetRenderState( D3DRS_DESTBLEND, D3DBLEND_ONE ) : Cd * 1
곱하기의 반대효과가 나와서 더 밝아집니다.
여러장의 사진 슬라이드를 포개서 투영하는것과 유사합니다.


선형닷지(Linear Dodge, Add)
계산식 : Cs + Cd
SetRenderState( D3DRS_BLENDOP, D3DBLENDOP_ADD ) : Cs + Cd
SetRenderState( D3DRS_SRCBLEND, D3DBLEND_ONE ) : Cs * 1
SetRenderState( D3DRS_DESTBLEND, D3DBLEND_ONE ) : Cd * 1
색을 더해서 명도를 증가시킵니다.
마법, 총알등의 이펙드로 밝아지는 효과는 Add혹은 Screen을 많이 사용합니다.


빼기(Subtract)
계산식 : Cd - Cs
SetRenderState( D3DRS_BLENDOP, D3DBLENDOP_REVSUBTRACT ) : Cd - Cs
SetRenderState( D3DRS_SRCBLEND, D3DBLEND_ONE ) : Cs * 1
SetRenderState( D3DRS_DESTBLEND, D3DBLEND_ONE ) : Cd * 1
색을 빼서 명도를 감소시킵니다.
흑마법에 사용하면 좋은결과가 나오지 않을까 생각듭니다.
실제로 마법관련 이펙트에서는 사용해보지는 않았습니다.
바로가기
Posted by 바람처럼..
|