WinCNT

Animation 본문

Animation


Animation : 움직이는 것

시간에 종속적

 

영상은 Pre-Rendered

게임은 리얼 타임 렌더링

 

Animation - Computer Graphics

Sprite Animation – 비트맵을 교체
전통적인, Lagacy한 2D 게임들, 셀 애니메이션 등

2D Vector – Morph, Transform, Skinning
스파인, 라이브 2D등의 프로그램

참고로 스파인은 3D처럼 작동한다

본이 있고 특정 본에 대한 가중치가 있는 등등

3D Graphics - Morph, Transform, Skinning
현존하는 모든 3D관련 리얼타임 렌더러은

Morph, Transform, Skinning 중 하나

예를 들어 표정이 있는 게임들은 대부분 Skinning

 

Animation – Computer Graphics – 3D Graphics

Vertex Animation(Morph)

버텍스를 다 컨트롤하는 것

버텍스가 많아지면 데이터 용량이 감당이 안 됨

 

Transform Animation(Bone)

변환만으로 애니메이션을 그린다

관절 처리가 없음, Morph같은 부드러운 처리가 없다

버추얼 파이터1, 철권1

 

Skinning Animation(혹은 Skeleton Animation / Rigging)

현 세대의 3D Graphics

Bone(뼈대)와 Vertex Weight을 이용

Transform Animation에서 발전한 애니메이션

 

 

Interpolation


Key Frame Animation

모든 애니메이션 정보(Transform)를 다 쓸 수 없다

->중요한 정보만 Sampling, Quantization
-> 아날로그를 디지털로 바꾸는 과정

 

샘플링 <--> 복원

샘플링된 데이터를 어떻게 복원할 것인가

여러 방법이 있지만 요즘은 그냥 샘플링 쓰는듯?

 

Interpolation - 보간법, 내삽

두 값의 사잇 값을 계산함

Lerp(선형 보간), Bezier, Hermit, Catmull-Rom

Slerp(구면 선형 보간), Squad

 

Lerp(선형 보간)

말 그대로 선형으로 보간

 

 

Slerp(구면 선형 보간)

호를 따라 선형 보간
회전에 사용함

 

참고 사이트)

https://nobilitycat.tistory.com/entry/%EC%84%A0%ED%98%95-%EB%B3%B4%EA%B0%84%EA%B3%BC-%EA%B5%AC%EB%A9%B4-%EC%84%A0%ED%98%95-%EB%B3%B4%EA%B0%84slerp

 

 

 

 

 

ASE Data

TM_ANIMATION

노드 이름

노드의 포지션 애니메이션 정보 (틱-tick)

 

주의점들

매 업데이트마다 조립해야 한다

 

키 프레임 샘플링
Pos, Rot, Scl이 모두 샘플링 되는 것은 아니다.
관절은 보통 Rotation만 되는 경우가 많다.
LocalTM의 회전 값만 ‘Update’ 해 줘야 한다.

 

회전 보간
DX의 보간 함수를 쓰면 별로 문제는 없다.
나중에 맥스에서 익스포터를 만들면 최단보간 문제와 맥스 자체의 버그 등..

일단은 Lerp/Slerp로 충분함
XMVectorLerp
Vector3::Lerp
XMQuaternionSlerp

업데이트 순서 (함정)
모든 애니메이션을 업데이트 후 LocalTM누적을 해야 함
그렇지 않으면 1프레임 오차로 Alias현상과 Slerp의 보간으로

지옥같은 디버깅을 할 수도 있음

 

네거티브 스케일(Negative Scale)

ASE의 NodeTM에 네거티브 스케일(Negative Scale)인 값들도 존재한다

이는 3D Max에서 Mirroring을 하여 작업하면 Negative Scale이 된다고 한다

따라서 XMMatrixDecompose함수 등으로 추출하면

당연히 스케일에 네거티브(-) 값이 들어가게 된다

 

Negative Scale은 Normal의 처리나 애니메이션 처리에 문제가 되는 경우가 있으니

적절히 처리할 필요가 있다

 

예를 들어 Position의 값은 마이너스 스케일이 적용된 월드 TM의 값이기 때문에

그래서 Decompose한 값을 그대로 사용하면

네거티브 스케일의 오브젝트는 뒤집히는 현상이 발생하거나 한다

(해결책은 해당 position 값에 -를 해주면 되나?)

 

https://www.deviak.com/2690117

 

Chapter 4.2 Node TM 해석

Node TM은 Node 정보에 있어서 가장 기본적이면서도 가장 중요한 정보 중 하나이다. Node TM에 많은 정보가 있지만 해석하는 과정이 까다로운 부분 중 하나이다. *NODE_TM { // Node의 이름 *NODE_NAME "Box01" //

www.deviak.com

 

'게임 프로그래밍(학습 내용 정리) > 3D Game Programming' 카테고리의 다른 글

Skinning  (0) 2022.04.29
Animation2  (0) 2022.04.27
ASE Parser - Node  (0) 2022.04.15
ASE Parser - Mesh1(Position, Normal)  (0) 2022.04.06
PBR  (0) 2022.03.31