10 - Character Animation
Outline
- Computer-Generated Character Animation
- Skeletal Animation
- Forward Kinematics
- Creating Character Animation
- BVH File Format
Computer-Generated Animation
"๋ ๋๋ง"์ ํตํด 3D ๊ฐ์ฒด๋ฅผ ์ด๋ฏธ์ง๋ก ์์ฑ
- 3D ๊ฐ์ฒด ๋๋ ์บ๋ฆญํฐ๋ฅผ ๋ชจ๋ธ๋งํ๊ณ "์์ง์(motion)"์ ๋ถ์ฌํจ
ํ์ฌ๋ ์๊ทธ๋ฆผ ๊ธฐ๋ฐ 2D ์ ๋๋ฉ์ด์ ์ ์ฌ์ ํ ๋ง์ด ์ฌ์ฉ๋์ง๋ง,
๋๋ถ๋ถ์ ์ต์ ์ ๋๋ฉ์ด์ ์ ์ด 3D ๋ฐฉ์์ผ๋ก ์ ์๋จ
Encanto, 2021
Computer-Generated Character Animation
์บ๋ฆญํฐ ์ ๋๋ฉ์ด์ ์์
Skeletal animation์ด ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋จ. ๊ตฌ์ฑ ์์:
- Skeleton: ๋ณธ ๋๋ ์กฐ์ธํธ ๊ณ์ธต ๊ตฌ์กฐ ๋ฐ ๊ด๋ จ ๋ฐ์ดํฐ
- Motion: ๊ด์ ์์ง์ ๋ฐ์ดํฐ
- Skin (๋๋ mesh): ์บ๋ฆญํฐ ๋ ๋๋ง์ ์ํ ํ๋ฉด ํํ
Visualizing Character in Skeletal Animation
Skin์ ๋ณํ ๊ฐ๋ฅํ ๋ฉ์(deformable mesh)์ผ ์ ์์
Skinning: ์ค์ผ๋ ํค์ skin mesh์ "์๋ฒ ๋ฉ(embedding)"ํ๋ ๊ณผ์
(์์ธํ ๋ด์ฉ์ ์๋ต)
A human thigh with simple skin weights painted on it
์ถ์ฒ: gameanim.com/gdc/gdc-2011-practices.pdf
์บ๋ฆญํฐ๋ ๊ฐ๋ณ ๊ฐ์ฒด(rigid mesh) ๋ฅผ ์ด์ฉํด ๋ ๋จ์ํ๊ฒ ์๊ฐํํ ์๋ ์์
์ค๋ ๊ฐ์์ ์ด์ ์ skeletal animation์์์ ๊ณ์ธต์ ๊ตฌ์กฐ(hierarchical structure) ์
์์ง์(motion) ์ด๋ฉฐ, ์๊ฐํ๋ ๋ค๋ฃจ์ง ์์์ฐธ๊ณ ์์:
Skeletal Animation
Skeletal animation์ ๋ ๊ฐ์ง ๊ตฌ์ฑ ์์๋ก ์ด๋ฃจ์ด์ง:
- "Skeleton": ์ ์ ์ธ ๋ฐ์ดํฐ
- "Motion": ์๊ฐ์ ๋ฐ๋ผ ๋ณํ๋ ๋ฐ์ดํฐ
"Skeleton" Part
- "Skeleton": ์ ์ ๋ฐ์ดํฐ
- joint ๊ณ์ธต ๊ตฌ์กฐ
- ๋ถ๋ชจ joint๋ก๋ถํฐ์ ์คํ์
(offset)
- ์ผ๋ฐ์ ์ผ๋ก translation
- ๊ธฐ์ค: ๋ถ๋ชจ ์ขํ๊ณ(parent frame)
Hips
โโโ Spine
โ โโโ Head
โ โโโ RightArm โ RightForeArm โ RightHand
โ โโโ LeftArm โ LeftForeArm โ LeftHand
โโโ RightUpLeg โ RightLeg โ RightFoot
โโโ LeftUpLeg โ LeftLeg โ LeftFoot
Recall: Hierarchical Model - Human Figure
๊ฐ body part์ ์์ง์์ ์๊ธฐ ๋ถ๋ชจ์ ์ขํ๊ณ ๊ธฐ์ค์ผ๋ก ์ ์๋จ
โ ์ฆ, ๊ฐ ๋ถ์๋ ์์ฒด์ ์ธ transformation์ ๊ฐ์ง์ด ๋ณํ์ ๋ ๊ฐ์ง๋ก ๊ตฌ์ฑ๋จ:
- ์ ์ ๋ณํ: joint offset
- ์๊ฐ ๋ณํ: motion
https://youtu.be/Ol7rMbK5C5g
https://youtu.be/0SR86WUngbU
"Motion" Part
"Motion": ์๊ฐ์ ๋ฐ๋ผ ๋ณํ๋ ๋ฐ์ดํฐ
๋ด๋ถ joint์ ์์ง์
- ๋ณดํต ํ์ (rotation)
- ๊ธฐ์ค: ๊ฐ joint์ ๊ธฐ๋ณธ ํ๋ ์ (์ฆ, joint offset์ด ์ ์ฉ๋ ์ดํ์ ๋ถ๋ชจ ํ๋ ์)
skeletal root์ ์ด๋ (translation ๋ฐ ํ์ ํฌํจ)
- ์ผ๋ฐ์ ์ผ๋ก pelvis joint
- ๊ธฐ์ค: world frame
Terminologies
- Posture (pose): ํน์ ํ๋ ์์์์ "motion" ์ํ
- Rest pose: ๋ชจ๋ joint์ ์์ง์์ด "0"์ธ ์ํ
- Joint: ๋ ๊ฐ์ฒด ์ฌ์ด๋ฅผ ์ฐ๊ฒฐํ๊ณ ํ์ ์ ํ์ฉํ๋ ์ฐ๊ฒฐ์
- Link: joint ์ฌ์ด์ ๊ฐ์ฒด
- End effector: ์ด๋ ์ฌ์ฌ ๋์ ์์ ๋จ๋ง ์ง์
Kinematics
Kinematics: ์ง๋์ด๋ ํ์ ๊ณ ๋ คํ์ง ์๊ณ ์ด๋๋ง์ ๋ค๋ฃจ๋ ํ๋ฌธ
- (์ฐธ๊ณ ) Dynamics๋ ์ด๋์ ์์ธ(ํ, ์ง๋ ๋ฑ)์ ํฌํจ
์ปดํจํฐ ๊ทธ๋ํฝ์ค์์์ Kinematics๋ skeletal animation๊ณผ ๋ฐ์
- Forward kinematics: joint angle์ ์ฃผ๋ฉด end-effector์ ์์น์ ๋ฐฉํฅ ๊ณ์ฐ
- Inverse kinematics: end-effector์ ์์น/๋ฐฉํฅ์ ์ฃผ๋ฉด joint angle ๊ณ์ฐ
Forward kinematics ์ดํด๋ skeletal animation ์ดํด์ ๋์์ด ๋จ
Forward Kinematics (FK)
Forward kinematics๋ ์ง์ญ ์ขํ๊ณ โ ์ ์ญ ์ขํ๊ณ๋ก์ ๋ณํ ์ ๊ณ์ฐ
- ๋ joint angle๋ก๋ถํฐ ๊ณ์ฐ๋จ
Forward kinematics (๊ณ์ฐ):
์ฃผ์ด์ง joint angle๋ก๋ถํฐ end-effector์ ์์น์ ๋ฐฉํฅ์ ๊ณ์ฐ
โ ์ด๋ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ฐ๋ก ์ด์ค์ ๋ก๋ end-effector๋ฟ ์๋๋ผ,
์ด๋ค link์ "๋ถ์ด ์๋" ์์์ ์ง์ ์๋ ์ ์ฉ ๊ฐ๋ฅํจ
[Demo] Forward / Inverse Kinematics
- Forward kinematics: "angles" ๋ฉ๋ด์์ ๊ฐ๋ ์กฐ์
- Inverse kinematics: ๋ง์ฐ์ค๋ก end-effector ์์น ๋๋๊ทธ๋ก ์ ์ด
Forward Kinematics Map
Forward kinematics map ๋ ๋ค์์ ๊ณฑ์ผ๋ก ์ด๋ฃจ์ด์ง:
Joint transformation (์๊ฐ์ ๋ฐ๋ผ ๋ณํจ):
- Joint์ "motion" (ํ์ ๋ฑ)
Link transformation (์ ์ ):
- Skeleton ์์ joint offset
์์:
: joint rotation
: joint offset (translation)
๊ทธ๋ฆผ ๊ธฐ์ค:
- ๋ 0๋ฒ joint(root)์ ์์น ๋ฐ ๋ฐฉํฅ (world ๊ธฐ์ค)์ ์๋ฏธ
- ํ์ฌ ์์น๋ ์ ์ ์ํ (๋ชจ๋ joint๊ฐ 0๋)
- ๋ง ํ์ (๊ทธ ์ธ๋ 0๋)
- ์ดํ ์ฒซ link ()๊น์ง ๊ณ ๋ ค
- ํ์ โ offset โ ํ์ ๊น์ง ๋์ ๋ ๊ฒฐ๊ณผ
๋ชจ๋ ์์์์, ์ง์ ๋ joint๋ฅผ ์ ์ธํ ๋๋จธ์ง joint๋ ๋ชจ๋ 0๋
- โ โ โ ๊น์ง ๋์ ๋ ๋ณํ
- (์ด ๊ทธ๋ฆผ์์๋ , ๋ง ๋นํ์ ์ํ ์๋)
- ๊น์ง ํ์ ํฌํจ
- ๊น์ง ํฌํจํ ๋ณํ
- ๊น์ง ํฌํจ๋ ์ต์ข ๋์ ๋ณํ
ํฌ์ธํธ ๋ณํ ์์ (3๋ฒ link ๊ธฐ์ค ์์ ์์์ ์์น ๊ณ์ฐ):
- ํฌ์ธํธ ๋ณํ ์์ (3๋ฒ link ์์ ์ ):
- ์ด์ฒ๋ผ forward kinematics๋
๊ณ์ธต์ joint์ link ๋ณํ์ ๋ชจ๋ ๋์ ํด
์ํ๋ link ๋๋ point์ ์์น๋ฅผ world ๊ธฐ์ค์ผ๋ก ๋ณํํจ
Recall: Rendering Hierarchical Models
๊ฐ ๋ ธ๋๋ ์์ ์ ๋ถ๋ชจ ๋ ธ๋ ๊ธฐ์ค์ผ๋ก ์ ์๋ ๊ณ ์ ์ ๋ณํ(local transformation) ์ ๊ฐ์ง
์์:
- Hip์ ์์น/๋ฐฉํฅ (world ๊ธฐ์ค):
- LeftUpLeg์ ์์น/๋ฐฉํฅ (hip ๊ธฐ์ค):
- ์ดํ์ ๋ณํ: , , ...
Hips
โโโ Spine
โ โโโ Head
โ โโโ RightArm โ RightForeArm โ RightHand
โ โโโ LeftArm โ LeftForeArm โ LeftHand
โโโ RightUpLeg โ RightLeg โ RightFoot
โโโ LeftUpLeg โ LeftLeg โ LeftFoot
Forward Kinematics Map
Skeletal animation์ ์๋๋ก ์ ์๋จ:
Joint hierarchy
Link transformation โ "Skeleton"
Joint transformation โ "Motion"
Creating Character Animation
Methods for Creating Character Animation
"skeleton"๊ณผ "motion"์ ์ด๋ป๊ฒ ๋ง๋ค๊ณ ์ค์ ํ ๊ฒ์ธ๊ฐ?
๋ํ์ ์ธ ๋ฐฉ์๋ค:
- Keyframe Animation
- Motion Capture
- Data-Driven Animation
- Physics-Based Animation
Keyframe Animation
์ ๋๋ฉ์ดํฐ๊ฐ ์ฃผ์ ์ด๋ฒคํธ๋ฅผ keyframe์ผ๋ก ์ง์
์ปดํจํฐ ์ํํธ์จ์ด๊ฐ ์ค๊ฐ ํ๋ ์์ ๋ณด๊ฐ(interpolation) ํ์ฌ ์์ฑ
- ๊ณผ๊ฑฐ์๋ ์ฌ๋์ด ์ผ์ผ์ด ๊ทธ๋ฆฌ๋ ์์ (2D ์ ๋๋ฉ์ด์ ์์ inbetweening)
- โ ์ปดํจํ ์ด ์ด๋ฅผ ์๋ํํ์ฌ ๋ฐ๋ณต ์์ ์ ์ค์
์ผ๋ฐ์ ์ผ๋ก "skeleton"์ ์๋ ์ ์
"Motion"์ keyframe ์ค์ ๋ฐ ๋ค์ํ ํ๋ผ๋ฏธํฐ ์ ์ด๋ก ๊ตฌ์ฑ
์ถ์ฒ ์ด๋ฏธ์ง:
[https://book.co...](https://book.co... MATLAB 2021 ๊ธฐ์ค)
์๊ทธ๋ฆผ ์ ๋๋ฉ์ด์ ์ ํต์ ๋ฟ๋ฆฌ๋ฅผ ๋ ์ ํต์ ์ธ ๋ฐฉ์
ํ์ค์ ์ด๊ฑฐ๋ ๋ฌผ๋ฆฌ์ ์ผ๋ก ํ๋นํ ์์ง์์ ๊ตฌํํ๊ธฐ ์ด๋ ค์
- ๊ฒฐ๊ณผ์ ํ์ง์ ์ํฐ์คํธ์ ์ญ๋์ ํฌ๊ฒ ์์กด
ํ์ฌ๋ ๋ง์ด ์ฌ์ฉ๋๋ ๊ธฐ๋ฒ
Motion Capture
์์ด๋์ด: ์ค์ ์ธ๊ฐ์ ์์ง์์ ๊ธฐ๋ฐ์ผ๋ก ํ์ค์ ์ธ ์ ๋๋ฉ์ด์ ์์ฑ
Motion capture ์์คํ ์ ๋ค์์ ์ธก์ ํ์ฌ ์ฌ๋ ๋๋ ๋ฌผ์ฒด์ ์์ง์์ "์บก์ฒ":
- ํผ๋ถ ์์ ๋ง์ปค ์์น
- ๊ฐ ์ ์ฒด ๋ถ์(๋๋ joint)์ ์์น ๋ฐ ๋ฐฉํฅ
"Motion"๊ณผ "skeleton"์ ํ์ฒ๋ฆฌ๋ฅผ ํตํด ์ถ์ถ๋จ
- ์ค์๊ฐ ์บก์ฒ ํ์ฅ ์ฌ์ง
Bvh Motion Capture Data Example
HIERARCHY
"Skeleton" {
ROOT Hips
{
OFFSET 0.0 0.0 0.0
CHANNELS 6 Xposition Yposition Zposition Xrotation Yrotation Zrotation
JOINT Spine {
OFFSET 0.0 10.0 0.0
CHANNELS 3 Xrotation Yrotation Zrotation
...
}
...
}
}
MOTION {
Frames: 612
Frame Time: 0.016667
0.0000 0.0000 0.0000 -1.4195 -1.4889 0.4398 ...
0.0177 0.0001 -0.0001 -1.4205 -1.4860 0.4411 ...
...
}
- ์ ๊ตฌ์กฐ๋ BVH (Biovision Hierarchy) ํ์
HIERARCHY
๋ skeleton์MOTION
์ ์๊ฐ์ ๋ฐ๋ฅธ joint ์์ง์์ ๊ธฐ์
Motion Capture
ํ์ฌ๋ ์ํ ๋ฐ ๊ฒ์ ์ฐ์ (์ฃผ๋ก ๋ํ ์คํ๋์ค)์์ ๋๋ฆฌ ์ฌ์ฉ๋จ
๋จ์ :
- ๋งค์ฐ ๋น์ (๊ณ ๊ฐ ์ฅ๋น, ๋์ ์ด์ฉ ๋น์ฉ)
- ํ์ค์ ์ธ ๋์์ ์์ฑํ๊ธด ํ์ง๋ง,
์ดฌ์ ํ๊ฒฝ๊ณผ ๋์ผํ ๊ฐ์ ํ๊ฒฝ์์๋ง ํจ๊ณผ์ ์
Data-Driven Animation
์์ด๋์ด:
์บก์ฒ๋ motion ๋ฐ์ดํฐ๋ฅผ ํธ์งํ๊ฑฐ๋ ์ฌ๊ตฌ์ฑํ๊ฑฐ๋ ํ์ตํ์ฌ
์ฌ์ฌ์ฉ์ ๊ทน๋ํํ๊ณ ์ ์ฐ์ฑ์ ๋์๊ตฌ์ฑ:
- "Skeleton": motion ๋ฐ์ดํฐ์ ์์ ์ฌ์ฉ
- "Motion": motion ๋ฐ์ดํฐ ๊ธฐ๋ฐ์ผ๋ก ํธ์ง/์ฌ๊ตฌ์ฑ/ํฉ์ฑ๋จ
์ฃผ์ ๊ธฐ์ :
- Motion editing: time warping, motion blending ๋ฑ
- Data-driven: motion graph, motion matching ๋ฑ
- ๋ฅ๋ฌ๋ ๊ธฐ๋ฐ motion synthesis
Motion Warping ์์: https://youtu.be/H9dQ42m6rfg
Deep Learning ๊ธฐ๋ฐ synthesis (PFNN 2017): https://youtu.be/k0KfGiwgGkw
Physics-Based Animation (Simulation-Based)
์์ด๋์ด:
๋ฌผ๋ฆฌ ์๋ฎฌ๋ ์ด์ ์ ๊ธฐ๋ฐ์ผ๋ก motion์ ์์ฑํน์ง:
- ๋ฌผ๋ฆฌ์ ์ผ๋ก ํญ์ ํ๋นํ ๋์๋ง ์์ฑ๋จ
- ์ข
์ข
.urdf
๋ฑ์ ๋ชจ๋ธ ํ์ผ์์ skeleton์ ๋ถ๋ฌ์ด - Motion์ ๋ฌผ๋ฆฌ ์๋ฎฌ๋ ์ด์ ์ผ๋ก ๊ณ์ฐ๋จ
์กฐ๊ฑด:
- "Controller" ํ์
- ๋งค ํ๋ ์๋ง๋ค joint torque๋ฅผ ์กฐ์ ํด ๋ชฉํ ๋์ ์ํ + ๊ท ํ ์ ์ง
- "Controller" ํ์
์ต๊ทผ์๋ ๊ฐํํ์ต(DRL) ๋ก controller๋ฅผ ํ์ตํ๋ ๋ฐฉ์์ด ๋๋ฆฌ ์ฌ์ฉ๋จ
DeepMimic (Peng et al. 2018): https://youtu.be/pXp5v2gcz90
PhysicsFC (Kim et al. 2025): https://youtu.be/sdWRBWESC4A
BVH File Format
BVH (BioVision Hierarchical data)
- Biovision์ด๋ผ๋ motion capture ํ์ฌ๊ฐ ๊ฐ๋ฐ
- text ๊ธฐ๋ฐ ํฌ๋งท (์ฌ๋์ด ์ฝ์ ์ ์์)
๊ตฌ์ฑ ์์:
- Hierarchy section: "Skeleton"์ ์ ์ ๋ฐ์ดํฐ
- Motion section: "Motion"์ ์๊ฐ ๋ณํ ๋ฐ์ดํฐ
Biovision BVH - Hierarchy Section
"HIERARCHY"
๋ก ์์"ROOT"
: ์ต์์ joint์ ์ด๋ฆ"OFFSET"
: parent joint๋ก๋ถํฐ์ ๋ณ์
โ ์ด๋ link transformation ์ ํด๋น"CHANNELS"
: ์ด joint์์์ transformation ์ข ๋ฅ- root์ ๊ฒฝ์ฐ 6๊ฐ (Tx Ty Tz Rx Ry Rz)
- ๋๋จธ์ง๋ ๋ณดํต 3๊ฐ (Rx Ry Rz)
"JOINT"
: ํ์ ๊ด์ (๊ตฌ์กฐ๋ ROOT์ ์ ์ฌํจ)"End Site"
: ๋ ์ด์ ์์ joint๊ฐ ์๋ ๊ฒฝ์ฐ"OFFSET"
๋ง ๊ฐ์ง (์์ง์ ์์)
์์ (๊ตฌ์กฐ๋ง ๋ฐ์ท)
HIERARCHY
ROOT Hips
{
OFFSET 0.0 0.0 0.0
CHANNELS 6 Xposition Yposition Zposition Xrotation Yrotation Zrotation
JOINT chest
{
OFFSET ...
CHANNELS 3 Xrotation Yrotation Zrotation
JOINT neck
{
OFFSET ...
CHANNELS 3 Xrotation Yrotation Zrotation
JOINT head
{
OFFSET ...
CHANNELS 3 Xrotation Yrotation Zrotation
JOINT LeftEye
...
}
}
}
}
J0
: HipsL1
: chest๊น์ง์ offsetJ1
: chestL2
: neck๊น์ง์ offsetJ2
: neckL3
: head๊น์ง์ offsetJ3
: head
Biovision BVH - Motion Section
"MOTION"
์ผ๋ก ์์"Frames:"
: ํ๋ ์ ์ (์: 179)"Frame Time:"
: ํ ํ๋ ์๋น ์๊ฐ (์: 0.016667์ด)๊ทธ ๋ค์ ์ค๋ถํฐ๋ ํ๋ ์๋ณ motion ๊ฐ์ด ๋์ด๋จ
- ๊ฐ ์ค์ 1 ํ๋ ์์ ํด๋น
- ๊ฐ ๊ฐ์ hierarchy์ ์ง์ ๋ channel ์์๋๋ก ์ ๋ ฌ๋จ
- ๊ฐ ์ด์ 1๊ฐ์ channel์ ํด๋น
- ํ์ ๊ฐ์ ๋(degree) ๋จ์
์์ (Motion Section)
MOTION
Frames: 179
Frame Time: 0.016667
1.5796 0.099733323 0.091933 -4.117298987 ...
1.5796 0.098974237 0.092352 -4.100061894 ...
...
- ๊ฐ ์ค์ 1 ํ๋ ์
- ๊ฐ ์ด์ Hips โ chest โ neck โ head ์์ผ๋ก
channel ๊ฐ์๋งํผ ๋์ด๋จ (6, 3, 3, 3 = ์ด 15๊ฐ ์ด)- ์:
- Column 1~6: Hips์ Tx Ty Tz Rx Ry Rz
- Column 7~9: chest์ Rx Ry Rz
- Column 10~12: neck์ Rx Ry Rz
- Column 13~15: head์ Rx Ry Rz
- ์:
Biovision BVH
โ ๋ฐ์ดํฐ ํด์ ๋ฐฉ๋ฒ
ํน์ segment์ ์์น๋ฅผ ๊ณ์ฐํ๋ ค๋ฉด:
Translation ์ ๋ณด
- ์ผ๋ฐ joint segment:
- translation ์ ๋ณด๋ hierarchy section์ OFFSET ๊ฐ
- root ๊ฐ์ฒด:
- OFFSET + motion section์ translation ๊ฐ์ ํฉ์ด ์ค์ translation
- ์ผ๋ฐ joint segment:
Rotation ์ ๋ณด
- motion section์์ ์ ๊ณต๋จ
"CHANNELS" ์์๊ฐ ๋งค์ฐ ์ค์:
- ์:
"Zrotation Xrotation Yrotation"
์์์ผ ๊ฒฝ์ฐ,- Z์ถ ํ์ โ X์ถ ํ์ โ Y์ถ ํ์ ์์๋ก ๋ณํ ์ ์ฉ
- ์ด๋ ZXY Euler ๊ฐ๋ ์ฒด๊ณ์ ํด๋น
- ์:
ZXY Euler ๊ฐ๋๋ง ์ฌ์ฉํ๋ค๊ณ ๊ฐ์ ํ๋ฉด ์ ๋จ!
- ์ค์ BVH ํ์ผ์ ๋ฐ๋ผ ์์๊ฐ ๋ค๋ฅผ ์ ์์
[Demo] BVH Viewer
![demo image]
- ๋ชฉ๋ก์์ ๋ค๋ฅธ motion ์ ํ ๊ฐ๋ฅ
- ํด๋น BVH ํ์ผ์ ๋ค์ด๋ก๋ํ์ฌ ํ ์คํธ ์๋ํฐ์์ ์ด์ด๋ณผ ์ ์์
10 - Lab - Character Animation
๊ฐ์
- ์์ : Joint & Link ๋ณํ
- CGR ์ฐ๊ตฌ์ค์ ์ต์ ์ฐ๊ตฌ ๊ฐ๋ตํ ์๊ฐ
์์ : Joint & Link ๋ณํ
์๊ธฐ: ์๋ฐฉํฅ ์ด๋ํ ๋งต (Forward Kinematics Map)
์๋ฐฉํฅ ์ด๋ํ ๋งต T๋ ๋ค์๊ณผ ๊ฐ์ ๋ณํ๋ค์ ๊ต์ฐจ ๊ณฑ์ผ๋ก ํํ๋ฉ๋๋ค.
- ๊ด์ (Joint) ๋ณํ (์๊ฐ์ ๋ฐ๋ผ ๋ณํจ)
- ๊ด์ ์์ง์ (๋ชจ์ , motion)
- ๋งํฌ(Link) ๋ณํ (์ ์ )
- ๊ด์ ์คํ์ (์ค์ผ๋ ํค, skeleton)
(์ฌ๊ธฐ์ ๋ i๋ฒ์งธ ๊ด์ ๋ก์ ์ด๋(translation), ๋ i๋ฒ์งธ ๊ด์ ์์์ ํ์ (rotation)์ ์๋ฏธํฉ๋๋ค.)
[์ฝ๋] 1-joint-link-transform
7-Lab-Hierarchical-Mesh/1-hierarchical.py
์ฝ๋๋ฅผ ์์ ํ์ฌ, ๋์ผํ ๊ธฐ๋ฅ์ ์ ์งํ๋ ์ง์ญ(local) ๋ณํ ๋์ ๊ด์ (joint) & ๋งํฌ(link) ๋ณํ์ ์ฌ์ฉํ๋๋ก ๋ง๋ค์ด ๋ด
์๋ค.
# ๊ธฐ์กด hierarchical.py์ Node ํด๋์ค (์ผ๋ถ)
class Node:
def __init__(self, name, vao, color, local_transform):
# ...
self.local_transform = local_transform
self.global_transform = glm.mat4()
# ...
def update_tree_global_transform(self, parent_global_transform):
self.global_transform = parent_global_transform * self.local_transform
for child in self.children:
child.update_tree_global_transform(self.global_transform)
# ์์ ๋ 1-joint-link-transform.py์ Node ํด๋์ค (์ผ๋ถ)
class Node:
def __init__(self, name, vao, color, link_transform):
self.name = name
self.vao = vao
self.color = color
self.link_transform = link_transform
self.joint_transform = glm.mat4()
# self.local_transform = glm.mat4() # ๋ ์ด์ ์ฌ์ฉํ์ง ์์
self.global_transform = glm.mat4()
# self.children = [] # ๋ ์ด์ ์ฌ์ฉํ์ง ์์
def set_joint_transform(self, joint_transform):
self.joint_transform = joint_transform
def update_tree_global_transform(self, parent_global_transform):
link_transform_from_parent = self.link_transform
joint_transform = self.joint_transform
self.global_transform = parent_global_transform * link_transform_from_parent * joint_transform
# ๋ฉ์ธ ๋ฃจํ์์์ ๋ณํ ์ค์
def main():
# ... ์ด๊ธฐํ ์ฝ๋ ...
while not glfw.window_should_close(window):
# ...
# ๊ธฐ์กด hierarchical.py ๋ฐฉ์
# th = glfw.get_time()
# box.set_local_transform(glm.rotate(th, (0,0,1)))
# blue.set_local_transform(glm.translate((0,.5,0)) * glm.rotate(th, (0,0,1)))
# red.set_local_transform(glm.translate((0,.5,0)) * glm.rotate(th, (0,0,1)))
# ์์ ๋ 1-joint-link-transform.py ๋ฐฉ์
# joint ํคํ๋ ์ ๋ณํ
t = glfw.get_time()
th = np.sin(t*np.pi)*.5 + np.pi/2.
joint_transform = glm.rotate(th, (0,0,1))
# ๊ฐ ๋
ธ๋์ joint ๋ณํ ์ค์
box.set_joint_transform(glm.mat4())
blue.set_joint_transform(joint_transform)
red.set_joint_transform(joint_transform)
# ... ๋ ๋๋ง ์ฝ๋ ...
CGR ์ฐ๊ตฌ์ค์ ์ต์ ์ฐ๊ตฌ ๊ฐ๋ตํ ์๊ฐ
CGR ์ฐ๊ตฌ์ค ์๊ฐ
์ปดํจํฐ ๊ทธ๋ํฝ์ค & ๋ก๋ณดํฑ์ค ์ฐ๊ตฌ์ค (Computer Graphics & Robotics Lab.)
์ ํฌ ์ฐ๊ตฌ ๊ทธ๋ฃน์ ๋ค์๊ณผ ๊ฐ์ ๋ชฉํ๋ฅผ ๊ฐ์ง๋๋ค.
- ์ธ๊ฐ, ๋๋ฌผ, ๋ก๋ด ๋ฑ ์์ฐ์ ์ด๊ฑฐ๋ ์ธ๊ณต์ ์ธ ์๋ช ์ฒด์ ๋ค์ํ ์ธก๋ฉด(์์ง์, ๊ทผ๋ณธ์ ์ธ ๋ฉ์ปค๋์ฆ ๋ฑ)์ ์ดํดํ๊ณ
- ๊ฐ์ ํ๊ฒฝ์์ ์ค์ ์ธ๊ณ๋ก ๊ทธ๊ฒ๋ค์ ๊ตฌํํฉ๋๋ค.
์ฃผ์ ์ฐ๊ตฌ ๋ฐฉํฅ
'์ด๋ป๊ฒ ์์ง์ผ ๊ฒ์ธ๊ฐ?'
- ๊ด์ ์ด ์๋ ์บ๋ฆญํฐ
- ๋ก๋ด
'์์ง์ด๋ ๋ฒ์ ๋ฐฐ์ฐ๊ธฐ (Learning How to Move)'
PhysicsFC: ๋ฌผ๋ฆฌ ๊ธฐ๋ฐ ์ถ๊ตฌ ์ ์ ์ปจํธ๋กค๋ฌ๋ฅผ ์ํ ์ฌ์ฉ์ ์ ์ด ์คํฌ ํ์ต
(PhysicsFC: Learning User-Controlled Skills for a Physics-Based Football Player Controller)
ํํ: SIGGRAPH 2025, ๋ฐด์ฟ ๋ฒ, 8์ 10-14์ผ
์ธ์ฉ: Minsu Kim, Eunho Jung, Yoonsang Lee. "PhysicsFC: Learning User-Controlled Skills for a Physics-Based Football Player Controller." ACM Transactions on Graphics (SIGGRAPH 2025) ๊ฒ์ฌ ์น์ธ.
ํ๊ฒ ์์น ๋๋ฌ ๊ณผ์ ์ ์ํ ๋ฅ ๊ฐํํ์ต ๊ธฐ๋ฐ ๋ชจ์ ๋งค์นญ ํ์ฉ
(Utilizing Motion Matching with Deep Reinforcement Learning for Target Location Tasks)
์์ง์ด๋ ์ฅ์ ๋ฌผ์ด ์๋ ํ๊ฒ ์์น ๋๋ฌ ๊ณผ์ ์ ์ํด, ์ฐ๋ฆฌ๋ 'ํํธ ๋ณด์(hit reward)'๊ณผ '์ฅ์ ๋ฌผ ์ปค๋ฆฌํ๋ผ(obstacle curriculum)'์ด๋ผ๋ ๋ ๊ฐ์ง ์๋ก์ด ๊ตฌ์ฑ ์์๋ฅผ ์ ์ํฉ๋๋ค. (์ด ๊ณผ์ ์์, ์ ์ฑ ์ ๋ณด์กฐ ์ผ์ ์ ๋ ฅ์ ๋ฐ์ต๋๋ค.)
์ธ์ฉ: Jeongun Lee, Taesoo Kwon, Hyunjin Shin, Yoonsang Lee. โUtilizing Motion Matching with Deep Reinforcement Learning for Target Location Tasks.โ Eurographics 2024 Short Papers, 2024๋ 4์.
๋ค์ํ ํ๊ฒฝ์์์ ๋จ์ผ ๊ฐ์ฒด ์บ๋ฆญํฐ์ ์ ์ํ ์ถ์
(Adaptive Tracking of a Single-Rigid-Body Character in Various Environments)
์์ง์ด๋ ์ฅ์ ๋ฌผ์ด ์๋ ํ๊ฒ ์์น ๋๋ฌ ๊ณผ์ ์ ์ํด, ์ฐ๋ฆฌ๋ 'ํํธ ๋ณด์(hit reward)'๊ณผ '์ฅ์ ๋ฌผ ์ปค๋ฆฌํ๋ผ(obstacle curriculum)'์ด๋ผ๋ ๋ ๊ฐ์ง ์๋ก์ด ๊ตฌ์ฑ ์์๋ฅผ ์ ์ํฉ๋๋ค. (์ด ๊ณผ์ ์์, ์ ์ฑ ์ ๋ณด์กฐ ์ผ์ ์ ๋ ฅ์ ๋ฐ์ต๋๋ค.)
์ธ์ฉ: Taesoo Kwon, Taehong Gu, Jaewon Ahn, Yoonsang Lee. "Adaptive Tracking of a Single-Rigid-Body Character in Various Environments." SA '23: SIGGRAPH Asia 2023 Conference Papers, ๋ ผ๋ฌธ ๋ฒํธ: 118, 2023๋ 12์.
๋ชจ์ ๋งค์นญ (Motion Matching)
์ฐ๋ฆฌ๋ ๋ชจ์ ๋งค์นญ์ ๊ธฐ๋ฐํ ์ํธ์์ฉ์ ์บ๋ฆญํฐ ์ ์ด ๋ฐฉ๋ฒ์ ์ ์ํฉ๋๋ค.
์ธ์ฉ: Jeongun Lee, Taesoo Kwon, Yoonsang Lee. โInteractive Character Path-Following Using Long-Horizon Motion Matching With Revised Future Queries.โ IEEE Access, 2023๋ 1์.