MathJax

레이블이 Programming인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Programming인 게시물을 표시합니다. 모든 게시물 표시

2011년 8월 20일 토요일

ASE 파일 Skined Animation


맥스에서 기본으로 출력되는 ASE파일의 TM(변환행렬)은 월드 행렬.

Bone, Biped 구조일 경우에 각 노드마다 로컬 TM이 필요함.
로컬 TM = 자신 TM * Inverse(부모 TM)

이렇게 구해진 로컬 TM을 Bone 구조에 따라 차례대로 곱해주면
원래의 각 노드별 월드 행렬을 구할 수 있음.

맥스에서 캐릭터를 만든 다음 Bone, Biped를 이용하여 붙이는 작업을 하게됨.
만들어진 캐릭터 역시 월드좌표 기준으로 완성되어 있음.

위에서 구해진 계층 구조 TM을 적용할려고 캐릭터 정점에 바로 계층 구조TM을 곱하면 안됨.
계층 구조로 이루어진 각 노드의 월드 TM은 월드 좌표 원점 기준 변환 TM임.

그러므로 현재 월드 좌표로 이루어진 캐릭터 정점에 계층 구조TM을 곱하면
엉뚱한 좌표로 이동하게 됨.

노드 월드 TM의 역행렬을 구하면 노드 중심의 피봇 좌표계로 이동가능.

최종 변환 정점 = 캐릭터 정점 * 피봇 TM * 계층 구조 TM

= 캐릭터 정점 * Inverse(노드 월드 TM) * 계층 구조 TM

2011년 7월 26일 화요일

FPS에 따른 애니메이션 조절 하기

[게임상 사용 시간]
FPS(Frame Per Second):
e.g. 30FPS = 1초당 30 프레임

[3dsMax 사용 시간]
TPS(Tick Per Frame):
e.g. 160TPS = 1프레임당 160틱

임의로 지정한 FPS로 애니메이션 프레임 진행하기

1초 동안 30 프레임이 진행 되어야 됨
30 FPS * 1 sec = 30 frame/sec * 1 sec = 30 frame

Δt 초 동안 x 프레임 진행 되어야 됨
30 FPS * Δt sec = 30 frame/sec * Δt sec = (30*Δt) frame = x frame

e.g. 게임 60FPS, 애니메이션이 30FPS 경우 현재 프레임 구하기

1. 매 프레임 동안 Δt의 합계 시간을 계산한다.
2. 합계 시간이 1/30FPS 보다 클 경우 x값을 구한다.
3. (합계 시간*30FPS)의 정수 부분이 진행해야 할 추가 프레임 부분(a)
4. a값 만큼 현재 애니메이션 프레임을 추가 진행 시킨다.
5. 합계 시간에서 정수 부분(a*1/30FPS))을 빼고 다시 1 부터 다시 진행 한다.