RailClone | Создание параметрических зданий часть 2.
Vladimir.kobranov 2225

Вторая часть статьи про создание параметрических зданий в плагине RailClone под 3ds Max.

В замечаниях к первому варианту этого алгоритма возникло справедливое замечание, что можно использовать другой тип аррея ( array ) и автоматизировать назначение первого и последнего этажей. Сегодня об этом и поговорим. Так же покажу недостатки самого RC (RailClone) и пример того, как это делается с использованием языковых примитивов в игровых движках (UE4).

Обозначу требования в алгоритму:

  1. Использовать только 1 сплайн на дом или ряд домов.
  2. Ввод этажа через цифры.
  3. Автоматическое назначение первого и последнего этажей.

Исходя из требований нам нужно детерминировать для RC следующее:

  1. Логика этажей.
  2. Понятие первый и последний этаж.

Приступим.

Для начала создадим примитив для работы и сам объект rc.

Использовать будем array 2s. В дальнейшем для удобства будем называть его цикл.

Как видно, сам цикл распространяет объект по осям X и Y на назначенном в параметрах расстоянии от сплайна.

Логика построения зданий же использует третью ось - ось Z. К сожалению RC не способен создавать циклы по трем осям, хотя сам макс через встроенный array может это делать. Потому будем использовать "костыли". Решением данной проблемы был найден вариант вращения цикла по одной из осей и дальнейшее же переворачивание распространяемого объекта.

В своих материалах фирма разработчик Itoo предлагает строить здания по ортогональным проекциям фасадов.

Для быстрого создания зданий и какой либо автоматизации этажей и этажности это не годится. В тоже время наш текущий алгоритм уже позволяет строить замкнутый цикл объектов по сплайну в проекции плана.

Перейдем к возведению этажности в алгоритме.

Цикл 2s в его текущем, перевернутом состоянии, позволяет нам строить "вверх". Но у самого RC нет такого понятия этаж или этажность, более того мы даже не знаем, на сколько сейчас он поднимает цикл вверх.

Как видно на картинке ниже, у нас используется только 1 сплайн в проекции X. Вторая же ось, Y, свободна. Это позволяет ввести нужное значение высоты зданий.

RC позволяет вывести параметры в ноду (node), чтобы можно было использовать константы или переменные.

Используя данные возможности можно создать логику этажей и этажности. Я сразу покажу готовый вариант.

Итак, что мы имеем:

  1. Вводимое в параметрах объекта RC этажи и вычитание первого.
  2. Создание параметра этажность ( умножение на 3000 мм ).
  3. Отделение первого этажа на 5100 ( в данном случае ).

Работает данная логика предельно просто:

Берем число ( этаж ), вычитаем 1 (первый этаж), умножаем его на другое число ( высота этажа ), добавляем смещение ( первый этаж ).

(5 - 1)*3000+5100=17000

Получаем высоту нашего здания в 5 этажей. Введем 6, получим 20 метров.

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

Итак, у нас есть наши этажи и отделенный первый этаж. Нужна кровля.

Создаем новый цикл, выводим параметр Z Offset , приводим туда число после всех операций логики этажей.

Что это всё дает?

По факту мы создаем новый цикл по тому же сплайну, но со смещением высоты всех этажей, а это число мы можем менять в любой момент. То есть кровля будет создаваться сама в нужном нам же месте.

Первый этаж можно делать любым методом, главное помнить, что его высоту мы определили в 5100. Подробнее о цикле 1s тут.

Итак, сейчас, имя всего 1 сплайн ( проекция здания в плане ) мы можем создать здание с вводимым количеством этажей. В готовом виде это выглядит так:

Я не буду детально расписывать различные способы рандомизации объектов и или материалов. Всё это можно будет посмотреть в шаблоне.

Для общего понимания работы подобной параметрики перейдем к логике построения схожих циклов в UE4 ( или любом другом движке, поддерживающим языки программирования ).

По скольку работать мы будем с примитивами языка, то необходимо будет определять понятия числами. То есть этаж это - число этажей умноженное на смещение этажа по оси Z. В тоже время нужно так же смещать объект по оси X и Y.

Для этого как раз и используются циклы или for(int i=1; i<=k; i++), где k число смещений.

В визуальном представлении UE4 это выглядит примерно так:

Логика точно такая же, как у нас была с вводом этажности.

Берется число смещений, умножается на шаг смещения, выводится вектор перемещения и создается объект с этими параметрами смещения по циклу.

В примере выше создается двойной цикл, то есть цикл Х возводится в цикл Z, создавая таким образом 1 стену XZ.

Используя этот простой цикл и различные булены if можно сделать что то подобное:

По такой же логике можно в любом языке программирования написать стенку для змейки в консоли или создать дом в плагине для 3ds max.

По итогу:

Что позволяет делать алгоритм:
  1. Используется только 1 сплайн на дом или ряд домов.
  2. Ввод этажа через цифры.
  3. Автоматическое назначение первого и последнего этажей.
Некоторые замечания по шаблону:
  • Вся геометрия сделана с нуля(за текстуры не ручаюсь).
  • Присутствует рандомность в текстурах. Так же применены xform, что позволило избежать тайлинга.
  • Важно отключить Instancing Engine. На данный момент corona не работает с рандомизацией uvw в RC.
  • Используется 1 материал (multiMat конечно же).
  • Здания моделируются внутри сплайна, т.е. он является их границей.
  • Для каждой части здания есть вариации. Переключение происходит в параметрах объекта RC.
  • Рекламные вывески на первых этажах сделаны через текст и экструд(стек сохранен), что позволит поменять названия на любые.
  • Количество света в окнах регулируется внутри объекта RC. Сила через материал.
  • Геометрию можно менять на ваш вкус и цвет. При сохранении общих размеров (и pivot'ов) итоговый алгоритм не пострадает.
  • Добавлены некие вариативные параметры в алгоритме(например можно отключить "рекламу" на первых этажах).
  • Присутствует легкая замена основного материала путем добавления в мультимат нового числа и ввода его же в параметрах объекта RC.
  • Основной материал зданий совместим из коробки с библиотекой материалов короны.

ВАЖНО!-Шаблон создан в RailClone версии 4.0.9. С версией 3~ будет ругаться, плюс есть различия в алгоритмах самих itoo.-System units должны быть мм! Иначе возможны артефакты с размерами текстур.Для простого использования шаблона достаточно создать сплайн внутри файла и переназначить в объекте rc.

Ссылка на скачивание:

https://www.behance.net/gallery/100280735/PARAMETR...

free to use

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

+3
Спасибо! Очень круто получилось!
0
ilia.garbuzov
О, Гришань, ты сел за рэйлкон?
+1
Ну почти)
+1
alexyurkov
Здорово!
0
honduras
Спасибо - очень полезно
0
ch.visualizer
Супер! полезно!)
0
korobkov.pro
Очень надо! Спасибо)))
0
hitchez08
Надо бы уже садиться за него:)