Часто в процессе моделирования встречается задача заполнить чем-нибудь определенный объем. Например это может быть банка с зернами кофе, сахарница с кусками сахара, мешочек с драгоценными камнями, коробка с винтами и гайками, ваза с конфетами, вариантов очень много.
Все это можно сделать и вручную. Создавать копии заполняющих объектов и располагать друг над другом в случайном порядке. Однако при таком подходе слишком много сил и времени уходит на постоянные проверки, чтобы объекты не пересекались друг с другом и со стенками заполняемого объекта. Чтобы облегчить себе работу, можно воспользоваться инструментом Rigid Body – аналогом твердотельной симуляции в Blender.
Для начала у нас есть банка и несколько предметов, которыми ее нужно заполнить:
- Расположить предметы над горлышком банки так, чтобы они не пересекались.
- Размножить их на количество, нужное для заполнения:
- Добавить к объекту модификатор Array.
- Установить:
- Relative Offset
- X = 0
- Z = 4 – подобрать значение, чтобы объект можно было повернуть без пересечений со своими копиями и другими объектами.
- Подобрать количество, необходимое для заполнения требуемого объема:
- Count = 40
- Relative Offset
- Установить:
- Добавить к объекту модификатор Array.
- Применить модификатор Array у всех объектов.
После применения модификатора Array объекты слиты в один меш. Нужно разделить их по отдельным мешам: в режиме редактирования разбить по замкнутым контурам.
- Для каждого набора объектов:
- tab
- p – By Loose Parts
- tab
Центр масс для каждого из разделенных объектов остался на старом месте – на первом объекте, с которого начинался массив. Расположим центры масс объектов по их геометрическому центру.
- Выделить все засыпаемые объекты.
- В T-панели
- Tool
- Transform
- Set Origin
- Установить в Origin To Center Of Mass
- Set Origin
- Transform
- Tool
- В T-панели
Для придания начальной хаотичности немного повернем засыпаемые объекты:
- Все засыпаемые объекты должны быть выделены.
- В меню выбрать:
- Object – Transform – Randomize Transform
- В T-панели установить диапазон внутри которого объект будет повернут на случайный угол:
- Randomize Rotation
- X = 90
- Y = 90
- Z = 90
- Randomize Rotation
- В меню выбрать:
Осталось придать всем объектом сцены “твердотельность”. Во время симуляции засыпаемые объекты будут падать в банку, поэтому включим для них статус активного твердого тела. Банка не движется и служит препятствием для активных тел – придадим ей статус пассивного твердого тела.
- Для засыпаемых объектов:
- Все они должны быть выделены.
- В T-панели
- Physics
- Rigid Body Tools
- Add/Remove
- Add Active
- Add/Remove
- Rigid Body Tools
- Physics
- Выделить банку
- В T-панели
- Physics
- Rigid Body Tools
- Add/Remove
- Add Passive
- Add/Remove
- Rigid Body Tools
- Physics
- В T-панели
Все готово, можно проводить симуляцию.
- Открыть окно TimeLine и запустить проигрывание.
Если объекты, банка и засыпаемые в нее предметы, слишком маленькие (измеряются сантиметрами), симуляция может пройти с ошибками – засыпаемые объекты будут проваливаться сквозь стенки банки. В этом случае нужно увеличить все объекты раз в 10, провести симуляцию, и уменьшить их обратно в 10 раз.
После завершения симуляции, все объекты окажутся засыпаны в банку. Для более равномерного перемешивания можно варьировать расположение и углы поворота объектов над горлышком банки.
Для того, чтобы отвязаться от временной линии и сохранить положение объектов после симуляции нужно:
- В T-панели
- Physics
- Rigid Body Tools
- нажать Apply Transformation
- Rigid Body Tools
- Physics
если у вас при заполнении объекты ударяются о невидимую стену над банкой (или что там у вас) то в настройках физики этого объекта измените коллизию physics properties > rigid body > collisions > shape > mesh (актуально для версии 3.0)
Спасибо за дополнение!