# 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 κΈ°μ€€)

# 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
  1. $\mathbf{M_1}$: body frame $\{0\}$ β†’ $\{1\}$ λ³€ν™˜
  2. $\mathbf{M_2}$: body frame $\{1\}$ β†’ $\{2\}$ λ³€ν™˜
  3. $\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
    • ...
  • 각 ν‘œν˜„ 방식은 과제/κΈ°ν•˜ μœ ν˜•μ— 따라 μ ν•©ν•œ 선택지가 닀름
  • λ‹¨μˆœν•œ ν‘œν˜„μœΌλ‘œ λ³΅μž‘ν•œ 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

  • free3d.com (opens new window)

  • cgtrader.com/free-3d-models (opens new window)

  • μœ„ μ‚¬μ΄νŠΈλ“€μ—μ„œ .obj λͺ¨λΈ νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œ λ°›μ•„ Blenderμ—μ„œ μ—΄ 수 있음

  • OBJ 파일 ν˜•μ‹μ€ 맀우 λ³΄νŽΈμ μž„:

    • λŒ€λΆ€λΆ„μ˜ λͺ¨λΈλ§ ν”„λ‘œκ·Έλž¨μ΄ OBJ 포맷으둜 export κ°€λŠ₯
    • λŒ€λΆ€λΆ„μ˜ λ Œλ”λ§ νŒ¨ν‚€μ§€κ°€ OBJ 포맷을 읽을 수 있음