본문 바로가기
공부/Animation

[Animation] 스키닝(Skinning) 부분 정리

by MY블로그 2023. 7. 4.

스크닝 애니메이션 개념 정리

 

[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가 끊어지지 않게 되었다!

 

댓글