3d форум по Blender

Blender => Другое => BLENDERMETRY (Блендерметрия) => Тема начата: sungreen от 18 Ноябрь 2012, 08:19:54

Название: Open Shading Language
Отправлено: sungreen от 18 Ноябрь 2012, 08:19:54
(http://content.foto.mail.ru/mail/unixinfo/_myphoto/s-328.png)

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 новый текстовый блок, ввести код скрипта ...
(http://content.foto.mail.ru/mail/unixinfo/_myphoto/s-329.png)
... создать объект, добавить материал, в редакторе нодов добавить из секции Script->Script и указать текстовый блок с нашим кодом ...
(http://content.foto.mail.ru/mail/unixinfo/_myphoto/s-330.png)

... Дополнительные настройки можно увидеть в ролике ...
out22 (http://www.youtube.com/watch?v=I9pHqrh7Ogs&feature=youtu.be#)


[вложение удалено Администратором]
Название: Re: Open Shading Language
Отправлено: sungreen от 12 Декабрь 2012, 10:37:18
(http://content.foto.mail.ru/mail/unixinfo/_myphoto/s-347.png)

В начале декабря этого года мы с Лялей посетили конференцию CG Event  в Holiday Inn в Сокольниках, посвящённую компьютерной графике.
http://www.cgevent.ru/

Очевидно, что нацелены мы были на Blender Block, но постарались попасть и на другие выступления и в первую очередь на Pixar. Выступление Константина Промохова было посвящено созданию анимационного фильма «Храбрая сердцем». По ходу выступления он затронул множество технологических тонкостей и в частности тему использования процедурных текстур.

(http://shkolazhizni.ru/img/content/i109/109758_or.jpg)

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

Собственно Константин дал ссылку на такой ресурс http://iquilezles.org/live/index.htm , и часть материала с этого ресурса вошла в его презентацию.

formulanimations :: creating simple clover (http://www.youtube.com/watch?feature=player_embedded&v=-z8zLVFCJv4#)

Но теперь, в связи с выходом версии Blender 2.65 мы тоже имеем возможность писать собственные шейдеры. Вот пример создания клевера, о котором рассказывал в своем выступлении Константин Промохов, но переработанный под Blender/Cycles с помощью   Open Shading Language для Cycles.

Во вложении лежит blend файл с этим примером.
Вот короткое описание, что и как получилось. Итак создадим текстовый блок, внесем туда код шейдера, создадим в редакторе нодов узел Scripts и укажем наш текстовый блок в качестве источника кода.
(http://content.foto.mail.ru/mail/unixinfo/_myphoto/s-338.png)


Далее будут показаны изменения в коде шейдера и как они повлияли на результат визуализации.

Код: 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.

(http://content.foto.mail.ru/mail/unixinfo/_myphoto/s-332.png)


Код: 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)

(http://content.foto.mail.ru/mail/unixinfo/_myphoto/s-333.png)

Код: 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) - функция возведения в степень


(http://content.foto.mail.ru/mail/unixinfo/_myphoto/s-334.png)

Код: 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);
}

(http://content.foto.mail.ru/mail/unixinfo/_myphoto/s-335.png)

Код: 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);
}

(http://content.foto.mail.ru/mail/unixinfo/_myphoto/s-336.png)



А вот тест заполения. Для создания ланшафта задействавано 64 фейса.


(http://content.foto.mail.ru/mail/unixinfo/_myphoto/s-343.png)

... или так ...
(http://content.foto.mail.ru/mail/unixinfo/_myphoto/s-344.png)

... во вложении есть файл с примером заполнения клеверного поля ...

(http://content.foto.mail.ru/mail/unixinfo/_myphoto/s-348.png)

[вложение удалено Администратором]
Название: Re: Open Shading Language
Отправлено: sungreen от 15 Декабрь 2012, 08:57:34
... добавил видео как пользовать simple-clover шейдер ...
out20 (http://www.youtube.com/watch?v=dcI8jvUuC0U#)
Название: Re: Open Shading Language
Отправлено: sungreen от 22 Декабрь 2012, 15:01:51
(https://lh6.googleusercontent.com/-FN_CqOwxCNE/UNWSWkgPaiI/AAAAAAAAAGA/eqsf6FQ0ErM/s1280/20121219-color.png)
... update simple-clover-shader ...
... обновил клеверный шейдер, поправил канал смещения ...


[вложение удалено Администратором]
Название: Re: Open Shading Language
Отправлено: sungreen от 07 Январь 2013, 22:24:20
... опенсоус в действии ...
... пошли вариации на цветочную тему  (Flowers OSL) ...
... комараде Meta-Androcto из Австралии сделали вот такое, внеся модификации в simple-clover-shader ...

http://blenderartists.org/forum/showthread.php?277334-Flowers-OSL

(http://content.foto.mail.ru/mail/unixinfo/_myphoto/s-395.jpg)
Название: Re: Open Shading Language
Отправлено: sungreen от 19 Январь 2013, 00:12:29
... комараде Meta-Androcto опубликовал на Blenderswap  набор материалов Meta s Massive Cycles Matlib v15 Alpha ...
... это коллекция, собранных автором пакета OSL скриптов, в том числе в эту коллекцию попал и simple clover script ...
http://www.blendswap.com/blends/materials/meta-s-massive-cycles-matlib-v15-alpha/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+Blendswap+%28Blendswap.com%29
Название: Re: Open Shading Language
Отправлено: sungreen от 09 Сентябрь 2013, 19:59:02
... в августе сего года  Jimmy Gunawan опубликовал интересную заметку с сылками на наш форум http://blendersushi.blogspot.ru/2013/08/osl-clover-x-flower.html  ...
... мне очень понравилась развитие темы с клевером на его ресурсе ...

... Jimmy Gunawan, very many thanks  ...