Недавно вышла новая книга, посвященная blender: Open Shading Language for Blender. OSL — это язык высокого уровня программирования шейдеров. Автором данной книги является Michel Anders. Он ведет блог, посвященный данной теме, и на специальной странице Вы можете скачать «превью» данной книги, а в случае заинтересованности, купить полную версию. Сам автор говорит, что книга предназначена для тех, кто хочет расширить свои навыки создания материалов.
Так как книга о высокоуровневом языке программирования, то для ее освоения необходимо иметь, как минимум, твердое представление о том, что такое язык программирования. Также Вы должны быть уверенным пользователем блендер, в частности, без проблем создавать материалы, при помощи нодов в окне Node Editor. Ну и самый досадный момент — книга на английском :( Так что, покорятся вершины OSL для Blender далеко не многим…
Но, из-за того, что «превью» книги распространяется абсолютно бесплатно, я решил перевести его на великий и могучий… К тому же, этих основ более чем достаточно, чтобы понять, что это за «зверь» такой, и как с ним бороться (надеюсь, меня не съедят комментаторы за авторские права).
В этом посте перевод лишь первой главы, описывающей процесс создания самого простого шейдера, а в случае заинтересованности читателями, будет перевод всех остальных примеров, доступных в «превью» версии.
Подготовка Blender
В связи с тем, что при работе с OSL может происходить множество ошибок, которые отображаются в консоли, то будет разумно открыть ее. Для того, чтобы сделать это в Linux или OSX, достаточно просто запустить blender через консоль (набрать в ней слово blender). Пользователям Windows нужно запустить блендер и включить консоль в верхнем меню Window > Toggle System Console.
Откройте блендер со сценой по умолчанию. Измените тип рендера на Cycles Render. Далее нужно убедиться, что в качестве вычислительного устройства у Вас выбран CPU (OSL сейчас не поддерживает GPU) и отметить пункт Open Shading Language.
Разделите окно 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.
В первой строке объявляется шейдер, который называется darken. Шейдер выглядит как функция с параметрами, и во второй строке определяется входной параметр In. Тип этого параметра — цвет (color один из основных типов в OSL), и его значение по умолчанию равно 1. Это означает, что все три компонента цвета (красный, зеленый и синий) будут установлены в значение 1, что делает цвет белым.
Следующая строчка определяет параметр Out, который также имеет тип Color, и его значение по умолчанию равно 1. Создали мы этот выходной параметр при помощи ключевого слова output. Когда шейдер компилируется, blender создает соответствующие сокеты с обеих сторон нода (входные слева, выходные справа). Также он окрашивает сокеты в соответствующие цвета. В случае с параметром color, сокеты будут желтыми.
Все параметры должны быть определены по умолчанию. Если к входному параметру нода не будет подключен другой нод, то будет использоваться значение, определенное по умолчанию. Также, если ничего не подключено к входу, то данное значение может быть изменено пользователем. В зависимости от типа сокета, соответствующий редактор появится при клике по параметру (например, popup выбора цвета, если это цвет). Значение не подключенного сокета может быть даже анимировано (при помощи горячей клавиши I), как и практически все в Blender.
Значение по умолчанию для выходного сокета используется в том случае, если нигде в теле шейдера оно не было изменено.
Тело этого шейдера состоит из одной строки (строка 5), в которой входной параметр (In) умножается на 0.5, и результат присваивается параметру Out.
Данный шейдер слишком прост и не показывает многих возможностей, но он дает четкое представление того, как много работы берет на себя сам blender: создает нужные сокеты в нужных местах, окрашивает их в соответствующий цвет и помогает легко изменять параметры шейдера.
Если данный урок был интересен, и Вы желаете углубиться в изучение OSL для Blender — оставляйте отзывы в комментариях.
Тема очень интересная.
Вот ссылки по OSL которые нарыл за некоторое время:
(список ссылок перемещен администратором)
Заполненное клевером поле, и библиотека OSL шейдеров… и прочее и прочее.
Надеюсь поможет в написании еще парочки статей на данную тему.
Спасибо за подборку ссылок. Все прочту!
А на будущее, такое большое количество ссылок бросайте мне на почту, иначе поисковики меня забанят.
Меня заинтересовало. Пожалуйста, переведи остальное.
очень хороший урок. Увидеть бы уроки по хорошему текстурированию и созданию материала для игрового движка….
Значение переменной типа color равной единицы это зеленый цвет? Интересно.
Откуда такие заключения? (:wonder:)
https://www.youtube.com/watch?v=sEqQFZkVVEE тоже интересно
Поглядим на досуге, спасибо.