프로그래밍 2014. 1. 13. 17:05
728x90

 

깊이 버퍼 그림자 (6) 장에 설명된

쉐이더 코드의 마지막 부분입니다.

 

픽셀 쉐이더에서는

그림자가 드리워졌는지를 검사하고, 드리워 진것으로 판정되면,

바로 컬러를 계산 후 리턴합니다.

 

//PS
float4 PixelShader_0 ( VS_OUTPUT _In ) : COLOR

  float4 color;


  //근거리 그림자 텍스쳐를 검사하여,
  //그림자가 체크되었다면, 그림자와 색상값을 섞어서 리턴해준다.
  color = Is_Shadow( _In, 0 );
  if( g_bIsColor )
  {
         return color;
  }
 
  //중거리 그림자 텍스쳐를 검사하여,
  //그림자가 체크되었다면, 그림자와 색상값을 섞어서 리턴해준다. 
  color = Is_Shadow( _In, 1 );
  if( g_bIsColor )
  {
         return color;
  }
  
  //원거리 그림자 텍스쳐를 검사하여,
  //그림자가 체크되었다면, 그림자와 색상값을 섞어서 리턴해준다.  
  color = Is_Shadow( _In, 2 );
  if( g_bIsColor )
  {
         return color;
  }  
 
  //여기까지 왔다면, 그림자가 드리워지지 않았다는것
  //자기색상을 돌려준다. 
  return Ret_Color_Def( _In, 1.f );

}

 

technique Tech
{
    pass P0
    {

        // shaders
        VertexShader = compile vs_2_a   VertexShader_0();
        PixelShader  = compile ps_2_a   PixelShader_0();
    }
}

 


*주의할점

지형에 캐릭터 그림자를 드리울때는,

깊이비교를 위해서, 지형도 꼭 깊이버퍼에 그려주어야 합니다


처음에 구현할때, 지형은 깊이버퍼에 렌더링하지 않아서, 

깊이값 비교가 제대로 되지 않고, 

결국,

지형에 드리워지는 그림자는, 아주 거친 도트식으로만 출력되었습니다 ㅜㅜ


728x90
posted by BK dddDang
: