Введение в OSL для Blender

4 ноября 2013 8 комментариев Артем Слаква Скриптинг на Python

Недавно вышла новая книга, посвященная blender: Open Shading Language for Blender. OSL — это язык высокого уровня программирования шейдеров. Автором данной книги является Michel Anders. Он ведет блог, посвященный данной теме, и на специальной странице Вы можете скачать «превью» данной книги, а в случае заинтересованности, купить полную версию. Сам автор говорит, что книга предназначена для тех, кто хочет расширить свои навыки создания материалов.

Так как книга о высокоуровневом языке программирования, то для ее освоения необходимо иметь, как минимум, твердое представление о том, что такое язык программирования. Также Вы должны быть уверенным пользователем блендер, в частности, без проблем создавать материалы, при помощи нодов в окне Node Editor. Ну и самый досадный момент — книга на английском :( Так что, покорятся вершины OSL для Blender далеко не многим…

Но, из-за того, что «превью» книги распространяется абсолютно бесплатно, я решил перевести его на великий и могучий… К тому же, этих основ более чем достаточно, чтобы понять, что это за «зверь» такой, и как с ним бороться (надеюсь, меня не съедят комментаторы за авторские права).

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


Подготовка Blender

В связи с тем, что при работе с OSL может происходить множество ошибок, которые отображаются в консоли, то будет разумно открыть ее. Для того, чтобы сделать это в Linux или OSX, достаточно просто запустить blender через консоль (набрать в ней слово blender). Пользователям Windows нужно запустить блендер и включить консоль в верхнем меню Window > Toggle System Console.

OSL в настоящее время доступен только для Cycles, поэтому мы будем работать именно с этим движком.

Откройте блендер со сценой по умолчанию. Измените тип рендера на Cycles Render. Далее нужно убедиться, что в качестве вычислительного устройства у Вас выбран CPU (OSL сейчас не поддерживает GPU) и отметить пункт Open Shading Language.
osl1
Разделите окно 3D-вида напополам по горизонтали, и в любом из них переключитесь на Node Editor. На этом с подготовкой закончено, можно приступать к созданию первого шейдера OSL!

Создание первого шейдера OSL

Создайте для Вашего куба материал и затем добавьте нод Script (Shift + A > Script > Script). Данный нод имеет всего две кнопки:

  • Internal — OSL-скрипт присутствует в текстовом редакторе блендера.
  • External — OSL-скрипт находится в файле на жестком диске компьютера.

Оба метода хороши, но мы будем использовать External. Теперь нам необходимо создать файл, который мы назовем firstshader.osl, и загрузить его в нод Script. Файл должен содержать следующий код:

1
2
3
4
5
6
shader darken(
  color In = 1,
  output color Out = 1
){
  Out = In * 0.5;
}

Соедините ноды, как показано на рисунке ниже, и в окне 3D-вида включите режим отображения Rendered.
osl2
В первой строке объявляется шейдер, который называется darken. Шейдер выглядит как функция с параметрами, и во второй строке определяется входной параметр In. Тип этого параметра — цвет (color один из основных типов в OSL), и его значение по умолчанию равно 1. Это означает, что все три компонента цвета (красный, зеленый и синий) будут установлены в значение 1, что делает цвет белым.

Следующая строчка определяет параметр Out, который также имеет тип Color, и его значение по умолчанию равно 1. Создали мы этот выходной параметр при помощи ключевого слова output. Когда шейдер компилируется, blender создает соответствующие сокеты с обеих сторон нода (входные слева, выходные справа). Также он окрашивает сокеты в соответствующие цвета. В случае с параметром color, сокеты будут желтыми.

Все параметры должны быть определены по умолчанию. Если к входному параметру нода не будет подключен другой нод, то будет использоваться значение, определенное по умолчанию. Также, если ничего не подключено к входу, то данное значение может быть изменено пользователем. В зависимости от типа сокета, соответствующий редактор появится при клике по параметру (например, popup выбора цвета, если это цвет). Значение не подключенного сокета может быть даже анимировано (при помощи горячей клавиши I), как и практически все в Blender.

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

Тело этого шейдера состоит из одной строки (строка 5), в которой входной параметр (In) умножается на 0.5, и результат присваивается параметру Out.

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


Если данный урок был интересен, и Вы желаете углубиться в изучение OSL для Blender — оставляйте отзывы в комментариях.

О сайте

На данном сайте Вы сможете найти множество уроков и материалов по графическому
редактору Blender.

Контакты

Для связи с администрацией сайта Вы можете воспользоваться следующими контактами:

Email:
info@blender3d.com.ua

Следите за нами

Подписывайтесь на наши страницы в социальных сетях.

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

Помимо уроков по Blender, Вы сможете найти готовые 3D-модели, материалы и архивы высококачественных текстур. Сайт регулярно пополняется новым контентом и следит за развитием Blender.