Как создавать 3д модели в блендере: Уроки Blender, гайд по Blender, основы 3D моделирования, инструменты моделирования в Blender, как работать в Blender / Skillbox Media

Содержание

Blender 3D создание 3D модели ограненного алмаза — бриллианта Часть 1

  Урок по созданию 3D модели бриллианта. Часть 1

 

Часть I
Создание 3D модели

 

Для начала, надо ознакомиться с огранкой бриллианта здесь Бриллиантовая огранка градусы углов и определения

 

  1. Создать новый документ. Удалить куб, освещение и камеру.
  2. Настройть единицы измерения: метрическая система, сантиметры.

  3. Создать цилиндр. Shift A -> Mesh -> Cylinder с параметрами Vertices = 8, Cap Fill Type = Triangle Fan

  4. Выделить цилиндр
  5. Перейти в режим Edit Mode (Tab) -> Ax2раза — Ctrl R -> LMBx2 -> Вкладка Loop Cut and Slide -> Nomber of Cuts = 3 -> Enter

    Должны получить вот такой цилиндр

  6. Перейти в режим Edge Selection

  7. Снять выделение: A . Выделить две нижние грани мышкой -> W -> Subdivide
  8. Перейти в режим Face Selection -> A -> Numpad 1 -> Numpad 5 -> Z -> B -> выделить второй ряд сверху -> B -> нижний ряд -> Z 
    Должно получиться так

  9. Numpad 5 — Ctrl T — A
  10. Перйти в режим Edge Selection -> Numpad 1 -> Numpad 5
    Должно получиться так
  11. Z -> B -> Выделить мышкой второй ряд снизу -> Z -> Numpad 5 
  12. Нижнее меню Select -> Checker Deselect. Nth Selection = 2, Skip = 1, Offset = 1
    Должно получиться так
  13. Numpad 7 -> Numpad 5 -> Z -> S -> Вытянуть грани, как на рисунке -> Z -> A

    Получаем такой «барабан»

  14. Отменить выделинеи: А -> включить режим Асфу Select -> Z -> Numpad 1 -> Numpad 3 -> B -> мышкой выделить верхний ряд -> Z -> Ctrl T
    Получаем

  15. В настройках Triangulate Faces задать парметр Quad Method = Fixed
  16. Включить режим Vertex Select: A -> Numpad 1 -> Numpad 5 -> Z -> B -> Выделить самый верхний ряд вершин мышкой -> Z
    Получаем 
  17. Вращаем верхний ряд вершин: R -> Z -> 25.5 -> ENTER -> A
  18. Numpad 1 -> Numpad 5 -> Z -> B -> Выделяем мышкой 3й ряд вершин сверху -> Z ->  поднимаем ряд вверх
  19. Z -> B -> выделяем 2й снизу ряд вершин мышкой -> Z -> поднимаем вверх, формируя по толщине рундист
  20. Z -> B -> выделяем нижний ряд вершин мышкой -> Z -> поднимаем вверх, формируя по высоте павильон
  21. Z -> B -> выделяем самый верхний ряд вершин мышкой -> Z ->опускаем вниз, формируя по высоте корону
    Получаем
  22. Повторяем пункты 18-21  — требуется получить форму. соответствующую огранке бриллианта

  23. Должен получиться бриллиант — ограненный алмаз

  24. Перйти в режим Face Select -> Z -> B -> выделить корону -> ALT J (Tris to Quads) -> A -> Z -> Вернуться в режим Object Mode
  • Назад

  • Вперед

Создать 3d модель в Blender • фриланс-работа для специалиста • категория Создание 3D-моделей ≡ Заказчик Андрій Великий

3 из 3

истекло время актуальности

  1. публикация

  2. прием ставок

  3. истекло время актуальности

Необходимо создать 3d модель в Blender с вариациями цвета 

В дальнейшем планируется использование в Verge3D

У кого есть подобный опыт пишите

Пример на видео по ссылке

Детали исполнителю в ЛС. 

Пишите цены и срока.  Антиспам — блендер

Приложения 1

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

  • Ставки

    6

дата
онлайн
рейтинг
стоимость
время выполнения

  1. 2 дня1000 UAH

    2 дня1000 UAH

    БЛЕНДЕР
    Здравствуй!
    Смогу такое в fusion 360 смоделить, экспортну в fbx или obj и используйте в рендер движке, или принцыпиально в блендер?

  2. 3 дня1000 UAH

    3 дня1000 UAH

    Здравствуйте. Заинтересовал ваш заказ.

    Сделаю модель в Maya, потом переконвертирую в удобный формат.

    Пишите в личные сообщения для обсуждения.

  3. 2 дня4000 UAH

    2 дня4000 UAH

    Здравствуйте! С удовольствием выполню ваш заказ. Есть опыт в создании подобных работ. Пишите, обсудим детали.
    Freelancehunt
    https://www.cgtrader.com/zverge
    https://stock.adobe.com/ru/contributor/200962711/Aleksey%20Zverev
    https://www.artstation.com/artist/zverge
    http://www.shutterstock.com/cat.mhtml?gallery_id=1001876&sort_method=popular&rid=1001876

  4. 4 дня3000 UAH

    4 дня3000 UAH

    Сделаю. В Blender. блендер. Blender. блендер. Blender. блендер.

  5. 3286

     27  0

    2 дня1000 UAH

    Роман А.

    2 дня1000 UAH

    блендер

    Готов выполнить, работаю в программе Blender.

    Срок выполнения до 2х суток при условии что вы всегда на связи для правок.

    Пример работ: Behance

  6. 5 дней2000 UAH

    5 дней2000 UAH

    Доброго дня!
    Профессионально занимаемся 3D-моделингом и графикой 10 лет.

    Сделаем 3D модель в Blender.

    Готовы обсудить все условия. Работаем по безопасной сделке, либо договор с безналом.

1 год назад

168 просмотров

  • 3d моделирование
  • 3d визуализация
  • 3D графика
  • blender3D

Создание 3D-моделей для продавцов · Справочный центр Shopify

Эта страница была напечатана 22 декабря 2022 г. Актуальную версию можно найти на странице https://help.shopify.com/en/partners/resources/creating-media/3d-models/creating-3d-models.

Когда вы создаете 3D-модели товаров от имени продавца, модель должна соответствовать определенным стандартам. Если ваша модель соответствует этим стандартам, продавец получает высококачественную универсальную модель, которую можно использовать для самых разных целей, включая дополненную реальность (AR), виртуальную реальность (VR), визуализацию продуктов и маркетинг. Если модель не соответствует стандартам, продавец, скорее всего, отклонит ее.

В этом руководстве объясняются стандарты моделирования, которым должна соответствовать 3D-модель, и освещаются некоторые распространенные ловушки, из-за которых продавец может отклонить модель.

Широко используемое программное обеспечение для трехмерного моделирования

Следующее программное обеспечение для трехмерного моделирования обычно используется для создания трехмерных моделей для продавцов:

Майя

Блендер

3ds Max

ZBrush

Substance Painter

Фотошоп


Maya

Autodesk Maya — это отраслевой стандарт для 3D-моделирования. В Maya есть все инструменты, необходимые для создания высококачественных 3D-моделей.


Blender

Blender — это бесплатная альтернатива и отличный выбор для начала работы с 3D-моделированием. Это также полезно для предварительного просмотра файлов 3D-моделей.


3ds Max

3ds Max — еще одна программа для 3D-моделирования от Autodesk. 3ds Max не так ориентирован на моделирование, как Maya, но в нем есть все инструменты, которые могут вам понадобиться.


ZBrush

Pixologic ZBrush — интуитивно понятная программа для скульптурирования. В ZBrush легко создавать мягкие поверхности и высококачественные детали, но он не идеален для создания оптимизированных сеток.


Substance Painter

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


Photoshop

Adobe Photoshop — доступный вариант, но он не так хорош для создания 3D-текстур, как Substance Painter.

Характеристики высококачественных моделей

Ниже приведены некоторые рекомендации, которым следует следовать при создании модели продукта. Эти рекомендации помогут вам создать точную высококачественную модель, которую можно использовать по-разному, включая AR Quick Look, 3D-просмотрщики в браузерах, виртуальную реальность и рендеринг продуктов.

Визуальная точность

Качество сетки

  • Модель имеет столько геометрии, сколько необходимо:

    Слева: Модель с необходимым количеством геометрии. Справа: модель со слишком большим количеством геометрии.

  • На модели нет черных полигонов. Черные полигоны — это признак того, что с моделью что-то пошло не так, например, две грани перекрываются или нормали необходимо разблокировать:

  • Отдельные детали моделируются отдельно, а затем собираются вместе, как при сборке реального изделия:

    Слева: Компоненты сумки смоделированы отдельно. Справа: Комбинированные компоненты сумки.

  • Края изделия скошены для плавных переходов:

    Слева: куб с правильно скошенными гранями. Справа: куб с нескошенными гранями.

Рендеринг на основе физических данных

Качество материала

  • Материалы, присвоенные геометрии, соответствуют справочным фотографиям продукта.

  • Есть нюансы и тонкости, которые часто упускают из виду в некачественных моделях. Небольшие потертости, царапины и дефекты помогают сделать модель более правдоподобной:

  • Для каждой характеристики модели, такой как шероховатость, металличность и фоновая окклюзия, существует только одна карта текстуры:

    Для файла GLB необходимо включить следующие карты:

    • рассеянный
    • нормальный
    • единая карта с окклюзией, шероховатостью и металличностью, сопоставленными с красным, зеленым и синим каналами соответственно
    • эмиссионный (опционально)
  • Файлы текстур должны быть как можно меньше при сохранении разрешения.

Моделирование для ревизий

  • Сетка четырехугольная, то есть использует четырехстороннюю геометрию. Четырехугольная геометрия лучше, если требуемый формат файла не предпочитает триангулированную (трехстороннюю) геометрию:

    Слева: четырехугольная модель. Справа: триангулированная модель.

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

Количество полигонов

  • Максимально возможное количество полигонов модели с сохранением всех деталей продукта.
  • Модель соответствует ограничениям количества полигонов для различных медиаформатов, в которых может использоваться модель, таких как 3D-публикации Facebook, AR Quick Look и VR.

УФ-макет

Происхождение продукта

Практика экспорта

  • Все объекты объединены в один объект.
  • Все края смягчены.
  • База модели размещена в начале сетки.
  • Все преобразования заморожены.
  • Вся история удалена.
  • Для модели назначен только один материал, если не требуется иное.

Технические требования

  • Модель отправлена ​​продавцу в формате GLB. Чтобы узнать больше, см. Доставка готовых моделей продавцу .
  • Общий размер файла должен быть около 4 МБ. Для некоторых носителей может потребоваться меньший размер.
  • Текстуры должны быть оптимизированы в формате JPG, если это возможно.

Примеры моделей

Следующие модели соответствуют всем критериям контрольного списка стандартов 3D-моделирования. Модели, которые вы предоставляете торговцу, должны быть одинакового качества.

Загрузить модели

Мягкие изделия и твердые изделия

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

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

Слева: Мягкое изделие. Справа: жесткий продукт.

Изделия с высокой детализацией и крупногабаритные изделия

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

Изделия большого размера занимают больше места, чем изделия среднего размера. Некоторые примеры включают кушетки, автомобили и велосипеды. Важно, чтобы текстуры таких продуктов были полностью оптимизированы. Эти продукты будут намного больше в сцене, поэтому растянутые текстуры или текстуры с низким разрешением будут более заметны пользователю. Текстуры для масштабных продуктов часто должны быть не менее 2K. Начните рисовать текстурой высокого разрешения, а затем при необходимости сожмите файл.

Слева: Детализированный продукт. Справа: крупномасштабный гордец.

Ожидание времени

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

  • Сложность модели
  • Сложность текстуры
  • Количество вариантов вариантов
  • Точность размеров, предоставленная торговцами
  • Качество и количество фотографий товаров, предоставленных продавцом

Проверка качества

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

Для самостоятельной проверки вам следует использовать контрольный список стандартов. Использование контрольного списка гарантирует, что модель будет максимально точной и качественной, прежде чем вы отправите ее продавцу. Это означает, что вам вряд ли придется пересматривать модель после ее доставки, что сокращает время обработки модели.

При отправке модели продавцу убедитесь, что вы делаете следующее:

  • Отправьте модель в формате, который можно просматривать на 360 градусов.
  • Убедитесь, что у продавца есть подходящее устройство для предварительного просмотра модели.
  • Убедитесь, что файл работает в требуемом формате, если применимо.

Когда все пункты контрольного списка стандартов выполнены и продавец удовлетворен 3D-моделью, модель можно считать одобренной.

Ниже приведены некоторые распространенные проблемы с качеством, из-за которых продавец может отклонить модель:

Неправильный масштаб

Размер модели не соответствует реальному товару. Когда модель размещается в дополненной реальности рядом с реальным товаром, они должны быть одного размера.

Непропорциональные компоненты

Компонент в 3D-модели непропорционален другим компонентам модели. Прежде чем приступить к моделированию, убедитесь, что вы собрали достаточно информации о деталях продукта. Это помогает иметь эталонные фотографии с разных ракурсов, чтобы вы могли видеть компоненты со всех сторон, а не работать только с письменными измерениями.

Неправильная геометрия

В геометрии могут быть ошибки, влияющие на отображение модели. Следующие примеры являются распространенными ошибками, на которые следует обратить внимание:

  • Плохое сглаживание
  • Плохая фаска
  • Полигоны с пятью размерами вместо четырех, что может привести к защемлению
  • Z-файтинг (дублирование полигонов на одном месте)
  • Децимация или триангуляция (всегда используйте квадроциклы, где это возможно)
  • Отсечение или взаимопроникновение
  • Несколько УФ-наборов
  • Применение нескольких материалов при экспорте

Незапечатанная геометрия

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

Неправильная форма

Форма модели не соответствует изделию. Внимательно проверьте пропорции и форму. Силуэт вашей модели должен соответствовать эталонным фотографиям товара.

Неточные материалы

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

Текстуры низкого разрешения и размытые

Файлы текстур низкого разрешения и размытые. Когда вы создаете файлы текстур, начните с высокого разрешения. Позже вы можете уменьшить разрешение, в зависимости от того, какой размер файла текстуры вам нужен. Размер файлов текстур для мобильных устройств не должен превышать 2048 x 2048 пикселей. Вы можете использовать сочетание текстур разного размера для оптимизации размера.

Искаженные UV-развертки

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

Доставка готовых моделей продавцу

Когда модель завершена и одобрена, вы можете доставить все файлы модели продавцу любым способом, который лучше всего подходит вам и им. Например, вы можете использовать электронную почту, Dropbox или Expert Marketplace.

Доставка всех 3D-моделей в виде файлов GLB. Формат GLB используется большинством программ просмотра 3D. Файлы GLB — это отдельные файлы, содержащие модель и текстуры.

Следующие три руководства объясняют, как создавать файлы GLB с помощью трех популярных программ 3D-моделирования:

  • Создание файлов GLB с помощью Maya и Substance Painter
  • Создание файлов GLB с помощью 3ds Max и Substance Painter.
  • Создание файлов GLB с помощью Blender и Substance Painter
Примечание

Продавец может использовать устаревшее приложение Shopify 3D Warehouse для добавления 3D-моделей к продуктам. 3D Warehouse ориентирована на формат файла USDZ. Если продавцу требуется файл USDZ, вы можете создать его с помощью инструментов Apple USDZ.

Создание 3D-объектов и анимаций в Blender с помощью Python API

Знаете ли вы, что в Blender можно запрограммировать автоматическое создание 3D-объектов и анимаций?

Blender — известная программа для 3D-моделирования, скульптинга, текстурирования, анимации и многого другого! Поскольку версии продолжали выходить, этот инструмент постепенно завоевал свое место в индустрии компьютерной графики, настолько, что теперь есть несколько полнометражных фильмов, полностью созданных с использованием Blender, и что есть каналы Youtube, такие как Blender Guru, полностью посвященные чтобы изучить все тонкости этого софта…

… при этом он полностью бесплатный и с открытым исходным кодом!

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

Итак, да — во-первых, программное обеспечение CGI в первую очередь предназначено для художников. Но у Blender, как и у его конкурентов, есть и другая сторона для разработчиков: способ программирования ваших 3D-сцен.

Сегодня я хочу показать, как этот программный подход к Blender позволяет мгновенно создать базовую солнечную систему, подобную этой:

Вы готовы? Тогда давайте погрузимся! 🙂 Если вы хотите получить код напрямую, он доступен в Github Gist. Через Python API .

Вам может быть интересно, почему Python API для 3D-программы интересен. Я имею в виду: зачем встраивать в творческий инструмент с вещами для программистов?

По правде говоря, во многих случаях он может быть полезен для  автоматизировать задачу : хотите ли вы быстро рандомизировать алгоритм заполнения сцены, подсчитать объекты и получить индивидуальную статистику для вашей сцены или даже создать целый мир с нуля, который можно точно воспроизвести с помощью семечек… имея возможность интегрировать процедурную генерацию или специальные инструменты  непосредственно в контексте компьютерной графики — это просто потрясающая возможность!

Кроме того, тот факт, что это Python , язык, известный как простой в освоении  и для которого существует всего бесконечное количество руководств  в сети позволяет новичкам легко погрузиться в работу (не опасаясь старых API-интерфейсов на основе C/C++, которые, на мой взгляд, требовали более высоких навыков программирования…).

Между прочим: этот Python API — не просто блестящая игрушка для подражателей: на самом деле это часть самого программного обеспечения Blender  и он используется внутри программы как основной инструмент, хотя пользовательский ввод и результаты заключены в удобный пользовательский интерфейс 😉

API сам по себе, bpy (от «Blender Python»), можно просмотреть в специальной документации Blender; он разделен на несколько подмодулей, из которых 3 наиболее важных / часто используемых:

  • bpy.context: содержит геттеры и считыватели значений, доступных только для чтения, которые описывают ваш текущий рабочий контекст или даже область (например, панель в вашем окне), к которой в данный момент осуществляется доступ
  • bpy.data: предоставляет вам доступ к ресурсам в вашей сцене (объектам, материалам, сеткам…), чтобы вы могли загружать, добавлять или удалять их
  • bpy.ops: это настоящее мясо API — это то, что позволяет вам выполнять действия и вызывать операторы на ваших объектах или ваших взглядах; это в основном то, как вы можете имитировать действия пользователя с помощью сценариев (например, выбор объекта, вход в режим редактирования, применение подразделений, переход к «плоскому» затенению, максимизация окна…)

Сегодня мы сосредоточимся на создании объектов благодаря этому API, поэтому мы проведем процедурную генерацию . Я уже обсуждал преимущества этого подхода в других статьях; Грубо говоря, процедурная генерация заключается в определении набора правил и машины , которая использует эти правила для автоматического создания допустимых экземпляров . Большим преимуществом является то, что как только вы закончите создание движка, вы сможете создать столько экземпляров, сколько захотите! Более того, эта генерация может быть довольно быстрой, динамичной в зависимости от заданных условий и бесконечной (например, для бесконечных игр, таких как раннеры). Но, конечно, обычно это немного сложнее, чем ручное проектирование, потому что вам нужно научить свое программное обеспечение правильным и неправильным шаблонам (то есть «правилам»).

Процедурная генерация — очень обширная и сложная тема. Существует множество инструментов для генерации движков — и, честно говоря, большая их часть полагается на случайность . Идея состоит в том, чтобы начать со случайных значений, а затем каким-то образом « контролировать сумасшествие », чтобы это было правильно.

Создание и анимация случайной солнечной системы!

Чтобы увидеть, насколько мощным может быть API Python для Blender и как его использовать, давайте поработаем над базовым примером: создаем группу планет вокруг солнца (все они представляют собой простые сферы) со случайным размером, скоростью и цветом, а планеты вращаются вокруг Солнца по круговым орбитам.

Теперь давайте проясним: это будет , а не , физическая симуляция. Мы выберем все наши значения случайным образом, и не будет никакой логической связи между расстоянием до Солнца, радиусом и цветом поверхности планет. Цель здесь — просто поиграть с Python API Blender, посмотреть, как сделать процедурную генерацию и повеселиться со светящимися сферами 😉

Шаг 1: Подготовка нашего Blender

Прежде всего: давайте посмотрим, как настроить наш Blender для Python и изучите различные инструменты, которые есть в нашем распоряжении.

Примечание: в этом руководстве используются скриншоты из Blender 2. 93. Кроме того, я буду использовать Python API из Blender 2.8+, поэтому убедитесь, что ваша версия соответствует 🙂

Если вы хотите работать с Python в Blender, очень полезно запустить Blender с подключенной консолью . Это позволит вам увидеть некоторые журналы, если ваш скрипт Python содержит ошибки, что очень важно для правильной отладки!

По сути, идея состоит в том, чтобы запускать Blender с вашего терминала, а не с ярлыка приложения. Точный путь к исполняемому файлу Blender зависит от вашей ОС; Я использую Mac, поэтому все, что мне нужно сделать, это открыть терминал и запустить что-то вроде этого:

/Applications/Blender.app/Contents/MacOS/Blender &

С этого момента все, что выдают мне мои сценарии Python, будет отображаться в этой консоли 🙂

Теперь, чтобы подготовиться к кодированию, просто перейдите в Вкладка «Scripting» в верхней части окна Blender:

Это даст набор новых панелей в вашем рабочем пространстве, а именно:

  1. 3D-вид : как обычно вы начинаете экран в Blender — вы видите свою текущую сцену в 3D, в режиме «сплошной» тени, и вы можете выбирать различные объекты, как обычно
  2. интерактивная консоль Python : эта специально созданная консоль Python невероятно полезна для просмотра API Blender и изучения всех полей и методов, которые предоставляют нам объекты Python Blender; В дополнение к основным встроенным модулям Python, эта консоль также поставляется со встроенными модулями Blender и несколькими удобными переменными для легкого доступа к общим подмодулям API Blender
  3. Информационная панель : сначала это может показаться странным, но это панель просто отлаживает все, что вы делаете, что еще раз отлично подходит для открытия возможностей API! Если вы попытаетесь выбрать объект, или переместить источник света, или любое другое действие, которое вы привыкли выполнять в Blender, вы увидите, что оно зарегистрировано на этой панели, и вы сможете понять, к какой части API вам следует получить доступ. воспроизвести это действие через сценарий
  4. Текстовый редактор : как вы уже догадались – это основное блюдо для нас сегодня; здесь мы будем создавать, редактировать, сохранять и запускать наш скрипт Python. Это простой редактор Python с подсветкой синтаксиса, номерами строк и даже несколькими утилитами, такими как «Найти и заменить», если открыть боковую панель (с помощью или на Mac). Обратите внимание, однако, что этот редактор ограничен с точки зрения возможностей, поэтому, если вы планируете делать что-то большое, вероятно, лучше использовать хорошую внешнюю IDE, а затем загрузить свой скрипт в Blender, когда он будет готов
  5.   Outliner : это еще один распространенный вид, который вы, вероятно, уже знаете, который просто показывает иерархию объектов в вашей текущей сцене и обеспечивает быстрый доступ
  6.   панель свойств : аналогично, эта панель такая же, как макеты — здесь вы можете просматривать и редактировать свойства вашей сцены, параметры рендеринга, настройки вашего мира и конкретные данные для вашего текущего выбранного объекта

Чтобы убедиться, что все работает, просто нажмите кнопку «+ Новый» текстового редактора, напишите базовую строку print(‘hello world’) в скрипте Python и щелкните значок «Выполнить» справа (или используйте сочетание клавиш ; убедитесь, что указатель мыши наведен на текстовый редактор панель, чтобы это работало).

Если все настроено правильно, на подключенном терминале должно появиться сообщение «hello world»!

Шаг 2: Создание базовой сетки с помощью API

Хорошо! Пришло время стать реальными и создать некоторые объекты в нашей сцене с помощью Python 🙂

Для начала удалите все исходные объекты: куб, камеру и свет. Мы не будем их использовать.

Теперь давайте отредактируем наш скрипт Python, чтобы создать новый объект сферы. Это делается с помощью подпакета bpy.ops, а точнее метода mesh.primitive_uv_sphere_add():

 импорт бит/год
bpy.ops.mesh.primitive_uv_sphere_add(
    радиус=3,
    местоположение = (0, 0, 0),
    шкала = (1, 1, 1)
) 

Параметры говорят сами за себя: мы создаем сферу с радиусом 3 в исходной точке с нормализованным масштабом. (Не стесняйтесь просматривать документы для получения более подробной информации о доступных параметрах)

Еще раз запустите свой код, щелкнув значок «Выполнить» или с помощью шорткода . И тадаа! Мы только что создали простую UV-сферу в нашей 3D-сцене исключительно с помощью скрипта! 😉

Шаг 3: Создание экземпляров наших планет

Теперь мы можем создать одну сферу — так что давайте посмотрим, как легко создать несколько!

Нам нужно:

  • создать N_PLANETS объектов, каждый из которых представляет собой простую UV-сферу в конечном итоге место нашего солнца), что зависит от индекса планеты (чтобы их орбиты были хорошо разбросаны)

Создать N_PLANETS экземпляров очень просто: мы просто заключим наш вызов primitive_uv_sphere_add() в цикл for и запустим его несколько раз. Чтобы сценарий оставался читабельным, мы на самом деле извлечем этот процесс создания экземпляра в вспомогательную функцию create_sphere() и передадим его со случайным радиусом и расстоянием.

Чтобы получить случайное значение для нашего радиуса и нашего расстояния, мы можем положиться на встроенный модуль случайных чисел Python.

Также мы должны  назвать наши объекты  правильно: это интересно, чтобы сохранить ясность нашей иерархии, и это будет важно, когда позже мы будем автоматически очищать сцену при инициализации скрипта. Я просто буду называть каждый объект «Планета-00», «Планета-01» и так далее для сфер N_PLANETS.

Вот обновленный скрипт:

 from random import random
импортировать бит/год
def create_sphere (радиус, расстояние_до_солнца, имя_объекта):
    # создать UV-сферу с заданным
    # радиус на заданном расстоянии от
    # мировая точка происхождения
    obj = bpy.ops.mesh.primitive_uv_sphere_add(
        радиус=радиус,
        местоположение=(расстояние_до_солнца, 0, 0),
        шкала = (1, 1, 1)
    )
    # переименовать объект
    bpy.context.object.name = имя_объекта
    # вернуть ссылку на объект
    вернуть bpy.context.object
N_ПЛАНЕТЫ = 6
для n в диапазоне (N_PLANETS):
    # получить случайный радиус (число с плавающей запятой в [1, 5])
    г = 1 + случайный () * 4
    # получить случайное расстояние до исходной точки:
    # - начальное смещение 30, чтобы выйти из сферы солнца
    # - сдвиг в зависимости от индекса планеты
    # - небольшой "шум" со случайным поплавком
    d = 30 + n * 12 + (случайное() * 4 - 2)
    # создать экземпляр планеты с этими параметрами
    # и имя пользовательского объекта
    create_sphere(r, d, "Планета-{:02d}". format(n)) 

Если вы запустите это снова, вы должны получить небольшой набор хорошо выровненных планет различных размеров, которые все названы в правильном формате:

Шаг 4: Добавление солнца и колец радиуса

В аналогичным образом мы можем повторно использовать наш метод create_sphere() и создать еще один, называемый create_torus(), чтобы добавить сферу для солнца и некоторые объекты тора, чтобы показать орбиты планет:

 from random import random
импортировать бит/год
def create_sphere (радиус, расстояние_до_солнца, имя_объекта):
    # ...
def create_torus (радиус, obj_name):
    # (аналогично методу create_sphere)
    obj = bpy.ops.mesh.primitive_torus_add(
        местоположение = (0, 0, 0),
        major_radius=радиус,
        минор_радиус=0.1,
        основные_сегменты = 60
    )
    bpy.context.object.name = имя_объекта
    вернуть bpy.context.object
N_ПЛАНЕТЫ = 6
для n в диапазоне (N_PLANETS):
    # ...
    # добавляем отображение кольца радиуса
    create_torus(d, "Радиус-{:02d}". format(n))
# добавляем солнечную сферу
солнце = создать_сферу (12, 0, "Солнце") 

Солнце, конечно, больше, чем планеты, и кольца просто размещаются одновременно со сферами планет, используя расстояние до начала координат для параметра радиуса тора:

Шаг 5: Установка материалов и затенение для наши объекты

Это здорово, но эти объекты какие-то угрюмые, все серые и блочные. Пришло время поработать над двумя важными концепциями 3D: затенением и материалами наших объектов!

Вообще говоря, затенение  относится к тому, как объект реагирует на свет и отрисовывается в 3D-виде или при визуализации. Однако здесь я сосредоточусь на «гладком» и «плоском» затенении, которое определяет, как граненый объект выглядит. По сути, это второй слой, который дополнительно влияет на визуализацию объекта, но не меняет его фактическую геометрию: он просто выглядит более гладким.

Настроить объекты на использование «сглаженного» затенения очень быстро: у нас есть специальный метод Shade_smooth() в подмодуле bpy. ops:

 из случайного импорта случайный
импортировать бит/год
def create_sphere (радиус, расстояние_до_солнца, имя_объекта):
    # ...
    # применяем плавное затенение
    bpy.ops.object.shade_smooth()
    # вернуть ссылку на объект
    вернуть bpy.context.object
def create_torus (радиус, obj_name):
    # ...
    # применяем плавное затенение
    bpy.ops.object.shade_smooth()
    # вернуть ссылку на объект
    вернуть bpy.context.object
# ... 

Настоящий вопрос заключается в следующем: как мы можем придать нашим планетам цветов , и как мы можем сделать наше солнце свечение ?

Ответ: благодаря материалам и шейдерам! 🙂

Что такое материалы и шейдеры?

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

Грубо говоря, шейдеров  это то, что придает 3D-объектам их цвет, их блеск, их глянец, их шероховатость… Подумайте об этом: в реальном мире, что заставляет вас говорить, что «хм, это дерево» — это просто целое набор подсказок: предмет имеет оттенок коричневого, немного отражает свет, но не резкими световыми пятнами, как металл, не преломляет лучи, как стекло, и не отражает ваше изображение, как зеркало… Благодаря постоянно совершенствующейся технологии компьютерной графики все эти свойства теперь можно смоделировать и воспроизвести в наших 3D-сценах!

Примечание: когда вы действительно стремитесь к реалистичному рендерингу, вам, вероятно, придется погрузиться в физический рендеринг или PBR. И именно для этого используется движок Blender Cycles для создания удивительно реалистичных изображений, которые просто «кажутся» реальными, в основном благодаря набору сложных и хорошо настроенных шейдеров.

В Blender шейдеры обычно редактируются с помощью редактора графов на основе узлов (доступного на вкладке «Затенение»), который позволяет вам соединять и комбинировать столько встроенных узлов, сколько вы хотите, чтобы создавать более или менее сложные потоки затенения. В этом уроке , однако мы создадим очень простой шейдер, который имеет только один узел, поэтому мы сделаем все в нашем скрипте Python 🙂

Материалы , затем используем эти шейдеры и применим их к вашей 3D-геометрии. У объекта может быть несколько слотов материала, т.е. он может использовать разные шейдеры для разных частей геометрии, но сегодня мы не будем вдаваться в это, и мы будем придерживаться одного слота материала для каждого объекта.

Выбор типа шейдера

Итак, какой шейдер мы должны создать?

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

Но это нормально, потому что здесь мне нужен тот, который существует в обоих: шейдер Emission . Вы можете представить это как большую лампочку, у которой есть интенсивность (параметр «сила») и цвет. Это заставит ваш 3D-объект излучать свет (так что ваш объект станет источником света в вашей сцене, с которым мы будем взаимодействовать с остальными сетками!) и, по сути, заставит его «светиться» 🙂

Создание шейдера в нашем скрипте Python

Чтобы полностью создать и назначить шейдер с помощью скрипта, нам необходимо:

  • создать новый ресурс шейдера, используя подмодуль bpy.data будет с редактором узлов шейдера: мы удалим некоторые узлы, добавим другие, установим их свойства и свяжем их вместе
  • получим ссылку на наш вновь созданный материал
  • и, наконец, добавим его в данные материалов (т.е. слоты) нашего объекта

Давайте работать над этим шаг за шагом. Мы начнем с создания новой функции под названием create_emission_shader(), которая получит некоторые параметры силы и цвета и будет использовать их для настройки базового двухузлового графа с узлом излучения и выходным узлом.

Идея состоит в том, чтобы начать с базового шаблона узла и очистить все начальные узлы; затем мы можем добавить наши узлы эмиссии и вывода, настроить узел эмиссии, обновив значения его полей ввода, и создать связь между двумя узлами:

 def create_emission_shader (цвет, сила, имя_мата):
    # создать новый материальный ресурс (со своим
    # связанный шейдер)
    мат = bpy.data.materials.new(mat_name)
    # включить режим редактирования нод-графа
    mat.use_nodes = Истина
    
    # очищаем все начальные узлы
    узлы = мат.node_tree.nodes
    узлы.очистить()
    # добавляем узел Emission
    node_emission = nodes.new(type="ShaderNodeEmission")
    # (input[0] - это цвет)
    node_emission.inputs[0].default_value = цвет
    # (input[1] — сила)
    node_emission.inputs[1].default_value = сила
    
    # добавляем узел вывода
    node_output = nodes.new(type="ShaderNodeOutputMaterial")
    
    # связать два узла
    ссылки = mat.node_tree.links
    link = links.new(node_emission. outputs[0], node_output.inputs[0])
    # вернуть ссылку на материал
    возврат мат 

Теперь довольно легко использовать этот метод для создания наших материальных ресурсов и применения их к нашим объектам. Нам понадобится один белый излучающий материал для колец, один желтый излучающий материал для солнца и один излучающий материал для каждой планеты со случайным цветом (хотя я добавлю больше синего для лучшего общего цветового баланса 😉):

 # . ..
N_ПЛАНЕТЫ = 6
ring_mat = create_emission_shader(
    (1, 1, 1, 1), 1, «Рингмат»
)
для n в диапазоне (N_PLANETS):
    # ...
    планета = create_sphere(r, d, "Планета-{:02d}".format(n))
    планета.данные.материалы.приложение(
        create_emission_shader(
            (случайный(), случайный(), 1, 1),
            2,
            "PlanetMat-{:02d}".format(n)
        )
    )
    # добавляем отображение кольца радиуса
    кольцо = create_torus(d, "Радиус-{:02d}".format(n))
    ring.data.materials.append(ring_mat)
# добавляем солнечную сферу
солнце = создать_сферу (12, 0, "Солнце")
sun. data.materials.append(
    create_emission_shader(
        (1, 0,66, 0,08, 1), 10, "Солнцемат"
    )
) 

Если вы измените режим затенения в вашем 3D-виде на «Визуализировано», вы удалите все объекты, которые в настоящее время находятся в сцене, и снова запустите скрипт, вы увидите, что на них теперь есть красивые светящиеся материалы!

Обратите внимание, что после запуска скрипта вы даже можете перейти на вкладку «Затенение», выбрать объект с шейдером и посмотреть график шейдера:

Выглядит как положено: два узла, один Излучение и один выход, связь между ними и некоторые пользовательские значения свойств «Сила» и «Цвет».

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

Шаг 6: Анимация планет

Мы приближаемся к финальному «генератору солнечной системы»! Последнее, о чем нам нужно позаботиться, — это анимация планет, чтобы они вращались вокруг солнца с течением времени.

Чтобы сделать это, мы будем использовать систему анимационных кривых Blender (F-кривые). Это более продвинутая  версия анимации по ключевым кадрам  , в которой вы указываете ключевые значения  для одного или нескольких свойств вашего объекта с течением времени (например, вы задаете его положение, поворот, масштаб… в заданном кадре), а также интерполяция  между ними.

Вот пример того же набора ключевых точек с тремя возможными интерполяциями (слева направо: постоянная, линейная и Безье):

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

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

«Лучшая интерполяция» зависит от типа анимации, которую вы хотите. В нашем случае мы должны выбрать линейную интерполяцию, чтобы планеты просто двигались с постоянной скоростью по своим орбитам.

Чтобы создать анимацию для наших планет, нам просто нужно использовать метод animation_data_create() и поле animation_data наших объектов, чтобы создать, а затем отредактировать F-кривую для свойства Z-вращения. Это свойство на самом деле является частью свойства 3D-вектора объекта, называемого «9».0016 Вращение Эйлера ”(подробнее о режимах вращения Блендера здесь), где ось Z — это третий компонент, то есть компонент с индексом 2 (поскольку компоненты имеют индекс 0).

Получив это свойство, мы просто добавим два ключевых кадра: один для начального кадра (с нашим текущим поворотом 0) и другой для конечного кадра (со случайным поворотом одного или больше полукругов вокруг Солнца, так что планеты имеют различных скоростей ). И мы позаботимся о том, чтобы эти ключевые кадры использовали режим линейной интерполяции 😉

Примечание: все повороты должны быть записаны с использованием  радиан .

 из математического импорта пи
# ...
N_ПЛАНЕТЫ = 6
START_FRAME = 1
КОНЕЦ_КАДР = 200
для n в диапазоне (N_PLANETS):
    # ...
    # настроить данные анимации планеты
    планета.animation_data_create()
    planet.animation_data.action = bpy.data.actions.new(name="RotationAction")
    fcurve = планета.animation_data.action.fcurves.new(
        data_path="rotation_euler", индекс=2
    )
    k1 = fcurve.keyframe_points.insert(
        кадр = START_FRAME,
        значение=0
    )
    k1.interpolation = "ЛИНЕЙНАЯ"
    k2 = fcurve.keyframe_points.insert(
        кадр=END_FRAME,
        значение=(2 + случайный() * 2) * число пи
    )
    k2.interpolation = "ЛИНЕЙНАЯ" 

Если вы очистите свою сцену и перезапустите скрипт, вы увидите, что… ничего не происходит! Планеты не двигаются, даже когда вы воспроизводите анимацию!

И это потому, что они действительно вращаются… но не вокруг правой оси! На данный момент планеты просто вращаются, они вращаются вокруг своей локальной оси Z.

Чтобы исправить это, нам просто нужно изменить точку поворота наших объектов и привязать ее к курсору, находящемуся в исходной точке мира (там же, где находится наше солнце):

 # ...
для n в диапазоне (N_PLANETS):
    # ...
    # сделать планету активным объектом
    bpy.context.view_layer.objects.active = планета
    планета.select_set(Истина)
    # установить источник объекта в начале мира
    bpy.ops.object.origin_set(type="ORIGIN_CURSOR", center="MEDIAN")
    # настроить данные анимации планеты
    # ... 

Теперь, если вы наведете курсор на 3D-изображение и нажмете клавишу пробела, время начнет течь, и заиграет анимация, заставляющая наши планеты вращаться вокруг солнца! 🙂

Шаг 7 (дополнительный): автоматическая очистка сцены при запуске скрипта

После запуска скрипта мы создали два типа ресурсов  в нашей сцене: 3D-объекты для планет, солнце и орбитальные кольца; и динамические материалы для планет.

Избавиться от этого довольно просто: нам просто нужно использовать подмодуль bpy.data, чтобы просмотреть наши объекты и наши материалы, проверить имена и удалить те, которые мы создали при запуске скрипта:

 # ...
def delete_object (имя):
    # пытаемся найти объект по имени
    если имя в bpy.data.objects:
        # если он существует, выделите его и удалите
        obj = bpy.data.objects[имя]
        obj.select_set(Истина)
        bpy.ops.object.delete(use_global=False)
N_ПЛАНЕТЫ = 6
START_FRAME = 1
КОНЕЦ_КАДР = 200
# чистая сцена + материалы планеты
delete_object("Солнце")
для n в диапазоне (N_PLANETS):
    delete_object("Планета-{:02d}".format(n))
    delete_object("Радиус-{:02d}".format(n))
для m в bpy.data.materials:
    bpy.data.materials.remove (м)
# ... 

Теперь вы можете запускать скрипт сколько угодно раз: каждый раз сцена сначала будет очищена  так, что вы получите только один экземпляр нашей «солнечной системы» 🙂

Шаг 8 (бонус): Авто -настройка свойств сцены, механизма рендеринга и настроек 3D-просмотра

Для более приятной визуализации с небольшим эффектом цветения , темным фоном и отсутствием сетки или осей X/Y, вы даже можете добавить следующий фрагмент в начало вашего скрипта для настройки сцены с хорошими настройками:

 # . ..
защита find_3dview_space():
    # находим панель 3D-просмотра и ее экранное пространство
    площадь = нет
    для a в bpy.data.window_managers[0].windows[0].screen.areas:
        если a.type == "VIEW_3D":
            площадь = а
            сломать
    вернуть area.spaces[0], если область еще bpy.context.space_data
определение setup_scene():
    # (установить черный фон)
    bpy.data.worlds["Мир"].node_tree.nodes["Фон"].inputs[0].default_value = (0, 0, 0, 1)
    # (убедитесь, что мы используем движок рендеринга EEVEE + включаем эффект цветения)
    сцена = bpy.context.scene
    scene.render.engine = "BLENDER_EEVEE"
    scene.eevee.use_bloom = Истина
    # (установить начало/конец/текущие кадры анимации)
    сцена.frame_start = START_FRAME
    scene.frame_end = КОНЕЦ_КАДР
    scene.frame_current = START_FRAME
    # получить текущий 3D вид (среди всех видимых окон
    # в рабочей области)
    пробел = find_3dview_space()
    # применить "рендеринговый" режим затенения + скрыть все
    # дополнительные маркеры, сетки, курсоры. ..
    space.shading.type = 'ОТРЕЗАНИРОВАНО'
    space.overlay.show_floor = Ложь
    space.overlay.show_axis_x = Ложь
    space.overlay.show_axis_y = Ложь
    space.overlay.show_cursor = Ложь
    space.overlay.show_object_origins = Ложь
N_ПЛАНЕТЫ = 6
START_FRAME = 1
КОНЕЦ_КАДР = 200
# установить настройки сцены
setup_scene()
# ...
# снять выделение со всех объектов
bpy.ops.object.select_all(action='ОТМЕНИТЬ ВЫБОР') 

Заключение

Blender — не единственная 3D-программа, позволяющая программировать сцены и автоматизировать задачи; но он оправдывает ожидания, и с каждой новой версией Blender постепенно становится надежным универсальным решением для производства компьютерной графики , от раскадровки с помощью Grease Pencil до компоновки на основе узлов.

Тот факт, что вы можете использовать скрипты Python всего с несколькими дополнительными пакетами для пакетного создания экземпляров объектов, генерировать материал процедурно, настраивать параметры рендеринга или даже получать пользовательскую статистику по вашему текущему проекту, — это здорово! Для меня это способ облегчить нагрузку на утомительные задачи, а также привлечь разработчиков к вечеринке, чтобы расширить это сообщество творческих инструментов за пределы художников.