(이 게시글에서는 버텍스셰이더에 대해서만 다룰 것입니다.)
먼저 데이터를 불러오기 위한 버텍스 셰이더 구조체 모형입니다.
struct VS_MODEL_INPUT
{
float3 pos : POSITION;
float3 normal : NORMAL;
float2 uv : TEXCOORD;
uint4 index : BORNINDEX;
float3 weight : WEIGHT;
};
| cs |
우선 본 인덱스와 가중치는 애니메이션을 위한 변수입니다.
이에 대해서는 다음 애니메이션에 대한 게시글에서 좀 더 자세히 다루도록 하겠습니다.
(지금 예상으로는 애니메이션에 관한 게시글은 3~4개정도 될 것으로 예상하고 있습니다.)
(지금 예상으로는 애니메이션에 관한 게시글은 3~4개정도 될 것으로 예상하고 있습니다.)
다이렉트 상에서 위 포맷에 맞추어 버텍스 셰이터를 컴파일하면 데이터가 정상적으로 로드될 것입니다.
이번 구조체는 버텍스셰이더를 적절히 가공해서 픽실 셰이더로 출력할 구조체 모형입니다.
struct VS_TEXTURED_LIGHTING_OUTPUT
{
float4 position : SV_POSITION;
float3 positionW : POSITION;
float3 normalW : NORMAL;
float2 uv : TEXCOORD;
#ifdef _WITH_VERTEX_LIGHTING
float4 color : COLOR;
#endif
};
| cs |
(사실 셰이더에 관련된 부분은 저 말고 다른 친구가 주로 다뤘었습니다. 그냥 이런 포맷으로 출력했구나 정도만 보시는 것이 좋을 것 같습니다.)
그리고 마지막으로 오브젝트의 위치, 재질, 뼈를 저장할 cbuffer입니다.
cbuffer cbGameObjectInfo : register(b2)
{
matrix gmtxGameObject;
matrix gBoneTransforms[96];
};
| cs |
위치는 게임월드 상에서의 오브젝트의 위치입니다.
두번째로 뼈는 오브젝트의 애니메이션을 위한 변수입니다. 이에 대해서는 다른 게시글에서 더 자세히 다루도록 하겠습니다.
이제 필요한 구조체 및 cbuffer의 소개는 끝났습니다.
본격적으로 코드를 살펴보죠.
VS_TEXTURED_LIGHTING_OUTPUT VSModel(VS_MODEL_INPUT input)
{
VS_TEXTURED_LIGHTING_OUTPUT output;
output.positionW = (float3)mul(float4(input.pos, 1.0f), gmtxGameObject);
//output.positionW = (float3)mul(float4(posL, 1.0f), gmtxGameObject);
output.normalW = mul(input.normal, (float3x3)gmtxGameObject);
//output.normalW = mul(normalL, (float3x3)gmtxGameObject);
output.position = mul(mul(float4(output.positionW, 1.0f), gmtxView), gmtxProjection);
output.uv = input.uv;
#ifdef _WITH_VERTEX_LIGHTING
output.normalW = normalize(output.normalW);
output.color = Lighting(output.positionW, output.normalW);
#endif
return(output);
}
| cs |
(주석친 부분은 애니메이션을 위한 부분이므로 지금은 무시하시면 됩니다.)
사실 버텍스 셰이더 코드 자체도 그리 어렵지 않습니다.
출력할 픽셀셰이더 구조체를 선언해주고,
불러온 버텍스셰이더를 위한 데이터를 픽셀셰이더에 맞추어 적절히 가공해준 뒤 픽셀셰이더로 리턴해주면 완료입니다.
여기서 적절한 가공이란 위치에 월드변환행렬, 카메라변환행렬, 투영변환행렬을 곱해주는 것을 뜻합니다.
셰이더코드에 대해서는 이정도까지만 설명하고 마치도록 하겠습니다.
다음 게시글부터는 불러온 모델데이터(FBX 등...)에서 애니메이션 데이터를 추출하고, 이를 자신의 응용프로그램에 적용하는 방법에 대해 설명해보려고 합니다.
다음 자료들은 없나요 ㅜㅜ
답글삭제