일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Specular
- 게임 수학
- 가상 바이트
- 작업 집합
- Windows Build
- 개인 바이트
- C언어
- 3d
- 메모리 누수
- Rim Light
- URP
- ASW(Application SpaceWarp)
- OculusMotionVectorPass
- ColorGradingLutPass
- Virtual Byte
- Cell Look
- 프로그래밍 기초
- Cell Shader
- working set
- URP로 변경
- Toon Shader
- VR
- Private Bytes
- Three(Two) Tone Shading
- AppSW
- Cartoon Rendering
- 벡터
- Today
- Total
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(구면 선형 보간)
호를 따라 선형 보간
회전에 사용함
참고 사이트)
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
'게임 프로그래밍(학습 내용 정리) > 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 |