[게임수학] 17. 캐릭터: 게임에 생기를 불어넣는 기술
- 📕 Book/이득우 게임수학
- 2023. 4. 19.
17.1 스켈레탈 애니메이션
스켈레탈 애니메이션(Skeletal animation) : 가상의 뼈대인 본(Bone)을 캐릭터 메시에 심은 후, 해당 본의 움직임에 맞춰 캐릭터 메시가 변형되는 방식을 사용
본을 구성하는 3가지 정보
- 이름 : 본을 식별할 수 있는 고유한 이름
- 트랜스폼 : 캐릭터 메시에 본이 심어질 때 본의 배치 정보 (현재의 정보)
- 바인드포즈(Bindpose) : 최초의 배치 정보, 향후 본이 움직일 때 상대적인 변화량을 파악하는데 사용
- 리깅(Rigging) : 메시에 본 정보를 추가한 후 본의 움직임에 따라 메시의 정점이 움직이도록 본과 정점을 연결하는 작업
- 웨이트(Weight) : 한 정점에 영향을 주는 본들의 연결 정보
- 게임 엔진은 시간에 따라 값의 변화를 저장한 키프레임(Keyframe) 데이터를 사용한다.
17-1 실습
스켈레탈 애니메이션의 구현
17.2 트랜스폼 계층 구조
부모 트랜스폼과 자식 트랜스폼이 가져야 하는 규칙
- 부모가 움직이면 부모의 움직임만큼 자식도 움직인다.
- 자식이 움직여도 부모는 영향을 받지 않는다.
- 하나의 부모는 여러 자식을 가질 수 있다.
- 자식은 하나의 부모만 가질 수 있다.
루트 트랜스폼 (Root Transform) : 계층 구조에서 부모가 없는 최상단 트랜스폼
월드 트랜스폼 (World transform) : 계층 구조와 상관없이 자식이 속한 공간에서의 트랜스폼. 절대 트랜스폼(Absolute transform)
로컬 트랜스폼 (Local transform) : 부모로 부터 상대적인 트랜스폼. 상대 트랜스폼(Relative transform)
트랜스폼 계층 구조의 변환
부모 - 나 - 자식 의 구조에서 사례별 정리
- 부모의 월드 트랜스폼이 변경된 경우
- 부모의 월드 트랜스폼, 나의 월드 트랜스폼, 자식의 월드 트랜스폼 순서대로 계산
- 나의 로컬 트랜스폼과 자식의 로컬 트랜스폼은 변경되지 않음
- 나의 로컬 트랜스폼이 변경된 경우
- 나의 로컬 트랜스폼, 나의 원월드 트랜스폼, 자식의 월드 트랜스폼 순서대로 계산
- 부모의 월드 트랜스폼과 자식의 로컬 트랜스폼은 변경되지 않음
- 나의 월드 트랜스폼이 변경된 경우
- 나의 월드 트랜스폼, 나의 로컬 트랜스폼, 자식의 월드 트랜스폼 순서대로 계산
- 부모의 월드 트랜스폼과 자식의 로컬 트랜스폼은 변경되지 않음
- 기존에 설정된 부모를 버리고 새로운 부모로 편입하는 경우
- 나의 로컬 트랜스폼을 월드 트랜스 폼으로 변경하고 새로운 부모로 부터의 로컬 트랜스폼을 계산
로컬 트랜스폼으로부터 월드 트랜스폼의 계산
부모의 월드 트랜스폼과 내 로컬 트랜스폼을 사용해 내 월드 트랜스폼을 구하는 방법
크기
S'_world = s-> * s'->
회전
q'_world = q' · q
이동
M_world = M_parent · M_local
t'_world = (q · t'->) * s-> + t
월드 트랜스폼으로부터 로컬 트랜스폼의 계산
부모의 월드 트랜스폼 정보와 나의 월드 트랜스폼 정보를 비교해 나의 로컬 트랜스폼을 계산하는 방법
크기
S^-1-> = (1/s_x, 1/s_y, 1/s_z)
회전
q*
이동
t^-1-> = (q* · t->) * s^-1->
17-2 실습
계층 구조를 활용한 태양계 시스템
캐릭터 메시와 애니메이션
캐릭터를 구성하는 본의 계층 구조
- Root
- Plevis
- Spine
- LeftArm
- RightArm
- Neck
- LeftLeg
- RightLeg
- Spine
- Plevis
17-3 실습
캐릭터 애니메이션의 구현
17.4 정리
- 스켈레탈 애니메이션의 구현 원리
- 트랜스폼의 계층구조
반응형