공부/Animation
[Animation] 스키닝(Skinning) 부분 정리
MY블로그
2023. 7. 4. 22:38
스크닝 애니메이션 개념 정리
[Animation] 스키닝(Skinning) 애니메이션
스키닝 애니메이션? Skinning Animation은 3D 모델의 뼈대 또는 스켈레톤을 기반으로 하는 애니메이션 기술이며 3D 모델의 피부또는 외부 메쉬를 뼈대(Bone) 또는 스켈레톤(Skeleton)에 결합시키는 프로세
rhksgml78.tistory.com
Shader 에 추가된 코드 부분
matrix SkinWorld(float4 indices, float4 weights) // 상위 Shader 파일
{
matrix transform = 0; //영행렬
transform += mul(weights.x, Bones[(uint) indices.x]);
transform += mul(weights.y, Bones[(uint) indices.y]);
transform += mul(weights.z, Bones[(uint) indices.z]);
transform += mul(weights.w, Bones[(uint) indices.w]);
return transform;
}
// 기타생략
PixelInput VS(VertexInput input) // 하위 Shader 파일
{
PixelInput output;
output.Uv = input.Uv;
// ↓스키닝 관련 코드 구간↓
Matrix world;
[flatten]
if (input.Weights.x)
world = SkinWorld(input.Indices, input.Weights);
else
world = World;
// ↑스키닝 관련 코드 구간↑
output.Position = mul(input.Position, world);
output.wPosition = output.Position.xyz;
output.Position = mul(output.Position, ViewProj);
output.Normal = mul(input.Normal, (float3x3) world);
output.Tangent = mul(input.Tangent, (float3x3) world);
output.Binormal = cross(output.Normal.xyz, output.Tangent.xyz);
return output;
}
스키닝이 적용되어 관절의 각도를 변경하여도 Mesh가 끊어지지 않게 되었다!