Назначение вертексам дополнительных свойств

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

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

Читать далее «Назначение вертексам дополнительных свойств»

Как сохранить данные меша в текст

Иногда бывает необходимо сохранить данные для создания меша (массивы его вертексов и индексов полигонов) в текст, например, для дальнейшего использования в скрипте или аддоне.

Можно экспортировать меш в один из открытых форматов, например в *.obj, но если нужны только данные по вертексам и полигонам, можно использовать следующий несложный скрипт:

Читать далее «Как сохранить данные меша в текст»

Создание кастомного свойства

API Blender предоставляет для использования набор простых типов свойств, описанных в bpy.props (IntProperty,  BoolProperty и т.д.). Но базовых типов не всегда хватает, иногда нужны более сложные. API Blender позволяет группировать простые свойства, создавая таким образом более сложные.

Рассмотрим создание такого свойства на примере матрицы 3х3.

Читать далее «Создание кастомного свойства»

Рисование в окне вьюпорта

API Blender предоставляет возможность рисовать в окне вьюпорта (3D Viewport) при помощи модуля gpu.

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

Читать далее «Рисование в окне вьюпорта»

Как привязать к нажатию кнопки вызов функции, а не оператора

К нажатию кнопки в пользовательском интерфейсе обычно привязывают вызов нужного оператора. Однако часто действия, которые нужно выполнить при нажатии на кнопку, достаточно просты и не требуют оформления в виде отдельного оператора. Да и забивать стек зарегистрированных операторов множеством специфических операторов, рассчитанных на выполнение одной конкретной узкоспециализированной функции не имеет смысла. Гораздо удобнее было бы связать нажатие кнопки с вызовом отдельной функции, однако API Blender позволяет связывать кнопки только с вызовом оператора.

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

Читать далее «Как привязать к нажатию кнопки вызов функции, а не оператора»

Передача параметров в оператор

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

Передаваемый параметр должен быть определен, как свойство оператора.

Читать далее «Передача параметров в оператор»

Решаем проблему несоответствия размера сечения пути с применённым к нему профилем самому профилю

Автор: Андрей М.

Рубрика “Много букв о простом”

Нужна мне рама. Нет, две рамы: одна побольше другая поменьше, но сделанные из одного профиля. Нарисовал прямоугольник, выставил нужные размеры, продублировал, выставил другие размеры. Нарисовал отдельно профиль. Для сечения обоим прямоугольникам применил этот профиль. …почему получились разные рамы? И ни одна не соответствует размеру профиля? А, масштаб забыл применить. Применил. Размеры сечения поменялись, стали другими, но опять не равными профилю. Как сделать равными — читай ниже!

Решаем проблему несоответствия размера сечения пути с применённым к нему профилем самому профилю.

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

Читать далее «Решаем проблему несоответствия размера сечения пути с применённым к нему профилем самому профилю»

Создание точки на кривой Безье

Кривая Безье строится по четырем точкам: две основные точки (p0, p1) и две опорные (p0_hr, p1_hl).

Для того, чтобы построить на кривой дополнительную точку p2 в какой-то момент t, где t изменяется от 0 до 1 и представляет собой соотношение положения строящейся точки p2 к общей длине кривой, нужно проделать следующие вычисления:

Читать далее «Создание точки на кривой Безье»

Симуляция жидкости в Blender 2.80

Автор Pavel_Blend

Про что эта статья?

В этой статье я расскажу про симулятор жидкости в Blender 2.80. Этот симулятор был впервые добавлен в блендер ещё в конце 2005 года, в версию 2.40. С тех пор он изменялся не значительно (изменения были в основном в начале, после внедрения в блендер). Код симулятора был написан сторонним разработчиком по имени Nils Thuerey. Он написал библиотеку для симуляции жидкостей и назвал её El’Beem. Движок является воксельным и основан на методе решёточных уравнений Больцмана. Лучше всего подходит для создания воды, но имеет возможность создавать вязкие жидкости (мёд, шоколад…), которые реализованы не совсем хорошо. Скоро в блендер внедрят новый симулятор Mantaflow (кстати, Nils Thuerey принимает участие в его разработке).

Читать далее «Симуляция жидкости в Blender 2.80»

Shadow catcher в EEVEE

В рендер-движке Cycles есть удобная возможность отрендерить объект с тенью на прозрачном фоне с помощью материала с функцией рендера только падающих на него теней «shadow catcher». В рендер-движке EEVEE такой функции у материалов нет. Однако в EEVEE можно собрать свой «shadow catcher» на основе нодов.

Готовый материал «EEVEE Shadow Catcher» можно скачать в библиотеке BIS.

Читать далее «Shadow catcher в EEVEE»

Таймлапс моделирования софы «Canasta»

Таймлапс полигонального моделирования софы «Canasta».

В процессе моделирования использованы паттерны для модификатора «Tissue» из набора TISSUE: PATCH.

Автор: 1D_Inc.

Освещение текстурой из лампы

В Blender Cycles при использовании стандартных источников освещения типа Light можно освещать объекты, используя любую текстуру, а не только отдельный цвет.

Добавим в сцену любой объект, например сферу:

shift+a — Mesh — UVSphere

и назначим ей простой диффузный материал.

Читать далее «Освещение текстурой из лампы»

Как превратить одиночный элемент BIS в паттерн

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

Для примера загрузим из библиотеки круговой элемент и разместим его по центру объекта.

Читать далее «Как превратить одиночный элемент BIS в паттерн»

Процедурные градиенты

Градиент, помимо ноды «Gradient Texture», можно получить с помощью достаточно простых формул. Рассмотрим математику на примере сферического градиента.

  1. Равномерный градиент

Создается на основе формулы конуса, направленного вершиной вниз.

Читать далее «Процедурные градиенты»

Пикселизирование текстуры

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

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

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

Читать далее «Пикселизирование текстуры»

Как защитить свой аддон от распространения через агрегаторы

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

Читать далее «Как защитить свой аддон от распространения через агрегаторы»

Как управлять видимостью объектов во вьюпорте и при рендере

Самый простой способ заставить нужный объект появляться и исчезать — назначить ему ключи анимации. Для этого нужно навести курсор на значок глаза (видимость во вьюпорте) или фотоаппарата (видимость при рендере) в окне «Outliner», нажать клавишу «i» и далее в Graph Editor управлять созданным ключом так же, как с обычными ключами анимации.

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

«hide_viewport» property cannot be animated

или

«hide_render» property cannot be animated

Однако с помощью Blender Python API видимостью таких объектов можно управлять.

Читать далее «Как управлять видимостью объектов во вьюпорте и при рендере»

Создание свойств для аддона

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

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

Создадим простейший аддон и добавим ему глобальный параметр, поместив его в панель свойств аддона:

Читать далее «Создание свойств для аддона»

Делаем каплю воды и правильный шейдер

Урок по созданию «сплеша» — красивых капель и водяных брызг и настройке процедурного шейдера воды.

Автор: Виталий Сокол.

Blender 2.79, рендер Cycles.

Портирование аддона для Blender 2.7 в Blender 2.8

В API последней версии Blender 2.8 разработчики внесли множество изменений, поэтому практически все скрипты и аддоны, написанные для более ранних версий Blender (2.7 и ниже), перестали работать. Для того, чтобы пользоваться полюбившимися аддонами в новой версии Blender, их нужно портировать — исправить их код для корректной работы с новым API Blender.

Изменения, которые необходимо внести в код аддона, чтобы он заработал в Blender 2.80:

Читать далее «Портирование аддона для Blender 2.7 в Blender 2.8»

Использование IDE Microsoft Visual Studio Code для написания скриптов/аддонов в Blender

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

Одной из таких сред разработки является Visual Studio Code от компании Microsoft. Это бесплатная универсальная IDE, поддерживающая разработку на различных языках программирования, в том числе и на языке API Blender — Python.

Читать далее «Использование IDE Microsoft Visual Studio Code для написания скриптов/аддонов в Blender»

Тайлинг процедурных текстур в Blender

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

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

Читать далее «Тайлинг процедурных текстур в Blender»

Создание процедурных текстур в Blender

Все процедурные текстуры в Blender основаны на математике. Даже такие нерегулярные структуры, как Voronoi и Noise, на самом деле сгенерированы по четким математическим формулами. Внутри каждого базового нода из редактора материалов Blender зашит точный математический алгоритм, в результате работы которого и получается нужное изображение.

Задать подобный алгоритм в привычной математической записи в Blender нельзя. Однако среди прочих нодов Blender предоставляет пользователю ноды группы Math — оболочку над простейшими математическими операциями. С помощью этих нодов можно самостоятельно строить сложные математические алгоритмы, генерирующие интересные текстуры.

Читать далее «Создание процедурных текстур в Blender»