Japanese | English | Korean

Samples


쉐이딩

모델에 그림자를 붙이는 수법을 쉐이딩이라고 합니다. MascotCapsule V3 에서는 gouraud shading과 Toon shading의 2종류의 쉐이딩이 준비되어 있습니다.

목차


1. 고우드 쉐이딩( Gouraud Shading )

고우드 쉐이딩은 오브젝트의 각 정점의 법선 벡터를 구하여, 정점간을 삼각형의 면 위에 걸쳐서 보간 하는 방법입니다. 픽셀간의 연결 부분이 눈에 띄지 않게 되어 매끄러운 쉐이딩이 생깁니다.

고우드 쉐이딩




2. 툰 쉐이딩( Toon Shading )

툰 쉐이딩은 경계의 뚜렷한 그림자를 붙이는 방법입니다. 툰 쉐이딩을 이용하면 애니메이션의 Cell화와 같은 그림자 부착 효과를 얻을 수 있습니다.

툰 쉐이딩




3. 쉐이딩의 샘플 코드

여기에서는 샘플 코드내의 쉐이딩의 설정을 하는 함수 setShading에 대해 설명합니다. 이 샘플에서는 결정 버튼을 누를 때마다 그림자 없음•고우드 쉐이딩•툰 쉐이딩이 바뀝니다.

쉐이딩의 설정은 Render_setAttribute( Render *render, hi_sint32 attribute)에 의해서 설정합니다. 이 함수의 attribute의 값에 gouraud shading의 경우는 M3D_LIGHTING, 툰 쉐이딩의 경우는 M3D_LIGHTING과 M3D_TOON_SHADING의 2개를 논리화로 설정해 주세요.

툰 쉐이딩의 경우는 한층 더 나아가 Render_setToonParam(Render *render, hi_sint32 threshold, hi_sint32 high, hi_sint32 low)을 설정합니다. threshold는 Toon Shader 의 문턱 값, high는 레벨이 문턱 값보다 큰 때의 세기, low는 레벨이 문턱 값보다 작을 때의 세기이며, high, low는 0 - 255의 값을 설정합니다.

static void setShading( void )
{
hi_sint32 attribue_mask = 0;

switch( shade ){
/* No Shading */
case 0:
break;
/* Toon Shading */
case 1:
attribue_mask |= M3D_LIGHTING;
attribue_mask |= M3D_TOON_SHADING;
OEMC_Micro3D_Render_setToonParam
( &render, 192, 255, 210 );
break;
/* Gouraud Shading */
case 2:
attribue_mask |= M3D_LIGHTING;
break;
}
OEMC_Micro3D_Render_setAttribute( &render, attribue_mask );
}