일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- URP로 변경
- Private Bytes
- 3d
- 가상 바이트
- 벡터
- OculusMotionVectorPass
- 게임 수학
- URP
- Specular
- AppSW
- Virtual Byte
- Three(Two) Tone Shading
- C언어
- Toon Shader
- working set
- Rim Light
- Windows Build
- 프로그래밍 기초
- 메모리 누수
- Cell Look
- 개인 바이트
- Cartoon Rendering
- ASW(Application SpaceWarp)
- 작업 집합
- ColorGradingLutPass
- VR
- Cell Shader
- Today
- Total
WinCNT
Skinning 본문
Skinnig Animation
다른 말로 Skeletal Animation
버텍스가 여러 개의 Bone의 가중치(Weight)를 가지고 있으며
가중치에 따라 버텍스의 위치 등을 보간해서 애니메이션하는 기법을 말한다
관절 등부드럽게 이어져야 하는 부분에는 다 적용할 수 있다
3D Max Exporter
3D Max의 ASE 익스포트의 디폴트 설정으로는 스키닝 값을 출력할 수 없다
SDK를 설치해서 애드온으로 커스터마이징해야 한다
(복잡한 부분이 많음)
- Bone List
- Bone0
- Bone1
- ...
- WVertex List
- WVertex 0
- Weight 0 0.3(가중치는 합이 1)
- Weight 1 0.2
- Weight 2 0.5
- WVertex 0
스키닝이 적용되는 오브젝트(버텍스)들은
어떠한 본한테 어느 정도(즉 가중치)로 영향을 받을지에 대한 정보를 가지고 있다
게임 엔진에서의 계산
스키닝에 대한 정보를 파싱했으면 다음은 Bone Offset TM를 구해야한다
Bone Offset TM은 본 오브젝트와 스킨 오브젝트의 떨어진 거리(Offset)을 나타내는 행렬이며,
Skinned Mesh 기준의 Bone의 TM이다
(Bone 부모 기준 Local TM이 아님!!)
여기서 BoneNodeTM은 본의 초기 Transform Matrix를 의미한다
캐릭터의 기본 포즈인 T포즈나 A포즈를 취해주는 Matrix라고 생각하면 될 것 가다
본의 로컬 트랜스폼만으로는 기본 포즈를 취할 수 없으므로, 그걸 위한 초기 월드 변환 행렬이라고 생각하자
그리고 위의 코드는 Update()마다 Bone Offset TM를 계산하고 있지만
Bone Offset TM은 변하지 않기 때문에 초기화 시에 구해도 괜찮을 것이다
이렇게 구한 Bone TM List를 쉐이더 코드에 밀어넣으면 된다
셰이더에서의 계산
Vertex에 영향을 주는 Bone의 TM을 weight값을 곱해서 Skin Mesh의 모든 버텍스에 대해서 계산한다
용책의 예제를 보면 다음과 같다
for문을 돌면서 posL과 normalL를 구하고 있다
참고로 weight가 4개인 것은 한 버텍스에 영향을 주는 본의 개수는 보통 2~3개이기 때문이다
SSS
'게임 프로그래밍(학습 내용 정리) > 3D Game Programming' 카테고리의 다른 글
Normal Mapping (0) | 2022.05.06 |
---|---|
Picking (0) | 2022.05.06 |
Animation2 (0) | 2022.04.27 |
Animation (0) | 2022.04.19 |
ASE Parser - Node (0) | 2022.04.15 |