본문 바로가기

Houdini/Houdini1_Rigidbody

RIGID BODY_01 리지드바디를 들어가며 & PACK 이해하기 - Ep01


Rigid Body

  • 강체
  • 딱딱한 물체의 물리적 작용에 대한 이야기
  • ex) 오브젝트의 낙하와 충돌, 힌지의 열림과 닫힘, 부러짐, 충돌에 의한 물체의 찌그러짐, 건물의 붕괴, 파괴 등

Pack

  • bullet solver를 가지고 물체의 충돌을 일으키기 위해서는 반드시 pack에 대한 개념을 알아야 한다.

 

https://www.sidefx.com/docs/houdini/nodes/sop/pack.html

 

Pack

 

www.sidefx.com

 

우리는 일상생활에서도 pack에 대한 개념을 사용하고 있다.

  • 대표적으로 파일압축, 여러사람 첨부해서 메일 보내기, 스트리밍 서비스 등

 

pack의 두가지 역할

  • 하나의 자료로 압축
  • 컴퓨터 어디엔가 자료를 저장

어떠한 노드의 결과로 우리가 만들어낸 나무가 있다.

이 자료는 나뭇가지, 잎사귀, 뿌리 등 모든 모델링 데이터를 포함하고 있고, uv 자료 및 수많은 attribute와 group들을 가지고 있다.

이 때 pack을 활용해서 하나의 꾸러미로 묶을 예정이다.(마치 여러 파일을 zip 파일로 묶는것과 비슷하다.)

이렇게 압축된 파일은 메모리에 저장된다.

 

pack의 결과로 얻게 되는 것은 껍데기, 가상의 원본을 얻게 된다.

가상의 원본 상태에서는 데이터의 디테일한 부분(ex. 나뭇가지, 잎사귀 등)을 바꿀수는 없다. pack 된 상태는 메모리에 저장된 것을 불러서 볼 뿐이다.

데이터의 디테일한 부분을 수정하고 싶다면, pack된 데이터를 다시 풀어서 수정해줘야한다.

 

copy to point로 pack된 데이터를 각 포인트에 복사해준다고 했을 때, 각각의 포인트들이 가상의 원본(pack 된 데이터)을 복제했고, 메모리에 있는 자료를 불러오는 과정을 인스턴싱(instancing)이라고 이해하면 된다.

 

동일한 결과물을 복제할 때 메모리 효율을 극대화하는 방법으로써 pack을 사용한다.


위의 이미지는 pack을 이용하지 않은 결과이다.

뷰포트 상에서의 출력을 위해 원본을 위와같이 복사해서 배치하게 되면 2.1GB라는 많은 메모리를 요구하게 된다.

 

이것을 각각 packing 한 다음에 배치하게 되면 어떻게 될까?

위의 이미지는 pack을 적용한 결과이다.

원본을 사용했을 때보다 사용용량의 효율 측면에서 매우 뛰어나다.

가상의 원본이 활용되고 있고, 가상의 원본들은 어떠한 실제의 원본을 불러오는 것 뿐이라는 것이다.

 


pack을 적용하면 packed geo 하나로 묶이게 된다.

pack 이전의 데이터
pack을 적용한 결과

pack 적용 전의 box를 copy stamp 노드를 사용해서 1000개를 복사해준 결과이다.

메모리 사용량은 약 650MB 정도 된다.

이번에는 pack이 적용된 box를 copy stamp 노드를 사용하여 1000개를 복사한 결과이다.

메모리 사용량이 pack 이전의 데이터 복사와는 다르게 약 1.3MB만 사용되었다.

 

메모리 효율 측면에서 pack이 얼마나 유용한지 확인해보았다.


이번에는 압축 / 압축 해제의 측면에서 살펴보자.

 

pack

압축한다.

unpack

pack으로 압축된 내용을 해제한다.

 

pack이 두번 된다면 어떻게 될까?(마치 zip 파일 안에 또 다른 zip 파일이 있는 것 처럼)

crag를 불러오면 이미 pack된 데이터임을 확인할 수 있다.

crag에 한번 더 pack을 적용한 결과이다. Packed Geos 1 로 표현되고 있다.(하나의 zip 파일 안에 67개의 zip 파일이 들어있는 것이다.)

 

unpack을 해보자.


pack된 지오메트리의 사이즈가 변경된다면 어떻게 될까?

box를 pack해주고, copy to points 노드를 사용해서 각각의 포인트에 가상의 원본을 복사해줬다.

중간에 attribute wrangle을 사용해서 @pscale에 변화를 줬다.

현재 박스는 전부 pack된 상태이다.

이제 위의 결과를 unpack해준다면?

변경된 사이즈가 그대로 유지되는것을 볼 수 있다.

pack된 데이터의 사이즈를 변경해주면, unpack을 했을 경우, 사이즈 변경 전의 원본을 반환하는 것이 아니고, 사이즈가 변경된 원본을 반환받는다.

 


바로 다음 강의로 이어가보자.

pack / unpack을 신나게 다뤄볼 것이다.