Addon для генерации материалов Cycles Blender

Python
Sandbox
Добрый день, уважаемые хабравчане. Некоторое время назад я сделала плагин «Shader Generator» – аддон, реализующий идею параметрического генерирования и редактирования шейдеров (материалов) встроенного рендера Cycles.



Зачем оно нужно


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



Как оно устроено


Принцип работы аддона заключается в импорте в рабочую сцену дерева всех необходимых для генерации шейдера узлов, объединенных в универсальную группу (Node Group). Дальнейшее редактирование происходит посредством традиционных элементов управления в панели свойств материала. Преимущества такого подхода заключаются в интуитивности способа для пользователя не имевшего опыта работы с узловой архитектурой шейдеров Cycles. Отличительной особенностью аддона является оригинальная система сохранения пользовательских пресетов материалов на жесткий диск, посредством JSON.

Группа узлов, содержащая в себе все узлы, определяющие финальный вид шейдера, находится в отдельном .blend файле, в папке с аддоном. Это позволяет не только в разы сократить объемы кода, но и максимально оперативно, без программирования, вносить изменения и дополнения в сам шейдер.

Как оно работает


  • Помещаем плагин в папку Addons
  • Ставим галку в UserPreferences
  • Выбираем BlenderRender/Cycles
  • Выбираем объект
  • Переходим во вкладку Materials
  • Жмем GenerateShader
  • Готово!




Предустановлены 5 категорий материалов: металл, стекло, полупрозрачный, камень, снег

Немного скриншотов интерфейса




Полученные материалы


Здесь, следует отметить, что я далеко не моделлер и как настроить рендер Cycles наилучшим образом я ПОКА не знаю.





Python


Структура аддона типична для Blender'a.
Есть несколько классов, реализующих операторы, вызываемые пользователем из графического интерфейса. Наследуют эти классы от bpy.types.Operator и имеют типичную структуру из свойств-описаний оператора и чаще всего одного метода execute, исполняющего заложенный функционал. В нескольких операторах так же объявлен метод invoke, вызываемый перед execute и позволяющий пользователю задать настройки оператора перед исполнением.
Графическая часть аддона реализуется с помощью класса MatGenPanel, наследующего от bpy.types.Panel. Как и в случае с операторами, вначале объявлены свойства с описанием панели для внутренних механизмов Блендера. Затем следует метод проверки контекста poll, позволяющий ограничить видимость панели при соблюдении определенных условиях. В нашем случае таким условием является режим рендеринга в Cycles.
Метод draw производит отрисовку элементов графического интерфейса.
Наконец, глобальные функции register и unregister добавляют все объявленные классы во внутренне пространство Блендера посредством вспомогательных методов API.

Спасибо, что дочитали до конца, надеюсь, данная статья не была смертельно скучной. Возможно, что кому-нибудь данный материал может принести практическую пользу.

Аддон можно скачать по ссылке: www.dropbox.com/s/96d6iod25yhmhg5/matgen_last.7z
Tags:BlenderCyclesматериалы3dpythonшейдерыshaders
Hubs: Python
+45
29.9k 90
Comments 11

Popular right now

Программист Python
to 200,000 ₽YLabRemote job
Python-разработчик Middle
to 125,000 ₽ТатнефтьКазань
Python Developer
from 200,000 to 300,000 ₽HighTeamМосква
Unity разработчик
from 150,000 to 200,000 ₽Очень ИнтересноRemote job

Top of the last 24 hours