이 튜토리얼에서는 Rigid Body와 Hinge Constraint를 설정하여 뉴턴의 진자 애니메이션을 만드는 방법을 살펴보겠습니다.
영상 자막 텍스트
이 튜토리얼에서는 Rigid Body와 Hinge Constraint를 설정하여 뉴턴의 진자 애니메이션을 만드는 방법을 살펴보겠습니다. 이 튜토리얼은 Blender 버전 3.6을 사용하여 제작되었습니다.
시작하기 위해, 기본 구조와 여러 개의 구체 및 각각의 지지대가 포함된 미리 제작된 3D 모델을 사용하고 있습니다.
이 3D 모델에서 구체와 지지대는 회전축이 될 위치에 Origin이 올바르게 설정되어 있지만, 모두 구조물에 parent 되어 있습니다.
이는 불필요하며 실제로는 물리 시뮬레이션에 문제를 일으킬 수 있습니다.
따라서 첫 번째 단계로, 모든 오브젝트를 선택한 뒤 ALT P 단축키로 parenting을 해제합니다. 그런 다음 화면에 나타나는 Separate 메뉴에서 "Clear Parent and Keep Transformation" 옵션을 선택합니다.
사실 모든 구체에 반복적으로 수행할 작업이 필요하므로, 하나를 제외한 나머지 구체는 모두 삭제해도 됩니다. 이렇게 하면 남은 하나의 구체에만 작업을 수행하여 미리 설정된 복사본을 만들 수 있습니다.

이제 두 개의 오브젝트만 남았습니다. 베이스와 첫 번째 구체 및 지지대입니다.
베이스는 물리 시뮬레이션에 참여하지 않으므로 무시해도 됩니다.
구체의 Origin은 상단의 회전축 위치에 있습니다.
이는 매우 유용합니다. 왜냐하면 바로 그 위치, 즉 구체의 세로축 위에 Hinge Constraint를 사용하는 데 필요한 보조 오브젝트를 추가해야 하기 때문입니다.

새 오브젝트를 씬에 추가하면 그 오브젝트는 3D Cursor 위치에 Origin을 가지게 됩니다. 따라서 SHIFT S 단축키를 사용하여 3D Cursor를 구체의 Origin 위치로 이동한 뒤, "Cursor to Selected" 옵션을 선택합니다.
이제 Hinge Constraint를 적용하기 위한 보조 오브젝트가 필요합니다. 어떤 오브젝트든 사용할 수 있으므로 간단한 Cube를 추가하고, 잘 보이도록 크기를 조정합니다.
크기 조정 후 CTRL A 단축키를 사용하여 Scale 변환을 적용합니다. 이 작업은 여기서는 꼭 필요하지 않을 수도 있지만, 좋은 습관으로 익혀두는 것이 좋습니다.

Cube를 선택한 상태에서 Properties Window의 Physics 탭을 열고 Rigid Body 컴포넌트를 추가한 뒤 Type을 Passive로 설정합니다.

이렇게 하면 이 오브젝트는 Rigid Body 시뮬레이션에는 참여하지만 힘에는 반응하지 않습니다. 앞서 언급했듯이, 이 오브젝트는 구체의 회전을 제한하는 Constraint 역할을 하게 됩니다.
다음으로 구체에도 Rigid Body를 추가하지만, 이번에는 Type을 Active로 변경합니다. 구체는 중력과 다른 힘에 따라 움직여야 하기 때문입니다. 기본 질량 값은 너무 작으므로 100그램으로 설정합니다.

또 하나 중요한 수정 사항은 구체의 Collision Shape입니다. 이 값은 기본적으로 Convex Hull로 설정되어 있는데, 생성된 Hull이 다른 오브젝트와 상호작용할 때 문제를 일으킬 수 있습니다.
따라서 모드를 Mesh로 변경합니다. 이 옵션은 계산량이 더 많지만 훨씬 더 정확한 결과를 제공합니다.

Margin 파라미터의 Tooltip에는 0보다 큰 값을 유지하라고 되어 있습니다. 하지만 여러 번 테스트한 결과, 이 경우에는 값을 0으로 설정하는 것이 더 좋았습니다. 그래야 시뮬레이션 시작 시 서로 매우 가까이 있지만 정지해 있는 오브젝트들 사이에서 충돌이 잘못 감지되는 현상을 막을 수 있습니다.


또한 Bounciness 파라미터는 0.9처럼 매우 높은 값으로 설정해야 합니다. 이렇게 하면 구체들이 매우 잘 튕기며 거의 완전 탄성 충돌에 가까운 움직임을 하게 됩니다.
Dynamics 섹션에는 시간에 따라 속도나 각운동량의 감소를 제어하는 Damping 관련 파라미터들도 있습니다. 이 값들은 나중에 모든 구체를 사용해 테스트할 때 다시 살펴보겠습니다.
계속 진행하기 전에 씬을 새 파일로 저장합시다.
튜토리얼 진행 중에는 Play를 누르거나 Bake를 시작하기 전에 항상 프로젝트를 저장하라고 권장하겠습니다. 이 시뮬레이션에서는 저장하지 않은 상태로 Play를 눌렀을 때 Blender가 여러 번 충돌했기 때문입니다.
지금 상태에서 애니메이션을 시작하면 구체는 아래로 떨어질 것입니다.
이는 사실 올바른 동작입니다. 아직 Hinge Constraint를 생성하지 않았기 때문에 구체가 앞서 추가한 Cube에 고정되어 있지 않기 때문입니다.
하지만 그 전에 한 가지 더 수정해야 합니다. 구체의 중심 질량을 실제 구체 내부로 이동해야 합니다. 이를 위해 Edit Mode에서 SHIFT S를 사용해 3D Cursor를 구체 중심으로 이동한 뒤, Object Mode에서 마우스 오른쪽 버튼을 눌러 "Origin to 3D Cursor"를 선택합니다.

이제 구체와 Cube가 세로 방향으로 완벽하게 정렬되었습니다.
렌더링 전에는 Cube를 숨길 수 있지만, 지금은 보이는 상태로 두는 것이 편리합니다. Cube를 선택하고 Hinge Constraint를 생성해봅시다.
Rigid Body Constraint는 Rigid Body 컴포넌트와 마찬가지로 Properties Editor의 Physics 탭에서 추가할 수 있습니다.
가장 먼저 해야 할 일은 Constraint Type을 Fixed에서 Hinge로 변경하는 것입니다.

Objects 섹션에는 씬 안의 두 오브젝트를 지정하는 필드가 있습니다. Constraint는 Second라는 이름의 오브젝트를 움직이는 대상으로 사용하고, First라는 이름의 오브젝트를 고정된 대상으로 사용하여 연결합니다.
이 프로젝트에서는 Cube를 First로, 구체를 Second로 설정하면 됩니다.

하지만 아직 끝난 것은 아닙니다. Hinge Constraint에서는 Passive Rigid Body 오브젝트의 로컬 Z축을 기준으로 회전이 이루어집니다.
기본적으로 Hinge는 Point Constraint와 비슷하지만 회전을 특정 축으로 제한합니다. 이 프로젝트에서는 회전이 씬의 글로벌 X축을 기준으로 이루어져야 하며, 현재 이는 Cube의 로컬 X축과 일치합니다. 따라서 Cube를 Y축 기준으로 90도 회전시켜야 합니다. 로컬 축을 표시하기 위해 저는 3D View의 Transform Orientation을 Local로 변경했습니다.

이제 R Y 90을 눌러 회전을 수행합니다.
프로젝트를 저장한 뒤 시뮬레이션을 시작해보면… 아무 일도 일어나지 않습니다!
구체의 중심 질량은 올바르게 내부에 설정되어 있지만, 구체와 Constraint가 완벽하게 수직 정렬 상태라 균형을 이루고 있기 때문입니다.
따라서 구체에 초기 회전을 조금 주어야 하며, 이후의 움직임은 물리가 자동으로 처리하게 됩니다.
이제 구체의 Origin이 내부에 있으므로, Cube가 위치한 지점을 기준으로 구체와 지지대를 회전시킬 수 있다면 매우 편리할 것입니다.
이를 위해 씬에 Empty 오브젝트를 추가하고 즉시 이름을 ROTATION으로 변경합니다. 그런 다음 구체를 선택하고, 이어서 ROTATION Empty를 선택하여 이 순서대로 다중 선택합니다. 마지막으로 CTRL P를 눌러 parent-child 관계를 생성하면 구체가 ROTATION Empty의 자식이 됩니다.

이렇게 하면 제어용 Empty를 회전시켜 첫 번째 구체에 초기 회전을 줄 수 있습니다. 이제 프로젝트를 저장하고 시뮬레이션을 시작해보세요. 이번에는 원하는 대로 구체가 움직일 것입니다.

다른 구체들을 만드는 작업은 사실 매우 간단합니다. 첫 번째 구체와 Rigid Body Constraint가 설정된 Cube를 복사하면 되기 때문입니다.
ROTATION Empty를 다시 수직 위치로 되돌린 뒤, Cube와 구체를 함께 선택하고 SHIFT D Y와 마우스 이동으로 복제하여 두 번째 구체를 첫 번째 구체 바로 옆에 배치합니다.

SHIFT D Y를 사용한 이유는 Y축 방향 이동 제한과 복제를 동시에 수행하기 위해서입니다. 즉 Blender는 이 두 작업을 하나의 작업으로 인식합니다.
따라서 이후에는 SHIFT R을 눌러 마지막 작업 반복 기능으로 나머지 복사본들을 완벽하게 배치할 수 있습니다.
복사본이 올바르게 배치되었다면, 지금 프로젝트를 저장하고 시뮬레이션을 시작했을 때 구체들은 제자리에서 완전히 정지한 상태를 유지할 것입니다.
이는 Rigid Body 시뮬레이터가 잘못된 충돌을 감지하지 않고 있다는 의미입니다.
단 하나의 문제는 모든 복사본이 첫 번째 구체의 초기 회전을 제어하는 ROTATION Empty에 parent 되어 있다는 점입니다.
하지만 이 문제도 쉽게 해결할 수 있습니다. 모든 복사본을 선택하고 ALT P 단축키로 Empty와의 parent 관계를 해제한 뒤 "Clear Parent and Keep Transformation"을 선택하면 됩니다.

첫 번째 구체를 제어하는 Empty를 회전시키고 프로젝트를 저장한 뒤 시뮬레이션을 시작하여 결과를 확인합니다.
결과가 만족스럽다면 다음 단계는 Rigid Body Constraint용 Cube들을 씬과 최종 렌더링에서 숨기고 렌더링 작업으로 넘어가는 것입니다.
만약 중앙의 구체들이 너무 많이 움직인다면 초기 상태에서 서로 더 가깝게 배치해보세요. 단, Constraint가 있는 Cube와 함께 이동해야 한다는 점을 기억하세요. 그렇지 않으면 구체들이 각자 초기 회전을 가진 상태로 시작하게 됩니다.
시뮬레이션 속도를 높이거나 구체의 흔들림을 더 크게 만들고 싶다면 몇 가지 파라미터를 조정할 수 있습니다. 선택된 모든 구체의 값을 한 번에 변경하려면 ALT 키를 누른 상태에서 변경할 파라미터를 마우스로 클릭하면 됩니다.
구체의 경우에는 Bounciness 값을 높이고, Rigid Body 탭의 Dynamics 섹션에 있는 선형 이동과 회전에 대한 두 Damping 값을 크게 줄이는 것을 추천합니다.

하지만 Friction 값을 낮추는 것은 권장하지 않습니다. 움직이지 않아야 하는 구체들에 원하지 않는 움직임이 발생할 수 있기 때문입니다.

Properties Editor의 Scene 탭에는 Speed 파라미터가 있으며, 이를 사용해 전체 물리 시뮬레이션 속도를 높일 수 있습니다.
같은 탭에는 Substeps와 Solver Iterations 파라미터도 있습니다.
물리 시뮬레이션에서 오류가 보이는 경우에만 이 값을 높이는 것을 추천합니다.
이 파라미터들은 Blender가 더 많은 계산을 수행하도록 하여 시뮬레이션 정확도를 높여주지만, 그만큼 시뮬레이션 시간도 증가하게 됩니다.
자, 여기까지입니다! 이 튜토리얼이 마음에 들었기를 바랍니다! 다음에 또 만나요!