Моделирование параметрического аквариума

Сегодня хочу рассказать о методе, с помощью которого можно создавать различные объекты с взаимозависимыми параметрами на примере аквариума, размеры которого можно менять.

Как это работает можно посмотреть в видео:

Как пришла идея:

- был комментарий от знакомого, что не хватает аквариумов лёгких на сайте;

- есть проблема, связанная с тем, что аквариумы готовые очень трудно подогнать под свой размер, т.к. типоразмеров у них очень много, и одним масштабированием не отделаешься, ведь там ещё разные предметы, рыбки, растения, пузырьки и т.п.

В итоге я решил сделать лёгкий аквариум, размеры которого можно задавать самостоятельно, а всё остальное будет достраиваться автоматически. К слову, эта модель не прошла модерацию (у модератора она не открылась), поэтому её можно взять у меня или сделать самостоятельно по этому уроку:

1. Делаем бокс нужного размера (BASE)

2. Стеклянные стенки

Копируем бокс как Reference (Glass) и не сложными манипуляциями, разрезая и двигая грани, накладывая Shell и делая фаски, создаём стеклянный ящик. Reference использует первоначальный объект как и Instance, но его плюсом можно независимо от исходного объекта модифицировать, накладывая модификаторы выше разделительной линии:

Нюанс: избегайте образования компланарных поверхностей, особенно с прозрачными объектами. Между стёклами у меня 0,01 см. расстояние за счёт применения Shell 0,99 см.:

Теперь, изменяя размеры базового бокса, мы можем менять размер стекла. Это один из вариантов "параметризации". Назовём его "Метод 1".

3. Вода

Воду можно сделать по аналогии со стеклом, конечно, но "мы не ищем лёгких путей", поэтому сделаем с помощью контроллеров "Метод 2".

Мне надо, чтобы вода была на 1 см меньше базового бокса в районе стёкол и на пару сантиметров ниже по высоте. Копируем (Copy) базовый бокс в центр аквариума или создаём новый (Water), поднимаем вверх на 1 см., жмём правой кнопкой на нём и выбираем Dope Sheet:

Откроется TrackView, где нам надо найти нашу воду (обычно выделенный объект подсвечен жёлтым), по параметру Length (Длина) кликнуть правой кнопкой и выбрать Float Script:

В поле Name надо придумать имя для переменной длины базового бокса (BaseBoxLength, например) --> Create --> Assign Track, откроется окошко TrackView Pick, где надо найти наш базовый бокс, найти параметр длины и кликнуть OK:

Теперь наш параметр BaseBoxLength будет выражать длину базового бокса, мы можем использовать её для любых арифметических действий. В поле Expression вводим формулу "BaseBoxLength - 2", чтобы длина бокса воды была на 2 см. меньше. Можно нажать Evaluate, чтобы увидеть наглядно изменения. Теперь длину Water нельзя изменить вручную (этот параметр у неё будет серым) и привязан к длине базового бокса.

Я думаю, принцип понятен. По такой же схеме я привязал Width и Height объекта Water к Base боксу.

4. Камушки на дне

Теперь можно сделать камушки на дне. Я создал Plane на нужной высоте, привязал ширину и длину к базовому боксу, уменьшив их на 2,04 см (по 1,02 см с каждой стороны). Так же можно привязать любые параметры, в том числе и количество сегментов по длине и ширине:

К этому Plane применил модификатор Shell, нажав галочку Select Outer Faces, затем накинул Noise, настроив, как мне надо, потом Mesh Select (чтобы скинуть выделение верхних полигонов) и UVW Map:

5. Крышка

Её делал по принципу стеклянных стенок "Метод 1", навешивая модификаторы на Reference от BASE бокса:

6. Камешки и растения

"Методом 2" сделал Plane, у которого отключил видимость для рендера и сделал отступы от стенок побольше, чтобы камни и растения не пересекали стёкла и по ней распределил с помощью Corona Scatter заранее заготовленные образцы:

7. Пузыри

Сделал в PFlow. Сильно не буду объяснять, там всё достаточно просто. Единственное что я привязал высоту Deflector001 к базовому боксу так, чтобы он находился на поверхности воды:

8. Рыбки

Теперь можно запускать рыбок. Сделал вспомогательный бокс, привязав методом 2 к базовому боксу, отдалив чуток от стенок и дна и в него распределил заранее смоделированных рыбок с помощью Corona Scatter:

9. Заключение

Метод не сложный, но даёт большие возможности для взаимосвязи объектов и их параметров между собой в практически любых сочетаниях, используя всевозможные формулы и скрипты. Надеюсь урок был для Вас полезным и теперь Вы сможете сгенерировать аквариум любого размера под свои проекты.

Всегда рад конструктивной критике. Я сам ещё в этой теме новичок можно сказать.

-----------------------

За моим творчеством можно тут следить, кому интересно.

параметрическийаквариуммоделированиеcontroller3dsmax

Комментарии (25)

0
3dddland
Мне нужно пузырьки воздуха сделать, как сделать симуляцию пузырей, что бы они были не по 1 прямой, а заполняли все пространство, а то у меня не очень красиво выходит! http://prntscr.com/q300gi  http://prntscr.com/q300mi 
+3
AlexHappy
Не совсем по теме статьи, но в Speed за разброс отвечает параметр Divergence, а чтобы они не вылетали за пределы стёкол, можно, чтобы они отскакивали или ползли вдоль установленных там дефлекторов.
+1
3dddland
Допиши плиз про пузырьки) какой аквариум без пузырей)) я думаю там + 2-3 скриншота будет достаточно)
+2
AlexHappy
На самом деле на скрине всё видно. Ну а Speed и Divergence по месту подбираются, у меня 100 и 7,5 соответственно.
+1
Юрий Гагарин
Делаете фигуру необходимого объема, конус, параллелепипед, цилиндр и т.д. и через корона скаттер наполняете
+1
3dddland
И если я не ошибаюсь, то воду в Corona (надо наоборот утапливать на пару мм в стекло)
Ну я так делаюhttp://prntscr.com/q305ro  (утапливаю в стекло)
+1
AlexHappy
Проверил и правда, вода, немного вдавленная в стакан выглядит правильней. Но факт тот, что хуже всего, если она компланарна.
+2
Aa_Shevelev
Сам однажды в короне попался на компланарность, когда решил сделать два стекла рядом, набрать толщину, как в реальности). Спасибо за урок
+5
petrovich23rus
https://coronarenderer.freshdesk.com/support/solutions/articles/5000515618-how-to-model-a-liquid-in-glass-with-corona-renderer-
+3
vk3d
Очень крутая идея и исполнение, браво! спасибо!!!
+1
Yurek.Engineer
Супербл. Всегда параметричность интересовала.
+8
grdesigner
Один из немногих уроков, который необходимо сохранить на жестком. А то всякое бывает и из интернетов пропадает информация.
+5
Magomed Mirzaev
Нужно поучиться творчески мыслить у автора) спасибо!
+3
ViTcore
так и надо делать, речь и про моделирование и про урок
+2
Evilis
А используя Parameter Collector вы можете собрать необходимые параметры для изменения из Track View в свой Rollout и манипулировать ими из кастомной панельки для совершенного удобста. Либо Attribute Holder, но чуть посложнее уже в создании.
+2
AlexHappy
Сколько ещё неизведанного таится в 2014 максе.. пожалуй, рано пока на 2016 переходить.
+1
Vikinger
Оч хорошя статья, много где можно применить. Автору спасибо
+1
epush
Второй способ полезен, нужно поковырять. Не все можно сделать с помощью Reference.
+5
+3
MastaMan
Лайк не глядя ;)
+1
c3dm
Спасибо за урок. Слежу за новостями в ВК поэтому ждал его.
+1
paz
Классынй урок. А во врее то же кажись нужно утапливать воду в стекло
+3
Uraken
"Между стёклами у меня 0,01 см. расстояние за счёт применения Shell 0,99 см" - дальше не читал. Вода же вытечет вся!!
+1
skyland_studios
редко такие уроки встретишь)) спасибо за труд очень полезно.. да ещё и в старом добром формате текста и скриншотов) и кстати да вода в стекле намного реалистичнее чем вода с расстоянием от стекла))
0
AG_N1gga
Мне подходит вариант "взять у меня", но инструкции к этому варианту почему-то нет. Как это сделать?)
0
Pony Li
Спасибо! Как раз то, что мне нужно.