Автор Тема: Open Shading Language  (Прочитано 5464 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Open Shading Language
« : 18 Ноября 2012, 08:19:54 »


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
« Последнее редактирование: 18 Ноября 2012, 08:58:56 от sungreen »
Для Кота

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Re: Open Shading Language
« Ответ #1 : 12 Декабря 2012, 10:37:18 »


В начале декабря этого года мы с Лялей посетили конференцию 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 фейса.




... или так ...


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

« Последнее редактирование: 15 Декабря 2012, 10:14:05 от sungreen »
Для Кота

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Re: Open Shading Language
« Ответ #2 : 15 Декабря 2012, 08:57:34 »
... добавил видео как пользовать simple-clover шейдер ...
out20 (Включения отключены, лимит исчерпан)
Для Кота

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Re: Open Shading Language
« Ответ #3 : 22 Декабря 2012, 15:01:51 »

... update simple-clover-shader ...
... обновил клеверный шейдер, поправил канал смещения ...

« Последнее редактирование: 07 Января 2013, 22:46:49 от sungreen »
Для Кота

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Re: Open Shading Language
« Ответ #4 : 07 Января 2013, 22:24:20 »
... опенсоус в действии ...
... пошли вариации на цветочную тему  (Flowers OSL) ...
... комараде Meta-Androcto из Австралии сделали вот такое, внеся модификации в simple-clover-shader ...

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

« Последнее редактирование: 08 Января 2013, 09:06:11 от sungreen »
Для Кота

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Re: Open Shading Language
« Ответ #5 : 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
Для Кота

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Re: Open Shading Language
« Ответ #6 : 09 Сентября 2013, 19:59:02 »
... в августе сего года  Jimmy Gunawan опубликовал интересную заметку с сылками на наш форум http://blendersushi.blogspot.ru/2013/08/osl-clover-x-flower.html  ...
... мне очень понравилась развитие темы с клевером на его ресурсе ...

... Jimmy Gunawan, very many thanks  ...
Для Кота

 

* По форуму

* Последние вложения

Слежение.jpg
Скачано: 9
Автор: Barabashka
vvv.png
Скачано: 67
Автор: Николай Николаев
Слежение.jpg
Скачано: 15
Автор: Barabashka
mehanizm-dlya-podemnoy-krovati-mkb-l633670.jpg
Скачано: 23
Автор: СемёнСемёныч
Безымянный.jpg
Скачано: 22
Автор: СемёнСемёныч