Rigid Body 시뮬레이션에 사용해볼 의자 만들기를 해봅시다 :)
원점을 기준으로 의자 시트 만들기
의자의 다리의 위치가 될 좌표로 cx, cz를 잡고, 의자 시트의 두께로 cy를 사용
- 이때 cy는 원점에서의 좌표이기 때문에 실제 의자 시트의 두께는 cy x 2 가 된다.
- 베이스 박스를 만들어주고(가로 / 세로의 길이가 cx, cz가 되는) 그 박스의 모서리에서 다리의 두께만큼 더 밖으로 이동해서 의자 시트의 크기가 될 수 있도록 작업을 진행한다.
의자 시트를 만들기 위해 8개의 포인트를 정해보자.
포인트 하나의 위치를 구해주면, 다른 포인트들의 좌표를 계산하기가 굉장히 편해진다.
ex) 초록색 포인트는 원점, 빨간색 포인트의 좌표는 {cx, -cy, cz}일 때,
- 파란색 포인트의 좌표는 빨간 포인트에 대해 y축 대칭이므로, 빨간 포인트의 좌표에 {1, -1, 1}을 곱해주면 좌표를 얻을 수 있다.
- 각 포인트들이 원점을 기준으로 대칭이기 때문에, x축 대칭인 경우 {-1, 1, 1}을, z축 대칭인 경우 {1, 1, -1}을 곱해줌으로써 좌표를 쉽게 얻어낼 수 있다.
attribute copy로 박스에 포인트의 위치정보를 전달해줄 것이기 때문에, 처음부터 포인트를 생성할 때 순서를 고려해주는 것이 좋다.
a01 포인트의 위치를 잡아주고, addpoint function으로 포인트를 추가해줬다.
좌표축을 고려해서 포인트를 쌓아나가보자.(다음에 생성할 포인트를 좌표축에 맞춰서 대칭으로 곱해준다.)
Attribute Wrangle(base) 노드에서 cx, cy, cz를 조절해주는 것으로 base box의 가로 / 세로 / 높이를 조절해줄 수 있다.
의자 다리 두께 표현을 위해 th 값을 더해줘보자.
- y에는 더해주지 않고, x와 z 좌표에 대해 a01의 좌표에 th 값을 더해줬다.
다리를 만들어주자.
- 다리가 붙게 될 포인트는 base box의 아래쪽 포인트들이 될 것이다.
- 다리를 표현하기 위한 새로운 포인트 8개가 필요하다.
- 그리고 다리의 높이를 표현하기 위한 새로운 변수가 필요하다.(leg height > lh)
- 각 모서리마다 작업을 진행할 것이므로, for each point 블럭을 활용해서 작업을 진행한다.
이제 등받이를 만들어주자.
- 다리 만드는 작업과 매우 유사하다.
- 새로운 변수가 필요하다.(back height = bh)
이제 등받이를 만들 차례이다.
- 두개의 등받이 기둥이 마주보는 면에 대해, 가로의 절반에 해당하는 위치를 잡아주고, carve로 원하는 지점에 포인트를 위치시켜서 등받이를 만들어준다.
- 위쪽 포인트 두개, 아래쪽 포인트 두개를 떼어내주고, bound를 사용해서 두 점의 중심을 구해준다.
- 등받이의 두께를 위한 새로운 변수가 필요하다.
이렇게 찾아준 point는 서로 이어서 선을 만들고, carve를 연결해준다.
carve의 first U를 활용해서 등받이의 높이를 조절해줄 수 있게 된다.
carve에 blast를 달아서 0번 포인트를 떼어준 뒤, 포인트에 대해 새로운 점 8개(각 기둥마다 4개씩)를 만들어주고, attribute copy로 box를 만들어준다.
chair_info 노드에 parameter를 추가해서 의자의 세팅을 하나의 노드에서 조절할 수 있도록 해준다.
이렇게 rigid body 시뮬레이션을 위한 의자를 만들어보았다.