Всем привет!

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

Начнём

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

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

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

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

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

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

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

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

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

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

После создаём 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.

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

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

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

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

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

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

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

Итого

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

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


  1. dravor
    22.05.2024 11:27

    Процедурное моделирование - это скорей как-то вот так, когда можно легко менять отдельные параметры или заменять одну модель здания другой по его названию в библиотеке

    https://www.youtube.com/watch?v=faOdiVcxRG4


    1. SucArch Автор
      22.05.2024 11:27

      Примерно этому я и хочу научиться, но чтобы модели домов соответствовали реальным размерам


  1. AZhbrlgn
    22.05.2024 11:27
    +1

    Круто, не знал что это можно сделать и при помощи нодов. Я-то по названию статьи подумал, что речь пойдет о процедурной генерации с использованием встроенного Python. В свое время я делал план дома со сложной крышей который полностью генерировался кодом. Здесь у нас получается уже в начале 4 объекта - 1 этаж, четный, нечетный и крыша. Можно было бы через тот же Python их копипастнуть хоть до 100 этажей - главное высоту учесть. Или вот такой метод какие-то дополнительные преимущества в дальнейшем дает?


    1. SucArch Автор
      22.05.2024 11:27
      +1

      Тут тоже хоть 100 этажей делай. Я в python не очень разбираюсь, в blender мне по проще реализовывать, +управление напрямую через него


      1. AZhbrlgn
        22.05.2024 11:27
        +1

        Все равно круто. Просто я на визуальные инструменты как-то не очень надеюсь они плавают от версии к версии. Думал, что Python более стабилен - но оказалось они тоже от версии к версии Blenderа его объектную модель меняют.

        Я бы поставил + только мне кармы не хватает.


    1. QDeathNick
      22.05.2024 11:27

      Тоже надеялся на питон, но эта статья удивила, не знал, что такое можно в блендере без питона.

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

      Хочется найти время и углубиться в это. Жаль жизнь пока не подкидывает таких задач.