# 7 - Hierarchical Modeling, Mesh
# Midterm Exam Announcement
- μΌμ: 5μ 7μΌ (μ) μ€ν 6:30 ~ 7:30
- μ₯μ: μΆν 곡μ§
- λ²μ: Lecture 2~7, Lab 2~7
- μν μμ ν 30λΆ μ΄λ΄ ν΄μ€ λΆκ°
- μν μμ ν 30λΆμ΄ μ§λλ©΄ μ μ€λ λΆκ° (μ λ μ§κ° κΈμ§)
- νμμ¦ νμ μ§μ°Έ
# Outline
- Hierarchical Modeling
- κ³μΈ΅μ λͺ¨λΈλ§ κ°λ
- μ: μ¬λ λͺ¨ν
- κ³μΈ΅ λͺ¨λΈ λ λλ§
- μΌλ ¨μ λ³ν ν΄μ
- κ³μΈ΅μ λͺ¨λΈλ§ κ°λ
- Mesh
- κ°λ³ μΌκ°ν
- μΈλ±μ€ μΌκ°ν μ§ν©
# Hierarchical Modeling
- νμ κ΅¬μ± μμ(μμ)λ₯Ό μμ κ΅¬μ± μμ(λΆλͺ¨)μ μ€μ²©νμ¬ νΈλ¦¬ κ΅¬μ‘°λ‘ νν
- κ° ννΈλ κ³ μ ν body frameμ κ°μ§
- κ° ννΈμ μμ§μμ λΆλͺ¨μ body frame κΈ°μ€μΌλ‘ κΈ°μ λ¨
# Example - Human Figure
- κ° ννΈλ λ€μκ³Ό κ°μ νΈλ¦¬ ꡬ쑰λ₯Ό κ°μ§:
- Hips β Spine β Head / ν / λ€λ¦¬ β μλ°
# Human Figure - Frames
- κ° ννΈλ κ³ μ ν body frameμ κ°μ§
# Human Figure - Movement of rhip & rknee and more joints
- κ° ννΈμ μμ§μμ λΆλͺ¨μ frame κΈ°μ€μΌλ‘ κΈ°μ λ¨
- κ° ννΈλ λΆλͺ¨ frame κΈ°μ€μ λ³ν νλ ¬(βtransformation) μ κ°μ§
- μ΄λ νμ ννΈλ₯Ό "λ¬Άμ΄μ(group)" μ μ΄ν μ μκ² ν΄ μ€
# Hierarchical Model
- κ³μΈ΅μ λͺ¨λΈμ μΌλ°μ μΌλ‘ νΈλ¦¬ ꡬ쑰(tree structure)λ‘ ννλ¨
- μ 체 μ₯λ©΄(scene)μ νννλ κ·Έλν ꡬ쑰 scene graphλ μμ
- κ° λ Έλλ λΆλͺ¨ λ Έλμ frame κΈ°μ€μ λ³νμ κ°μ§
# Rendering Hierarchical Models
- κ³μΈ΅ λͺ¨λΈμ λ λλ§νλ €λ©΄,
κ° λ Έλμ frameμ world frame κΈ°μ€μΌλ‘ λ³νν΄μΌ ν¨ β κ° μ μ μ global μμΉ κ³μ° - 볡μ΅:
$$
\mathbf{p}^{\{0\}} = \mathbf{M} \mathbf{p}^{\{1\}}
$$
- $\{1\}$μ μμ $\mathbf{p}$λ₯Ό λ΄ β $\mathbf{p}^{(1)}$
- $\{0\}$μ μμ $\mathbf{p}$λ₯Ό λ΄ β $\mathbf{p}^{(0)}$
# Rendering Hierarchical Models
- κ° λ
Έλλ λΆλͺ¨ λ
Έλ κΈ°μ€μ λ³ν(local transformation)μ κ°μ§
β Local transformation - μ:
- Hip μμΉ λ° μμΈ:
M_hips
- LeftUpLeg μμΉ λ° μμΈ:
M_leftupleg
(hips κΈ°μ€)
- Hip μμΉ λ° μμΈ:
# Rendering Hierarchical Models
- κ° λ
Έλμ frameμ world frame κΈ°μ€μΌλ‘ ννν΄μΌ λ λλ§ κ°λ₯
β Global transformation - μ§λ¬Έ:
- λ€λ₯Έ λ Έλμ local λ³νμ μ΄μ©ν΄μ μ΄λ»κ² global λ³νμ κ³μ°ν μ μμκΉ?
# Recall: Post-(right) Multiplication
- $\mathbf{p'=M_1M_2p}$ (Mβμ post-multiply)
β L-to-R
- $\mathbf{M_1}$: body frame $\{0\}$ β $\{1\}$ λ³ν
- $\mathbf{M_2}$: body frame $\{1\}$ β $\{2\}$ λ³ν
- $\mathbf{p}$: $\{2\}$ μ μ β $\{0\}$ κΈ°μ€μΌλ‘ μμΉ κ³μ°
μ:
$$ \mathbf{p'=TRp} $$
# Interpretation of a Series of Transformations
- $ \mathbf{p}_0 = \mathbf{I} \mathbf{p}_0 $ (μ²μ μνλ λ¨μνλ ¬ κΈ°μ€)
- $\{0\}$μ μμ μμ κ΄μΈ‘νλ©°
$\{0\}$ β $\{1\}$ β $\{2\}$ β ... β $\{4\}$ μμΌλ‘ body frameμ΄ λ³ν¨ - $ \mathbf{p}_1 = \mathbf{M}_1 \mathbf{p}_0 $
- νμ¬ body frame: $\{1\}$, κΈ°μ€: $\{0\}$
- $\{1\}$μμ κ΄μ°° μ β $\mathbf{p}_0$
- $\{0\}$μμ κ΄μ°° μ β $\mathbf{p}_1$
- $ \mathbf{p}_2 = \mathbf{M}_1 \mathbf{M}_2 \mathbf{p}_0 $
- νμ¬ body frame: $\{2\}$, κΈ°μ€: $\{0\} $
- $\{2\}$μμ κ΄μ°° μ β $\mathbf{p}_0$
- $\{0\}$μμ κ΄μ°° μ β $\mathbf{p}_2$
- $ \mathbf{p}_3 = \mathbf{M}_1 \mathbf{M}_2 \mathbf{M}_3 \mathbf{p}_0 $
- νμ¬ body frame: $\{3\}$, κΈ°μ€: $\{0\}$
- $\{3\}$μμ κ΄μ°° μ β $\mathbf{p}_0$
- $\{0\}$μμ κ΄μ°° μ β $\mathbf{p}_3$
- $ \mathbf{p}_4 = \mathbf{M}_1 \mathbf{M}_2 \mathbf{M}_3 \mathbf{M}_4 \mathbf{p}_0 $
- νμ¬ body frame: $\{4\}$, κΈ°μ€: $\{0\}$
- $\{4\}$μμ κ΄μ°° μ β $\mathbf{p}_0$
- $\{0\}$μμ κ΄μ°° μ β $\mathbf{p}_4$
- λ°λ³΅ ꡬ쑰 μ¬μ€λͺ
- $ \mathbf{p}_4 = \mathbf{M}_1 \mathbf{M}_2 \mathbf{M}_3 \mathbf{M}_4 \mathbf{p}_0 $
- $\{4\}$μμ $\mathbf{p}_0$λ₯Ό 보λ κ΄μ°° β $\mathbf{p}_4$
- $\{0\}$μμ $\mathbf{p}_4$ κ΄μ°°
- λμΌ λ΄μ© μκ°ν:
- $\mathbf{M}_1,\ \mathbf{M}_2,\ \mathbf{M}_3,\ \mathbf{M}_4$ μμλ‘ μ μ©
- κ° λ³νμ μ΄μ λ Έλμ body frame κΈ°μ€μΌλ‘ μ μ©λ¨
- λ§μ§λ§μΌλ‘ $\mathbf{p}_0$λ₯Ό λ³ννμ¬ $\mathbf{p}_4$ νλ
# Computing Global Transform from Series of Local Transforms
- $ \mathbf{p}_4 = \mathbf{M}_1 \mathbf{M}_2 \mathbf{M}_3 \mathbf{M}_4 \mathbf{p}_0 $
- node 4μ global transformation: $\mathbf{M}_1 \mathbf{M}_2 \mathbf{M}_3 \mathbf{M}_4$
- κ° $\mathbf{M}_i$: $i$λ²μ§Έ λ Έλμ local transformation
- μ μ© μμ:
- node 1μ body frame κΈ°μ€ β node 2 β node 3 β node 4
Node $i$ | Global Transform $\mathbf{G}_i$ |
---|---|
Hips | $\mathbf{M}_{\text{hips}}$ |
Spine | $\mathbf{M}_{\text{hips}}~\mathbf{M}_{\text{spine}}$ |
Head | $\mathbf{M}_{\text{hips}}~\mathbf{M}_{\text{spine}}~\mathbf{M}_{\text{head}}$ |
RightArm | $\mathbf{M}_{\text{hips}}~\mathbf{M}_{\text{spine}}~\mathbf{M}_{\text{rightArm}}$ |
RightForeArm | $\mathbf{M}_{\text{hips}}~\mathbf{M}_{\text{spine}}~\mathbf{M}_{\text{rightArm}}~\mathbf{M}_{\text{rfa}}$ |
RightHand | $\mathbf{M}_{\text{hips}}~\mathbf{M}_{\text{spine}}~\mathbf{M}_{\text{rightArm}}~\mathbf{M}_{\text{rfa}}~\mathbf{M}_{\text{rha}}$ |
LeftArm | $\mathbf{M}_{\text{hips}}~\mathbf{M}_{\text{spine}}~\mathbf{M}_{\text{leftArm}}$ |
- νΈλ¦¬ ꡬ쑰 κΈ°λ°μΌλ‘ κ° λ Έλμ global λ³ν κ³μ° κ°λ₯
# Rendering Hierarchical Models
- $i$λ²μ§Έ λ
Έλκ° λ¨μ νλΈλ‘ λ λλ§λλ€κ³ κ°μ ν λ,
- λ¨μ νλΈμ μ μ $p_0$λ world frameμμ $\mathbf{p_i= G_i \cdot p}$λ‘ ννλ¨
Node $i$ | Global Transform $\mathbf{G}_i$ |
---|---|
Hips | $\mathbf{M}_{\text{hips}}$ |
Spine | $\mathbf{M}_{\text{hips}}~\mathbf{M}_{\text{spine}}$ |
Head | $\mathbf{M}_{\text{hips}}~\mathbf{M}_{\text{spine}}~\mathbf{M}_{\text{head}}$ |
RightArm | $\mathbf{M}_{\text{hips}}~\mathbf{M}_{\text{rightArm}}$ |
RightForeArm | $\mathbf{M}_{\text{hips}}~\mathbf{M}_{\text{rightArm}}~\mathbf{M}_{\text{rfa}}~\mathbf{M}_{\text{rh}}$ |
LeftArm | $\mathbf{M}_{\text{hips}}~\mathbf{M}_{\text{leftArm}}$ |
$\cdots$ |
# Rendering Hierarchical Models - Shape Transformation
- λ§μ½ $i$λ²μ§Έ λ
Έλκ° λ¨μ νλΈκ° μλλΌ νΉμ shape $S_ij$λ‘ λ λλ§λλ€λ©΄,
- $\mathbf{p_ij = G_i \cdot S_i \cdot p_0}$
- νΉμ λ Έλ $i$μ $j$λ²μ§Έ shapeμ λν΄ shape λ³ν $S_ij$λ₯Ό μ¬μ©ν μ μμ
# Rendering Hierarchical Models
- $i$λ²μ§Έ λ Έλλ§λ€ global transform $G_i$λ₯Ό μ μ₯νμ¬ λ λλ§ μ μ¬μ¬μ© κ°λ₯
# Quiz 1
# Many ways to digitally encode geometry
- EXPLICIT
- point cloud
- polygon mesh
- subdivision, NURBS
- L-systems
- ...
- IMPLICIT
- level set
- algebraic surface
- ...
- κ° νν λ°©μμ κ³Όμ /κΈ°ν μ νμ λ°λΌ μ ν©ν μ νμ§κ° λ€λ¦
# The Most Popular Representation: Polygon Mesh
- λ¨μν ννμΌλ‘ 볡μ‘ν 3D νμμ λͺ¨λΈλ§ κ°λ₯νλ©° λ λλ§ μλλ λΉ λ¦
- Polygon: μ§μ μΌλ‘ λλ¬μΈμΈ βλ«νβ λν
- Polygon mesh: μ¬λ¬ polygonμ΄ μ΄μ΄μ Έμ νμμ ꡬμ±νλ ꡬ쑰
- μ£Όλ‘ triangle λλ quad μ¬μ©
# Triangle Mesh
- μΌλ°μ μΈ $N$κ°νμ
- νλ©΄μ΄ μλ μλ μκ³
- μ€λͺ©ν μ μμΌλ©°
- λ λλ§μ μ ν©νμ§ μ
- λ°λ©΄ triangleμ νμ νλ©΄μ΄λ©° convex νν
- λ°λΌμ GPUλ λͺ¨λ 물체λ₯Ό triangleλ‘ λΆν΄νμ¬ μ²λ¦¬
- $N$κ°νλ triangleλ‘ λλ μ μμ
- κ²°λ‘ : Triangle mesh μ€μ¬μΌλ‘ νμ΅
# Representation for Triangle Mesh
- μ΄ μ£Όμ λ λ©λͺ¨λ¦¬μ μ μ μ μ μ₯νλ λ°©μμ λν κ²μ΄λ€
- μ μ μ μμΉ
- μ μ κ° κ΄κ³(μΌκ°ν ꡬμ±)
- κΈ°λ³Έμ μΈ λ κ°μ§ νν λ°©μ:
- Separate triangles
- Indexed triangle set
# Vertex Winding Order
- Vertex winding orderλ λ€κ°νμ μ μ λ€μ΄ λμ΄λλ μμμ
- μ΄ μμλ‘ λ€κ°νμ "μλ©΄"μ κ²°μ ν¨
- OpenGL: λ°μκ³ λ°©ν₯(CCW)μ΄ μλ©΄
- Direct3D: μκ³ λ°©ν₯(CW)μ΄ μλ©΄
# Separate triangles
- counter-clockwise μμλ‘ μ μ λμ΄
- μμ:
- vertex array: $$ \begin{aligned} \text{tri[0]} &\rightarrow (x_0, y_0, z_0),\ (x_1, y_1, z_1),\ (x_2, y_2, z_2) \\ \text{tri[1]} &\rightarrow (x_0, y_0, z_0),\ (x_2, y_2, z_2),\ (x_3, y_3, z_3) \end{aligned} $$
# Separate Triangles
- λ¨μ :
- λ©λͺ¨λ¦¬ λλΉ
- λ°μ¬λ¦Ό μ€μ°¨λ‘ μΈν ν λ°μ
- μΈμ μΌκ°ν νμ μ΄λ €μ
- $t_2$μ μ΄μ μΌκ°νμ μ°ΎκΈ° μν΄, $t_2$μ μ μ μ€ κ±°λ¦¬ $0$μΈ μ μ μ μ λΆ λΉκ΅ν΄μΌ ν¨
# Example: a cube of length 2
- μ μ μΈλ±μ€ λ° μμΉ μ:
index | position |
---|---|
0 | $(-1,~-1,~1)$ |
1 | $(1,~-1,~1)$ |
2 | $(1,~1,~1)$ |
3 | $(-1,~1,~1)$ |
4 | $(-1,~-1,~-1)$ |
5 | $(1,~-1,~-1)$ |
6 | $(1,~1,~-1)$ |
7 | $(-1,~1,~-1)$ |
# Example Cube in Separate Triangles
- Separate triangle νν λ°©μμμλ
- μ μ 36κ°λ‘ cubeμ 12κ° μΌκ°ν νν
- vertex arrayμμ λμΌ μ μ μ΄ μ¬λ¬ λ² λ°λ³΅λ¨
# Indexed triangle set
- κ° μ μ μ ν λ²λ§ μ μ₯
- κ° μΌκ°νμ 3κ°μ μ μ μΈλ±μ€λ₯Ό κ°λ¦¬ν΄
- counter-clockwise μμ
- μμ:
- vertex array: $$ \begin{aligned} \text{verts[0]} &= (x_0,\ y_0,\ z_0) \\ \text{verts[1]} &= (x_1,\ y_1,\ z_1) \\ \text{verts[2]} &= (x_2,\ y_2,\ z_2) \\ &\vdots \end{aligned} $$
- index array: $$ \begin{aligned} \text{tInd[0]} &= (0,\ 2,\ 1) \\ \text{tInd[1]} &= (0,\ 3,\ 2) \\ &\vdots \end{aligned} $$
# Indexed Triangle Set
- λ©λͺ¨λ¦¬ ν¨μ¨μ : κ° μ μ μμΉλ ν λ²λ§ μ μ₯λ¨
- μμ(topology)κ³Ό κΈ°ν(geometry)λ₯Ό λΆλ¦¬νμ¬ νν
- Topology: μ μ λ€μ΄ μ΄λ»κ² μ°κ²°λμ΄ μΌκ°νμ ꡬμ±νλμ§
- Geometry: μ μ λ€μ΄ 곡κ°μ μμΉνλ μ€μ μ’ν
- μΈμ μΌκ°ν νμμ΄ λͺ
νν¨
- μΈμ μΌκ°νμ λμΌν μ μ μΈλ±μ€λ₯Ό 곡μ ν¨
# Example Cube in Indexed Triangle Set
- Indexed triangle set λ°©μμμλ
- μ μ 8κ°μ
- μΌκ°ν 12κ°μ μ μ μΈλ±μ€λ‘ cubeλ₯Ό ννν¨
# Quiz 2
# Creating Polygon Meshes
- μΌλ°μ μΌλ‘ polygon meshλ 3D λͺ¨λΈλ§ νλ‘κ·Έλ¨μΌλ‘ μμ±λ¨
- μ΄ λ°μ΄ν°κ° μ μ₯λ νμΌμ object file λλ model fileμ΄λΌ λΆλ¦
- μμ©νλ‘κ·Έλ¨(μ: κ²μ)μ μ΄ object fileμμ μ μ κ³Ό μΈλ±μ€λ₯Ό λ‘λνμ¬ κ°μ²΄λ₯Ό κ·Έλ¦Ό
# 3D Model File Formats
- DXF β AutoCAD
- 2D, 3D λ°μ΄λ리 μ§μ
- 3DS β 3DS MAX
- μ μ°ν μ΄μ§ νμ
- VRML β Virtual reality modeling language
- ASCII κΈ°λ°, μ¬λμ΄ μ½κ³ μΈ μ μμ
- OBJ β Wavefront OBJ format
- ASCII κΈ°λ° (μ¬λμ΄ μ½κ³ νΈμ§ κ°λ₯)
- λ§€μ° λ¨μνκ³ λ리 μ¬μ©λ¨
- μ΄ μ¬λΌμ΄λμμλ OBJ ν¬λ§·μ μμΈν μ΄ν΄λ΄
# OBJ File Format
# μ£Όμ
# vertex positions: (x, y, z)
v 0.123 0.234 0.345
v 0.2 0.5 0.3
...
# vertex normals: (x, y, z)
vn 0.707 0.000 0.707
...
# vertex texture coordinates (u, v)
vt 0.500 1
...
# λ©΄(faces) μ μ (λͺ¨λ μΈλ±μ€λ 1λΆν° μμ)
# μ μ μΈλ±μ€λ§ μλ κ²½μ°
f 1 2 3
f 2 3 4
# μ μ /ν
μ€μ²/λ
Έλ© μΈλ±μ€
f 6/4/1 3/3/7 6/3/6
# μ μ /λ
Έλ© μΈλ±μ€
f 1//1 8//2 9//3
# μ μ /ν
μ€μ² μΈλ±μ€
f 3/1 4/2 5/3
κΈ°ν μ§μ κΈ°λ₯:
μ (Polyline)
l 1 5 8 2 4 9
μ¬μ§(Materials)
mtllib [μΈλΆ .mtl νμΌ μ΄λ¦] usemtl [μ¬μ§ μ΄λ¦]
λ³Έ μμ μμλ μ κΈ°λ₯λ€μ μ¬μ©νμ§ μμ
# An OBJ Example
# A simple cube
v 1.000000 -1.000000 -1.000000
v 1.000000 -1.000000 1.000000
v -1.000000 -1.000000 1.000000
v -1.000000 -1.000000 -1.000000
v 1.000000 1.000000 -0.999999
v 0.999999 1.000000 1.000001
v -1.000000 1.000000 1.000000
v -1.000000 1.000000 -1.000000
f 1 2 3 4
f 5 8 7 6
f 1 5 6 2
f 2 6 7 3
f 3 7 8 4
f 5 1 4 8
# OBJ Sources
μ μ¬μ΄νΈλ€μμ
.obj
λͺ¨λΈ νμΌμ λ€μ΄λ‘λ λ°μ Blenderμμ μ΄ μ μμOBJ νμΌ νμμ λ§€μ° λ³΄νΈμ μ:
- λλΆλΆμ λͺ¨λΈλ§ νλ‘κ·Έλ¨μ΄ OBJ ν¬λ§·μΌλ‘ export κ°λ₯
- λλΆλΆμ λ λλ§ ν¨ν€μ§κ° OBJ ν¬λ§·μ μ½μ μ μμ