Сегодня хочу рассказать о методе, с помощью которого можно создавать различные объекты с взаимозависимыми параметрами на примере аквариума, размеры которого можно менять.
Как это работает можно посмотреть в видео:
Как пришла идея:
- был комментарий от знакомого, что не хватает аквариумов лёгких на сайте;
- есть проблема, связанная с тем, что аквариумы готовые очень трудно подогнать под свой размер, т.к. типоразмеров у них очень много, и одним масштабированием не отделаешься, ведь там ещё разные предметы, рыбки, растения, пузырьки и т.п.
В итоге я решил сделать лёгкий аквариум, размеры которого можно задавать самостоятельно, а всё остальное будет достраиваться автоматически. К слову, эта модель не прошла модерацию (у модератора она не открылась), поэтому её можно взять у меня или сделать самостоятельно по этому уроку:
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. Заключение
Метод не сложный, но даёт большие возможности для взаимосвязи объектов и их параметров между собой в практически любых сочетаниях, используя всевозможные формулы и скрипты. Надеюсь урок был для Вас полезным и теперь Вы сможете сгенерировать аквариум любого размера под свои проекты.
Всегда рад конструктивной критике. Я сам ещё в этой теме новичок можно сказать.
-----------------------
За моим творчеством можно тут следить, кому интересно.