<< к оглавлению...

Груда булыжников

В этом уроке рассматривается как сделать груду булыжников. Я использовал Reactor, но далее есть некоторые соображения, как это можно сделать другими способами, и возможно, в будущем я сделаю мини-урок на основе этих соображений.

Создание груды, используя Reactor.

1) Сначала я сделал несколько простых объектов, из которых будет состоять груда булыжников. Это простые кубики, (слегка “полигонально-деформированные”) с обычным материалом, имитирующим бетон. Если бы это был настоящий рабочий проект, я бы добавил больше деталей, но пока и этого будет достаточно, чтобы показать саму технику идеи. Также убедитесь, что точки опоры (pivots) расположены по центру объектов.

rubbles

2) Создаём простую плоскость для “поверхности земли”.

3) Используя функцию клонирования, располагаем все булыжники-обломки над землёй (чтобы сократить расход памяти, я использовал instance-копии). При этом убедитесь в том, что они не соприкасаются (точнее, не проходят сквозь друг друга). Также, попробуйте установить объекты в различные позиции, чтобы (будущая) гора из объектов получилась более неравномерной и разнообразной.

rubbles_stack

4) Теперь выполните произвольные вращение и масштабирование объектов. Чтобы это сделать, я использовал скрипт transformRandomizer, который можно найти здесь: http://www.neilblevins.com/soulburnscripts/soulburnscripts.htm. Поскольку опорные точки расположены по центру объектов, вы можете вращать их по всякому, используя этот скрипт (просто убедитесь, что в Main Toolbar-е используется режим "Use Pivot Point Center").

rubbles_stack_Reactor

5) Переходим в Create → Helpers → Reactor → RBCollection (в ранних версиях 3ds max см. пункт меню: reactor: Create Object: Rigid Body Collection) и добавляем все объекты.

6) Выбираем поверхность земли, идём в Utilities → Reactor → Properties, включаем Unyielding и Concave Mesh (выберите другую опцию, если ваша земная поверхность не идеально плоская).

7) Выберем все объекты-булыжники, идём в Utilities → Reactor → Properties, устанавливаем большое значение для массы, скажем 500 кг и значение “трение” (friction) установим = 0,9.

8) Во вкладке World настройте значение Col. Tolerance. Понижение этого значения означает, что расчёт столкновения объектов будет более точным, тем самым уменьшается возможность их взаимопроникновения. Для размера моей сцены, подошло значение равное 0,5.

9) Переходим во вкладку Reactor-а: Preview & Animation, нажимаем Preview In Window.

10) В открывшемся окне Reactor-а, нажмите Simulation → Play. Нажмите Pause, после того, как все объекты прекратят движение. Если какие-то из объектов-камней "вылетели" за пределы плоскости "земли": или увеличьте её размеры, или просто удалите их (после того, как закроете окно Reactor-а).

11) В окне Reactor-а выбираем: Max → Update Max.

12) Закрываем окно Reactor-а, так мы получаем груду камней.

13) И наконец, выполним фазу "уборки". Из-за некоторых ограничений в настройках Reactor-а, вы можете заметить, что некоторые из объектов-обломков немного парят над другими или над землёй. Проверка на пересечение (interpenetrating) должна устранить основную часть этой проблемы, но возможно, вам понадобится сдвинуть некоторые из объектов вручную, чтобы избавиться от явных случаев взаимопроникновения. И вот что получилось: милая, "простая и лёгкая" гора мусора.
Вот max-файл (max 8), которым можете воспользоватьсяв качестве примера.

Другие способы, которые можно попробовать...

1) Использовать Scatter Compound Object, чтобы разместить множество объектов-осколков на земле. При этом нужна некоторая степень произвольного (случайного) выделения граней объекта на котором будут располагаться обломки, чтобы у вас не было их явного равномерного распределения по поверхности. У этой техники 2 недостатка: объекты будут явно пересекаться и они не будут "складываться" поверх друг друга.

2) Воспользоваться утилитой Питера Ватье (Peter Watje) Scatter Utility вместо встроенного в max Scatter-а : http://www.maxplugins.de/max8.php?search=scatter&sort=Author.
Здесь преимущество в том, что у вас больше контроля над распределением, и возможность добавления неоднотипных геометрических фигур-объектов. Недостаток в том, что это не процедурный объект, поэтому после его создания, у вас не получится просто вернуться назад и перенастроить параметры.

3) Система частиц Pflow, этим способом вы можете распределить объекты по поверхности, используя bitmap-карты, что может быть весьма полезным для "быстрого" добавления особых видов осколков в специальных местах на большой поверхности. Для более подробной информации можете почитать мой урок: Замена Scatter-а на PFlow.

4) Использовать скрипт objectDropper : http://www.neilblevins.com/soulburnscripts/soulburnscripts.htm. Этот способ выполняет схожую с Reactor-ом работу, за исключением того, что здесь не будет учитываться взаимопроникновение объектов, и вы не сможете, скажем, сделать так, чтобы объекты отскакивали или слегка съезжали после того, как они ударятся о землю.

5) Использовать скрипт Advanced Painter : http://www.scriptspot.com/start.asp?p=main_scripts&Sort=Name&BrowseType=Search&SearchField=advanced+painter чтобы "рисовать объектами" на поверхности земли.

6) Использовать скрипт objectPainter : http://www.neilblevins.com/soulburnscripts/soulburnscripts.htm, который очень похож на Advanced Painter, но с немного большей функциональностью, и он чаще обновляется.

7) Использовать текстуру и материал смещения (displacement) для того, чтобы "дёшево и просто" создать вид чего-то разрушенного на земле. Также учитывайте, что все эти различные способы можно использовать совместно, так вы можете воспользоваться техникой, которая лучше остальных подходит для расположения/размещения нужного вам вида обломков. Например, бóльшую часть мелких камней сделать с помощью Scatter-а, затем, разместить несколько бóльших (на которых нужно сделать акцент) обломков, используя Reactor.


оригинал статьи : http://www.neilblevins.com/cg_education/piles_of_rubble/piles_of_rubble.htm
перевод и адаптация: Александр Ергашов /© 2009-2012/
<< к оглавлению...