Blender > BLENDERMETRY (Блендерметрия)
Open Shading Language
sungreen:
Open Shading Language (OSL) - язык программирования шейдеров (полная спецификация, компилятор в байткод, интерпретатор, большая библиотека) API - C++. Возможно создание альтернативных backend'ов, идеально подходит для описания материалов, источников света и т.п.
OSL был разработан Sony Pictures Imageworks для использования в своей внутренней визуализации и используется для функции анимационных фильмов и визуальных эффектов.
http://opensource.imageworks.com/
Это чудо доступно и в Blender. Можно воспользоваться готовыми сборками с graphicall.org или собрать Blender c поддержкой OSL под свою операционную систему самостоятельно.
Сборка производится по несложному алгоритму изложенному в этом документе http://wiki.blender.org/index.php/User:DingTo/OpenShadingLanguage/Compile
Далее будет показано как сделать это на примере calculate-linux http://www.calculate-linux.ru/
--- Код: (bash) ---eix-sync
emerge boost
emerge openimageio
emerge opencolorio
--- Конец кода ---
--- Код: (bash) ---cd /usr/local
git clone git://github.com/DingTo/OpenShadingLanguage.git -b blender-fixes
cd OpenShadingLanguage
make cmakesetup
ccmake ./build/linux64
make
--- Конец кода ---
... далее необходимо собрать Blender из SVN ...
... эта процедура уже была описана здесь http://blender-3d.ru/forum/index.php/topic,342.msg4896.html#msg4896 , нужно добавить поддержку OSL установив опции для CMake ...
CYCLES_OSL=ON
WITH_LLVM=ON
... И так теперь у нас есть Blender c поддержкой OSL, начинаем писать скрипты ...
... что нужно?
1) спецификация на OSL http://wiki.blender.org/index.php/Doc:2.6/Manual/Render/Cycles/Nodes/OSL
2) и вспомнить про работу Shader Nodes
http://wiki.blender.org/index.php/Doc:2.6/Manual/Render/Cycles/Nodes/Shaders
... для примера, небольшие примеры скриптов можно взять вот в теме http://blenderartists.org/forum/showthread.php?270332-OSL-Goodness или сделать по алгоритмам http://glsl.heroku.com/ ...
... вот один из них, Blend файл во вложении ...
--- Код: (OSL) ---// Based on OpenGL Code:
// [url]http://glsl.heroku.com/e#4549.0[/url]
#include <stdosl.h>
shader node_stripes(
float Offset = 1.0,
float Time = 1.0,
point Vector = P,
output color Color = (0.0))
{
vector V = Vector;
V -= Offset;
color Col = color(0.0);
float vertColor = 0.0;
for( float i = 0.; i < 7.; ++i ) {
V[1] += sin(V[0]*(i) + (Time * i * i * .03) ) * 0.15;
float fTemp = abs(1.0 / V[1] / 50.0);
vertColor += fTemp;
Col += color( fTemp*(7.0-i)/7.0, fTemp*i/10.0, pow(fTemp,0.9)*1.5 );
}
Color = Col;
}
--- Конец кода ---
... необходимо создать в Blender Text Editor новый текстовый блок, ввести код скрипта ...
... создать объект, добавить материал, в редакторе нодов добавить из секции Script->Script и указать текстовый блок с нашим кодом ...
... Дополнительные настройки можно увидеть в ролике ...
out22
[вложение удалено Администратором]
sungreen:
В начале декабря этого года мы с Лялей посетили конференцию CG Event в Holiday Inn в Сокольниках, посвящённую компьютерной графике.
http://www.cgevent.ru/
Очевидно, что нацелены мы были на Blender Block, но постарались попасть и на другие выступления и в первую очередь на Pixar. Выступление Константина Промохова было посвящено созданию анимационного фильма «Храбрая сердцем». По ходу выступления он затронул множество технологических тонкостей и в частности тему использования процедурных текстур.
Суть проблемы в том, что сцены очень большие. Желание сделать окружение еще более живим и детальным требует многократного увеличения ресурсов. И в этом случае процедурные текстуры дают возможность не хранить геометрию и другие данные на жестоком диске, а производить вычисления на лету.
Собственно Константин дал ссылку на такой ресурс http://iquilezles.org/live/index.htm , и часть материала с этого ресурса вошла в его презентацию.
formulanimations :: creating simple clover
Но теперь, в связи с выходом версии Blender 2.65 мы тоже имеем возможность писать собственные шейдеры. Вот пример создания клевера, о котором рассказывал в своем выступлении Константин Промохов, но переработанный под Blender/Cycles с помощью Open Shading Language для Cycles.
Во вложении лежит blend файл с этим примером.
Вот короткое описание, что и как получилось. Итак создадим текстовый блок, внесем туда код шейдера, создадим в редакторе нодов узел Scripts и укажем наш текстовый блок в качестве источника кода.
Далее будут показаны изменения в коде шейдера и как они повлияли на результат визуализации.
--- Код: (OSL) ---#include <stdosl.h>
shader simple_clover(
output float Factor = 0.5
)
{
point p = P;
float r = sqrt(dot(p,p));
float f = r;
Factor = f;
}
--- Конец кода ---
float dot (vector A, vector B) - встроенная функция OSL, возвращает скалятное произведение двух весторов (или нормалей), то есть AB=AxBx+AyBy+AzCz.
--- Код: (OSL) ---#include <stdosl.h>
shader simple_clover(
output color Factor = 0.5
)
{
point p = P;
float r = sqrt(dot(p,p));
float f = 0.0;
if(r<0.5) f = 1.0;
Factor = mix(color(1,1,1),color(0,1,0),f);
}
--- Конец кода ---
type mix (type x, type y, type alpha) или type mix (type x, type y, float alpha) - функция линейного смешивая: x*(1-a)+y*(a)
--- Код: (OSL) ---#include <stdosl.h>
shader simple_clover(
output color Factor = 0.5
)
{
point p = P;
float r = sqrt(dot(p,p));
float a = atan2(p[1],p[0]);
float s = 0.5 + 0.5*sin(3*a);
float t = 0.15+ 0.35*pow(s,0.3);
float f = 0.0;
if(r<t) f = 1.0;
Factor = mix(color(1,1,1),color(0,1,0),f);
}
--- Конец кода ---
type atan2 (type y, type x) - жуткое дело, арктангенс, расчитывает угол.
type pow (type x, type y) или type pow (type x, float y) - функция возведения в степень
--- Код: (OSL) ---#include <stdosl.h>
shader simple_clover(
output color Factor = 0.5
)
{
point p = P;
float r = sqrt(dot(p,p));
float a = atan2(p[1],p[0]);
float s = 0.5 + 0.5*sin(3*a);
float t = 0.15 + 0.35*pow(s,0.3);
t += 0.1*pow(0.5+0.5*cos(6*a),0.5);
float f = 0.0;
if(r<t) f = 1.0;
Factor = mix(color(1,1,1),color(0,1,0),f);
}
--- Конец кода ---
--- Код: (OSL) ---#include <stdosl.h>
shader simple_clover(
output color Factor = 0.5
)
{
point p = P;
float r = sqrt(dot(p,p));
float a = atan2(p[1],p[0]);
float s = 0.5 + 0.5*sin(3*a);
float t = 0.15 + 0.35*pow(s,0.3);
t += 0.1*pow(0.5+0.5*cos(6*a),0.5);
float f = 0.0;
float h = r/t;
if(h<1.0) f = 1.0;
Factor = mix(color(1,1,1),(0.1+0.9*h)*color(0,1,0),f);
}
--- Конец кода ---
А вот тест заполения. Для создания ланшафта задействавано 64 фейса.
... или так ...
... во вложении есть файл с примером заполнения клеверного поля ...
[вложение удалено Администратором]
sungreen:
... добавил видео как пользовать simple-clover шейдер ...
out20
sungreen:
... update simple-clover-shader ...
... обновил клеверный шейдер, поправил канал смещения ...
[вложение удалено Администратором]
sungreen:
... опенсоус в действии ...
... пошли вариации на цветочную тему (Flowers OSL) ...
... комараде Meta-Androcto из Австралии сделали вот такое, внеся модификации в simple-clover-shader ...
http://blenderartists.org/forum/showthread.php?277334-Flowers-OSL
Навигация
Перейти к полной версии