이번 튜토리얼에서는 Blender의 강체(Rigid Body) 시뮬레이션을 사용하여 컨테이너를 물체로 채우는 방법을 살펴보겠습니다.



영상 자막 텍스트

안녕하세요, 여러분! 이번 튜토리얼에서는 Blender의 강체(Rigid Body) 시뮬레이션을 사용하여 컨테이너를 물체로 채우는 방법을 살펴보겠습니다.

실용적인 예시로, 제가 만든 Pharma 캡슐 알약과 병이라는 에셋을 사용할 것입니다. 하지만 이 특정 모델이 없어도 괜찮습니다. 여러분은 이 모델 없이도 배울 수 있습니다.

여기서 중요한 것은 이 기술을 이해하는 것입니다. 이 방법은 물체를 무작위로 놓되 그럴듯하게 배치하는 데 유용하며, 컨테이너 안뿐만 아니라 표면 위에도 적용할 수 있습니다. 기본 원리는 동일하며, 이를 알약, 사탕, 금화 또는 다른 어떤 물체에도 적용할 수 있습니다!

제가 사용하고 있는 3D 모델은 사실 서로 관련된 여러 개의 객체로 이루어져 있습니다.

뚜껑은 필요 없으므로 제가 하는 것처럼 숨기거나 제거할 수 있습니다.

우리는 세 개의 객체를 가지고 있습니다: 컨테이너, 라벨, 그리고 모든 알약을 하나의 객체로 합친 물체입니다. 컨테이너와 라벨을 임시로 숨겨서 더 자세히 살펴볼 수 있습니다.

시뮬레이션을 만들기 위해, 알약 하나를 분리하여 강체(Rigid Body) 물리적 컴포넌트를 적용하고, 그런 다음 그 알약 프로토타입을 복제하여 낙하 시뮬레이션을 시작해야 합니다.

Pills 객체가 선택된 상태에서 Edit 모드로 전환한 후, 마우스 커서를 알약의 버텍스 위에 놓고 L을 눌러서 Linked, 즉 마우스 커서 근처의 요소와 연결된 모든 요소를 선택합니다.

그런 다음, CTRL I로 선택을 반전시키고 XVertices를 사용하여 나머지 알약을 삭제합니다.

Object 모드로 돌아가면, Pills 객체의 원점이 유일하게 남은 알약의 중앙에 위치하지 않은 것을 확인할 수 있습니다. 이를 즉시 수정하기 위해 우클릭 후 "Set Origin"에서 "Origin to Geometry"를 선택합니다.

또한 스케일 변환이 적용되었는지 확인합니다. 확인하기 쉬운데, Transform 패널에서 객체의 Scale XYZ 값이 모두 1로 설정되어 있기 때문입니다. 만약 그렇지 않다면, CTRL A를 눌러 "Apply Scale"을 적용해야 합니다.

이제 컨테이너를 다시 보이도록 만들어, 알약이 컨테이너의 입구를 통과할 수 있도록 위치해 있는지 확인하려고 합니다. 저는 알약을 위에서 컨테이너 안으로 떨어뜨릴 것입니다.

사실, 현재 위치에서는 알약이 컨테이너 안으로 떨어질 수 없으므로, 탑 뷰에서 알약이 입구 안에 위치하도록 수동으로 이동시킵니다.

알약과 컨테이너를 연결하는 점선은 알약이 컨테이너의 자식 객체임을 나타냅니다. 이는 알약의 복제와 물리 시뮬레이션에 문제가 될 수 있으므로, 알약의 위치와 다른 특성은 유지한 채 두 객체의 연결을 해제합니다. 이를 위해 알약을 선택하고 ALT P를 눌러 "Clear Parent" 메뉴에서 "Clear and keep transformation"을 선택합니다.

이제 알약은 별도의 객체가 되었습니다.

복제본을 만들기 전에, 알약에 Rigid Body 시뮬레이션 컴포넌트를 추가해야 나중에 만들 복제본에도 이미 적용된 상태가 됩니다.

Rigid Body를 추가하려면, Physics Properties 패널에서 "Rigid Body"를 클릭하기만 하면 됩니다. 방금 보여드린 것처럼요.

새로 생성된 Rigid Body는 기본적으로 Active 유형으로 설정되는데, 중력에 반응해야 하므로 이것이 적절합니다.

이 시점에서 물리 시뮬레이션을 관찰하려면, 타임라인에서 애니메이션 프레임을 1로 설정하고 Play를 누릅니다. 알약은 떨어지지만 컨테이너를 통과합니다. 이는 아직 알약이 씬의 물리 시뮬레이션에 포함되지 않았기 때문입니다.

컨테이너가 알약을 받도록 하기 위해, 알약에 했던 것처럼 컨테이너에도 Rigid Body 컴포넌트를 추가해야 합니다. 하지만 이번에는 즉시 타입을 Passive로 변경해야 하는데, 이는 컨테이너가 떨어지지 않고 다른 객체들과 상호작용만 해야 하기 때문입니다.

방금 변경한 사항으로 물리 시뮬레이션을 시작하려면, 타임라인에서 애니메이션의 첫 번째 프레임으로 돌아가서 Play 버튼을 다시 클릭해야 합니다.

알약이 떨어지며 컨테이너와 상호작용하는 것을 바로 확인할 수 있지만, 예상하지 못한 방식으로 이루어집니다. 알약이 입구에 걸려 공중에 떠 있는 것처럼 보이는데, 마치 입구가 닫혀 있는 것처럼 말이죠.

이것은 BlenderRigid Body 패널에서 컨테이너의 충돌을 계산하는 데 사용하는 기본 모양인 Convex Hull 때문입니다. Convex Hull은 물리 시뮬레이션 엔진의 계산을 단순화하기 위해 사용하는 닫힌 상자 형태입니다.

이 문제를 해결하기 위해, Shape 매개변수의 값을 Convex Hull에서 Mesh로 변경합니다. 이제 Blender는 충돌 모양을 컨테이너의 실제 모양에 가깝게 근사할 것입니다.

예상할 수 있듯이, 이 모드는 리소스를 많이 소비하므로 적절히 사용해야 합니다. 이 경우 씬이 복잡하지 않으므로 괜찮지만, 다른 상황에서는 Rigid BodyShape 메뉴에서 사용할 다른 옵션들을 평가해야 할 수도 있습니다.

알약에 대해서는, 예를 들어 Capsule 모양을 선택할 수 있는데, 이는 알약을 매우 잘 근사화합니다. 어쨌든, 여기서는 기본 옵션인 Convex Hull을 그대로 두겠습니다.

이제 타임라인의 첫 번째 프레임으로 돌아가서 Play를 클릭하고 결과를 확인해봅시다. 이번에는 알약이 컨테이너 안으로 떨어져 바닥에 몇 번 튀고 멈춥니다.

주목할 점은 알약이 컨테이너의 바닥에 닿을 때 시뮬레이션이 느려지기 시작한다는 것입니다. 이것은 Blender가 충돌을 계산하고 있기 때문입니다.

다른 알약들을 추가하면, 당연히 더 많은 계산이 필요하기 때문에 시뮬레이션 속도가 훨씬 더 느려질 것입니다.

시뮬레이션의 첫 번째 프레임으로 돌아갑시다.

우리는 컨테이너 안으로 떨어질 알약들을 여러 개 쌓아 놓고, Blender가 충돌 계산을 통해 컨테이너 벽과 알약들 사이의 충돌을 처리하여 모든 알약이 최종 위치에 도달하게 하고자 합니다.

여러 개의 알약을 복제하는 것은 사실 매우 간단합니다. 알약에 Array 모디파이어를 추가하고, X Y 축의 상대 오프셋을 0으로 설정한 다음, Z 축의 상대 오프셋을 2로 설정하기만 하면 됩니다.

컨테이너 안에 얼마나 많은 알약이 들어갈지 전혀 알 수 없습니다. 영상 초반에 세어보지 않았기 때문에, 우선 40개의 알약으로 시도해보고, Array 모디파이어의 Count 매개변수에 이 숫자를 입력합니다.

지금은 시뮬레이션을 적용할 수 없습니다. 왜냐하면 아직 모디파이어가 적용되지 않았기 때문입니다. 그래서 모든 알약은 여전히 인스턴스이고, 개별 객체가 아닙니다.

따라서, 모디파이어 패널에서 "Apply"를 클릭하여 모디파이어를 적용합니다.

하지만 여전히 알약들은 하나의 객체로 묶여 있습니다. 이들을 독립된 객체로 만들어야 합니다.

이를 위해, Edit 모드로 들어가서 모든 지오메트리를 선택한 후 P를 눌러서 화면에 나타나는 Separate 메뉴에서 "By loose parts"를 선택합니다.

이렇게 하면, 툴팁에서 언급한 것처럼, 각 개별 지오메트리, 즉 각 ""마다 하나의 객체를 얻게 됩니다.

Object 모드로 돌아가서 Outliner에서도 확인할 수 있듯이, 이제 새로 생성된 알약들이 각각 별개의 객체가 되었음을 알 수 있습니다.

이 모든 객체는 우리가 첫 번째 알약에 설정했던 것과 동일한 Rigid Body 컴포넌트가 설정되어 있으며, 첫 번째 알약이 모든 다른 알약들의 프로토타입 역할을 했습니다.

그러나 각 복제본의 Origin이 여전히 첫 번째 알약의 Origin 위치에 있다는 것도 확인할 수 있습니다!

이 문제는 쉽게 해결할 수 있습니다. 복제본 중 하나를 선택하여 활성 객체로 만든 다음, B 키와 마우스를 사용하여 다른 복제본을 모두 선택하고, 선택된 객체를 우클릭하여 화면에 나타나는 Object Context 메뉴에서 "Set Origin", "Origin to Geometry"를 선택합니다.

이제 모든 알약이 개별 객체가 되었으며, Origin도 올바르게 설정되었고, Rigid Body 컴포넌트도 모두 정확하게 적용되었습니다.

그런 다음 타임라인의 첫 번째 프레임으로 이동하여 Play 버튼을 눌러 시뮬레이션을 시작할 수 있습니다.

이 경우, 시뮬레이션은 몇 분이 걸릴 것입니다.

사실, 40개의 알약은 이 컨테이너에 너무 적었을지도 모르겠네요!

어쨌든, 애니메이션 재생을 중간에 중단하면서 알약들의 배치를 확인해 볼 수 있습니다.

애니메이션의 마지막 프레임으로 이동한 다음, 컨테이너와 라벨을 일시적으로 숨겨봅시다. 알약들은 빈 공간이나 교차 없이 그럴듯한 안정된 위치에 있으며, 애니메이션의 프레임은 좋은 결과를 얻기에 충분합니다.

애니메이션은 흥미롭지만, 튜토리얼은 아직 완료되지 않았습니다. 만약 우리가 물리 시뮬레이션의 결과, 즉 애니메이션의 마지막 프레임에 있는 것처럼 알약들이 컨테이너 안에 배치된 상태를 내보내고 싶다면, 물리 시뮬레이션을 영구적으로 적용해야 할 것입니다.

알약의 Physics 탭에서 Rigid Body 컴포넌트를 제거하는 작업은 절대로 해서는 안 되며, 알약들을 서로 합치거나 컨테이너와 결합해서도 안 됩니다. 이러한 작업은 물리 시뮬레이션을 잃게 만들어, 다시 처음부터 시작해야 할 것입니다!

대신, 우리가 최종적으로 만들고 싶은 프레임, 예를 들어 마지막 프레임에 위치한 후, 알약 하나를 선택하여 선택 내에 적어도 하나의 활성 객체를 만든 후 모든 알약을 선택해야 합니다. 이 선택은 B 키와 마우스를 사용하여 할 수 있습니다.

모든 알약이 선택된 상태에서, 그 중 하나가 활성 상태인 경우, Blender의 검색 상자에서 Apply Transformation을 찾아야 합니다. 제 경우에는 스페이스바를 눌러 검색 상자를 열 수 있으며, Rigid Body 섹션 아래의 옵션을 선택하여 Rigid Body 변환을 적용해야 합니다.

아직 끝나지 않았습니다. 검색 상자를 다시 열고 "Remove Rigid Body"를 입력하기 시작합니다. 이제 선택된 모든 알약에서 Rigid Body 컴포넌트를 제거하려고 합니다.

"Object", "Rigid Body", "Remove" 작업을 선택해야 합니다.

이제 시뮬레이션이 영구적으로 적용되었습니다. 타임라인의 여러 프레임을 이동해보면 알약들이 더 이상 움직이지 않고, Rigid Body 물리적 컴포넌트도 없어졌음을 확인할 수 있습니다.

이제 이 객체를 다른 장면에서 사용할 수 있도록 내보낼 수 있습니다.

알약들은 각각의 기하학적 중심에 Origin을 가진 개별 메쉬이므로, 그대로 둘지, 그룹화하거나, 부모 객체로 설정하거나, 심지어 함께 병합할지는 여러분의 필요에 따라 결정하면 됩니다.

이번 튜토리얼은 여기까지입니다! 곧 다시 만나요!

🇺🇸 Sitemap - 🇮🇹 Sitemap - 🇪🇸 Mapa del sitio - 🇧🇷 Mapa do site - 🇫🇷 Plan du site - 🇩🇪 Sitemap - 🇷🇺 Карта сайта - 🇨🇳 网站地图 - 🇯🇵 サイトマップ - 🇰🇷 사이트맵


이 사이트는 제 작업 일부를 소개하기 위한 목적만을 가지고 있으며, 어떠한 홍보 목적도 포함하지 않습니다. 현재 맞춤 작업, 컨설팅 또는 기타 어떤 형태의 업무 협업에 대한 요청도 받고 있지 않으며, 이에 대해 응답하지 않으니 양해 부탁드립니다.


확장된 개인정보 및 쿠키 사용 정책