Шейдеры для iOS (shaderlab по урокам Jessy)

Шейдерлаб (fixed function pipeline) и cg\glsl шейдеры для OpenGL ES 2.0 для мобилок

Шейдеры для iOS (shaderlab по урокам Jessy)

Сообщение gnoblin 02 ноя 2010, 17:04

Смотрю уроки от Jessy по шейдерлабу и "шейдерам" для ифона.
http://www.youtube.com/user/JessyUV#g/c ... 16DCCC9F61

В эту тему буду копипастить код, думаю где-то пригодится.

Первый шейдер (что делает: равномерно окрашивает объект в цвет, который задан в инспекторе):
Синтаксис:
Используется glsl
Shader "SL/SimpleColor"
{
        Properties
        {
                _Color ("Color", Color) = (1,1,1,0)
        }
       
        SubShader
        {
                Color[_Color]
                Pass{}
        }
}
 
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Шейдеры для iOS (по урокам Jessy)

Сообщение gnoblin 06 ноя 2010, 21:40

Второй шейдер (что делает: накладывает текстуру без реакции на какое-либо освещение - в т.ч. ambient, настройка цвета ни на что не влияет).

Синтаксис:
Используется glsl
Shader "SL/SimpleTexture"
{
        Properties
        {
                _MainTex("Tx", 2D) = "white"{}
                _Color ("Color", Color) = (1,1,1,0)
        }
       
        SubShader
        {
                Pass
                {
                        Color[_Color]
                        SetTexture[_MainTex]
                }      
        }
}
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Шейдеры для iOS (по урокам Jessy)

Сообщение gnoblin 06 ноя 2010, 21:46

Третий шейдер (что делает: накладывает текстуру, но изменяет мапинг на объекте).

Первый шарик: новые ув-координаты с опцией TexGen ObjectLinear.
Второй шарик: предыдущий шейдер (простое наложение текстуры).

sl_3.jpg


Синтаксис:
Используется glsl
Shader "SL/SimpleTexture_ObjectLinearMapping"
{
        Properties
        {
                _MainTex("Tx", 2D) = "white" {TexGen ObjectLinear}
                _Color ("Color", Color) = (1,1,1,0)
        }
       
        SubShader
        {
                Pass
                {
                        Color[_Color]
                        SetTexture[_MainTex]
                }
        }
}
У вас нет доступа для просмотра вложений в этом сообщении.
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Шейдеры для iOS (по урокам Jessy)

Сообщение gnoblin 06 ноя 2010, 21:54

Четвертый шейдер (что делает: накладывает текстуру, но изменяет мапинг на объекте).

Первый шарик: новые ув-координаты с опцией TexGen EyeLinear (плоскость которая мапит объект повернута на камеру).
Второй шарик: простое наложение текстуры.

sl_4.jpg


Синтаксис:
Используется glsl
Shader "SL/SimpleTexture_EyeLinearMapping"
{
        Properties
        {
                _MainTex("Tx", 2D) = "white" {TexGen EyeLinear}
                _Color ("Color", Color) = (1,1,1,0)
        }
       
        SubShader
        {
                Pass
                {
                        Color[_Color]
                        SetTexture[_MainTex]
                }
               
               
        }
}
 
У вас нет доступа для просмотра вложений в этом сообщении.
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Шейдеры для iOS (по урокам Jessy)

Сообщение gnoblin 06 ноя 2010, 22:03

Пятый шейдер (что делает: накладывает текстуру, но изменяет мапинг на объекте).

Первый куб: новые ув-координаты с опцией TexGen SphereMap ("развертка" по сфере).
Второй куб: простое наложение текстуры.

sl_5.jpg


Синтаксис:
Используется glsl
Shader "SL/SimpleTexture_SphereMapMapping"
{
        Properties
        {
                _MainTex("Tx", 2D) = "white" {TexGen SphereMap}
                _Color ("Color", Color) = (1,1,1,0)
        }
       
        SubShader
        {
                Pass
                {
                        Color[_Color]
                        SetTexture[_MainTex]
                }
        }
}
 
У вас нет доступа для просмотра вложений в этом сообщении.
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Шейдеры для iOS (по урокам Jessy)

Сообщение gnoblin 06 ноя 2010, 22:47

Интересная операция: "signed add".

SetTexture[_MainTex] {Combine texture +- texture}

я так понял это эквивалентно a+b-0.5 :)
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Шейдеры для iOS (по урокам Jessy)

Сообщение gnoblin 06 ноя 2010, 22:51

Шейдер номер 6 (что делает: накладывает текстуру без реакции на какое-либо освещение - в т.ч. ambient, подкрашивает текстуру цветом).

sl_colored_texture.jpg


Синтаксис:
Используется glsl
Shader "SL/SimpleColoredTexture"
{
        Properties
        {
                _MainTex("Tx", 2D) = "white" {}
                _Color ("Color", Color) = (1,1,1,0)
        }
       
        SubShader
        {
                Pass
                {
                        Color[_Color]
                        SetTexture[_MainTex] {Combine texture*primary}
                }
        }
}
У вас нет доступа для просмотра вложений в этом сообщении.
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Шейдеры для iOS (по урокам Jessy)

Сообщение gnoblin 06 ноя 2010, 23:05

Шейдер номер 7 (что делает: инвертирует текстуру)

sl_invert_texture.jpg


Синтаксис:
Используется glsl
Shader "SL/Combiner1"
{
        Properties
        {
                _MainTex("Tx", 2D) = "white" {}
                _Color ("Color", Color) = (1,1,1,0)
        }
       
        SubShader
        {
                Pass
                {
                        Color[_Color]
                        SetTexture[_MainTex] {Combine one - texture}
                }
        }
}
У вас нет доступа для просмотра вложений в этом сообщении.
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Шейдеры для iOS (shaderlab по урокам Jessy)

Сообщение gnoblin 06 ноя 2010, 23:07

Шейдер 8 (что делает: выводит альфаканал текстуры)

sl_alpha_texture.jpg


Синтаксис:
Используется glsl
Shader "SL/Combiner2"
{
        Properties
        {
                _MainTex("Tx", 2D) = "white" {}
                _Color ("Color", Color) = (1,1,1,0)
        }
       
        SubShader
        {
                Pass
                {
                        Color[_Color]
                        SetTexture[_MainTex] {Combine texture alpha}
                }
        }
}
У вас нет доступа для просмотра вложений в этом сообщении.
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Шейдеры для iOS (shaderlab по урокам Jessy)

Сообщение gnoblin 06 ноя 2010, 23:11

Код: Выделить всё
SetTexture[_MainTex] {Combine texture alpha double}
и
Код: Выделить всё
SetTexture[_MainTex] {Combine texture alpha quad}
выведет результат предыдущего шейдера в 2 и в 4 раза ярче, соответственно.
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Шейдеры для iOS (shaderlab по урокам Jessy)

Сообщение gnoblin 06 ноя 2010, 23:18

Шейдер 9.
Показывает как можно формировать цвет объекта внутри пасса.

Синтаксис:
Используется glsl
Shader "SL/Combiner3"
{
        Properties
        {
                _MainTex("Tx", 2D) = "white" {}
                _Color ("Color", Color) = (1,1,1,0)
                _Num("Num", Float) = 1
        }
       
        SubShader
        {
                Pass
                {
                        SetTexture[_]
                        {
                                ConstantColor([_Num], [_Num], .5, [_Num])
                               
                                Combine constant
                        }
                }
        }
}
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Шейдеры для iOS (shaderlab по урокам Jessy)

Сообщение gnoblin 21 ноя 2010, 18:56

Интересная вещь:

в справке приводится код только вида
Код: Выделить всё
Blend DstColor SrcColor
,
в видео чел говорит о том, что альфу можно блендить отдельно,
т.е.
Код: Выделить всё
Blend DstColor SrcColor, One Zero
(например)
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Шейдеры для iOS (shaderlab по урокам Jessy)

Сообщение gnoblin 21 ноя 2010, 19:00

На iOS устройствах до iphone 3gs можно использовать два "texture stages" (как это по-русски? :-\) и только 1 constant color в пассе.

В более новых устройствах я так понял можно применять 8 texture stages в одном пассе, и использовать 8 разных constant color.
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт


Вернуться в Mobile shaders

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1