상세 컨텐츠

본문 제목

HumanGL: 계층적 모델링과 변환 행렬 스택 - (3)

Computer Graphics/HumanGL

by Banjosh 2024. 10. 9. 20:00

본문

이 과제의 주요 내용인 계층적 모델링과 변환 행렬 스택에 대해 알아보자 

계층적 모델링

계층적 모델링은 복잡한 모델의 움직임을 부모-자식 관계로 나누어 관리하는 방식이다. 부모의 움직임이 자식 객체들에게 전달되어, 각각의 객체가 논리적 관계를 유지하면서 자신만의 움직임을 가질 수 있도록 하는 구조이다. 이 구조를 사용하면, 여러 부위가 서로 상호작용하며 자연스러운 애니메이션을 구현할 수 있다.

예시: Human Model

과제에서 요구한 대로 예시를 들면, 다음과 같이 사람의 신체 구조를 계층적으로 나눌 수 있다.

  • 계층 관계:
    • 몸통 → 머리
    • 몸통 → 팔 상부 → 팔 하부
    • 몸통 → 다리 상부 → 다리 하부

이 계층 구조에서 몸통이 움직이면, 그 아래에 있는 머리, 팔, 다리와 같은 자식들도 몸통의 움직임에 따라 함께 움직인다. 그러나 팔 하부가 회전할 때는 팔 하부만 독립적으로 회전하게 된다. 부모의 변환이 자식에게 전달되지만, 각 자식은 자신의 변환을 추가로 가지는 구조이다.

 

예를 들어:

  1. 몸통이 앞으로 이동하면, 팔과 다리도 함께 이동한다.
  2. 팔 하부가 회전하면, 팔 하부만 회전하고 다른 부위는 영향을 받지 않는다.
  3. 몸통이 이동하면서 팔 하부가 회전하면, 팔 하부는 몸통의 이동을 따르면서도 자신만의 회전도 가진다.

이처럼 부모의 움직임이 자식에게 계층적으로 영향을 미치는 구조계층적 모델링의 핵심이다.


변환 행렬 스택

 변환 행렬 스택계층적 모델링에서 애니메이션을 구현할 때 유용하게 사용할 수 있는 도구이다. 부모의 변환스택에 저장하고, 그 위에 자식의 변환쌓아가며 적용하는 방식이다.

 변환 행렬 스택에 대해 알아보면서 왜 굳이 스택을 써서 구현을 하는지가 궁금했는데 다음 예시를 통해 그 궁금증이 사라졌다.

변환 행렬 스택의 필요성

 계층적 모델에서 부모가 자식을 여러 개 가지고 있을 때, 각 자식의 변환이 끝난 후 다른 자식에게 영향을 주지 않도록 부모의 상태를 복원해야 한다. 스택을 사용하면, 부모의 상태를 저장해두고 각 자식의 변환을 처리한 후 복원할 수 있기 때문에 스택을 쓰는 것이 좋다.

 

예시: 부모와 두 자식의 렌더링

  1. 부모 렌더링
     부모 객체의 변환을 M1이라고 할 때, 부모를 렌더링하고 M1을 스택에 저장한다.
  2. 자식1 렌더링
     자식1의 변환을 M2라고 하면, 부모의 변환 M1에 자식1의 변환 M2를 곱하여 M1 * M2로 변환된 상태로 자식1을 렌더링한다. M1 * M2 상태는 스택에 저장된다. (혹시 자식1의 자식이 또 있는 경우 활용되므로)
  3. 자식2 렌더링
     자식1의 렌더링이 끝나면 스택에서 Pop하여 부모 변환 M1 상태로 복원한다. 그 다음, 자식2의 변환을 적용하기 위해 M1에 자식2의 변환을 적용하여 자식2를 렌더링한다.

 이처럼 여러 자식 객체가 있을 때, 스택을 사용하여 부모의 변환을 복원하고, 다른 자식의 변환이 서로 간섭하지 않도록 할 수 있다. Pop을 통해 부모의 상태로 돌아가기 때문에 자식1의 변환자식2에 영향을 미치지 않도록 방지할 수 있다.


계층적 모델링과 변환 행렬 스택의 결합

 계층적 모델링변환 행렬 스택을 결합하면, 복잡한 애니메이션을 효율적으로 구현할 수 있다. 부모-자식 관계를 기반으로 변환이 계층적으로 전달되며, 각 객체가 자신만의 독립적인 변환을 가지면서도 전체 구조는 일관되게 유지된다.

 이 방식은 특히 로봇 모델이나 캐릭터 애니메이션처럼 여러 부분이 상호작용하는 모델을 만들 때 매우 유용하다. 몸통, 팔, 다리와 같은 부위를 계층적으로 연결해 애니메이션을 구현하는 데 사용되며, 변환 행렬 스택을 통해 부모-자식 간의 관계를 효율적으로 관리할 수 있다.

 결국, 계층적 모델링변환 행렬 스택을 통해 복잡한 구조를 가진 객체의 애니메이션을 자연스럽게 구현할 수 있다.


요약

  • 계층적 모델링은 부모-자식 관계를 기반으로 변환이 계층적으로 적용되는 구조다.
  • 변환 행렬 스택을 사용하면 부모의 변환을 저장하고 복원하여 여러 자식의 변환이 서로 간섭하지 않도록 할 수 있다.
  • 이 두 가지 개념을 결합하여 복잡한 모델의 자연스러운 애니메이션을 구현할 수 있다.

 

마무리

 

 과제에 필요한 기본 개념 공부는 끝났으니 다음엔 사람 모델을 디자인해 볼 예정이다.

관련글 더보기