Делаем процедурный панельный дом в Blender

Всем привет!

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

Начнём

Т.к. мои познания в Blender находятся на низком уровне, то, для основы, использовал данный ролик. Для начала импортировал модели, которые делал давно в SketchUp:

Модели этажей

Модели этажей

И на каждой модели необходимо точку Origin (оранжева точка) установить на одном и том же уровне и внизу, если ширина одинаковая, то можно воспользоваться одни углом на модели, я делал все по центру. Для этого заходим в редактирование (TAB), выбираем грани (клавиша 2) и выделяем как минимум 2 противоположные, после нажимаем сочетание Shift+S, и выбираем в низу Cursor to select:

Выделение по низу модели

Выделение по низу модели

Она устанавливает 3D курсор посередине, между двумя гранями, после выходим из редактирования (TAB) и нажимаем на модели ПКМ и выбираем Set Origin Origin to 3D Cursor:

c398c4944b37d4bb836cacfe951e1f63.png

ОНеобходимо это делать по нижней части модели, т.к. Blender будет на неё ориентировать при процедурном построении этажей. Чтобы 3D Cursor встал на начало координат, т.к. на нём будут создаваться модели, необходимо нажать Shift+C.

Создаём простой куб (Shift+AMeshCube), после наведите курсор мыши на нижний левый угол, пока не появится перекрестие, зажимаем ЛКМ и подымаем его, после чего выбираем Geometry Node Editor и после нажимаем New:

c9ac497bf0950df572629b79df1c0950.png

После чего появляются 2 Нода:

56d1720142cfb8430545bd96452b271f.png

Создаём Нод Math (Математический), с помощью Shift+A, в верху нажимаем на Search и вводим Math. В нём выбираем значение Subtract (вычитание), из Нода Group Input выбираем пустую ячейки и переносим связь от неё, к верхней пустой ячейки. После чего в Group Input ячейка приобретёт имя Value, но её можно задать и любое другое, для этого в правой части окна нажимаете на Group и там посредством двойного нажатия ЛКМ переименовываете:

6dea36de13f942d75646e92d5d4f287f.png

Далее создаёте Нод Math, который можно сделать посредством копирования предыдущего Shift+D, и выбираем значение Multiply (умножение), даём ему нижнее значение, равное высоте модели, а верхнее соединяем с предыдущем Нодом. Т.к. последующие этажи будут по линии, а отсчёт начинается с 0, то при перемножении высоты моделей, точки уходят дальше и появляется разрыв между этажами:

64375f724b2d3c773db690862de405b0.png

После создаём Combine XYZ, соединяем с Z, далее Curve Line, соединяем с End, после Resample Curve, из предыдущего Нода соединяем ячейки Curve, из Group Input значения с этажами и Count.

Далее создаём/копируем Нод Math Subtract и соединяем верхнюю ячейку и Group Input с этажами. Далее создаём Нод Index и Compare со значениями Integer и Not Equal, соединяем Subtract с B, Index с A. Далее создаём Separate Geometry, Not Equal соединяем с Selection, а Resample Curve с Geometry.

bb88fd21a5d94616372927dd236a186a.png

После Instance on Points, и добавляем нашу модель, а именно крыши, посредством переноса объекта из меню Object на рабочий стол Geometry Nodes. Соединяем значение Geometry из модели с Instance в Instance on Points. От Separate Geometry значение Inverted соединяем с Point, Selected с другим созданным Separate Geometry.

67567449c05992326be92b0e6715a891.png

От Separate Geometry от Inverted будет идти связь к Instance on Points с 1 этажом:

63e2055e9db8be1901b4ef2fd71cb521.png

А от Selected к этажам. С той лишь разницей, что к ней уже будет идти связь от Compare, а к нему от Index. В общем далее так же, как на скриншоте:

6f411a2860391c239311a956b002af48.png

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

d1ed66b837156d2b9b3dcc78105d99bb.png

И в конце создаём Нод Join Geometry и связываем с ним все Instance on Points.

В итоге вот что получилось, если обращать внимание на козырьки и высоту
балконов (по ним смотрел есть рандом или нет):

Готовый, непрезентабельный, вариант

Готовый, непрезентабельный, вариант

Итого

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

Habrahabr.ru прочитано 2848 раз