Страница 1 из 1

glsl шейдеры для OGLES 2.0

СообщениеДобавлено: 08 дек 2010, 05:03
gnoblin
привет.

существуют какие-то примеры GLSL шейдеров для юнити под мобилки (OpenGL ES 2.0)? :-\

Re: glsl шейдеры для OGLES 2.0

СообщениеДобавлено: 08 дек 2010, 05:04
gnoblin
нашел вот такой на офе

http://forum.unity3d.com/threads/39629- ... post398170
Синтаксис:
Используется glsl
Shader "Fast" {
        Properties {
                _MainTex ("Base (RGB)", 2D) = "white" {}
        }
       
        SubShader {
                Tags { "Queue" = "Geometry" }
               
                Pass {
                        GLSLPROGRAM
                       
                        #ifdef VERTEX
                       
                        varying vec2 TextureCoordinate;
                       
                        void main()
                        {
                                gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
                                TextureCoordinate = gl_MultiTexCoord0.xy;
                        }
                       
                        #endif
                       
                        #ifdef FRAGMENT
                                               
                        uniform sampler2D _MainTex;
                        varying vec2 TextureCoordinate;
                       
                        void main()
                        {
                                gl_FragColor = texture2D(_MainTex, TextureCoordinate);
                        }
                       
                        #endif
                       
                        ENDGLSL
                }
        }
}

Re: glsl шейдеры для OGLES 2.0

СообщениеДобавлено: 08 дек 2010, 05:11
gnoblin
и он пишет ошибку в редакторе с включенной платформой андроид))

Re: glsl шейдеры для OGLES 2.0

СообщениеДобавлено: 08 дек 2010, 05:17
gnoblin
а на девайсе работает - ура!

Re: glsl шейдеры для OGLES 2.0

СообщениеДобавлено: 08 дек 2010, 05:23
gnoblin
придется поглотить книгу по шейдингу для опенгл (popcorn1)

Re: glsl шейдеры для OGLES 2.0

СообщениеДобавлено: 08 дек 2010, 05:55
gnoblin
Мой первый GLSL шейдер для мощных мобилок :D.

Текустура+цвет (без освещения итд).

Синтаксис:
Используется glsl
Shader "OpenGL ES 2.0/FastColor" {
        Properties {
                _MainTex ("Base (RGB)", 2D) = "white" {}
                _LC("LC", Color) = (1,0,0,0)
        }
       
        SubShader {
                Tags { "Queue" = "Geometry" }
               
                Pass {
                   
                        GLSLPROGRAM
                       
                        #ifdef VERTEX
                       
                        varying vec2 TextureCoordinate;
                       
                        void main()
                        {
                                gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
                                TextureCoordinate = gl_MultiTexCoord0.xy;
                        }
                       
                        #endif
                       
                        #ifdef FRAGMENT
                                               
                        uniform sampler2D _MainTex;
                        varying vec2 TextureCoordinate;
                        uniform vec4 _LC;
                       
                        void main()
                        {
                                 vec4 c;
                                 c.xyz = texture2D(_MainTex, TextureCoordinate).xyz * _LC.xyz;
                                 c.w = 1.0;
                                 gl_FragColor = c;
                        }
                       
                        #endif
                       
                        ENDGLSL
                }
        }
}

Re: glsl шейдеры для OGLES 2.0

СообщениеДобавлено: 08 дек 2010, 06:47
gnoblin
Specular :D.

Синтаксис:
Используется glsl
Shader "FastSpecular" {
        Properties {
                _MainTex ("Base (RGB)", 2D) = "white" {}
                _LC("LC", Color) = (1,0,0,0)
                _LP("LP", Vector) = (1,1,1,1)
        }
       
        SubShader {
                Tags { "Queue" = "Geometry" }
               
                Pass {
                   
                        GLSLPROGRAM
                       
                        #ifdef VERTEX
                       
                        const float SpecularContribution = 0.3;
                        const float DiffuseContribution  = 1.0 - SpecularContribution;

                        uniform vec4 _LP;
                        varying vec2 TextureCoordinate;
                        varying float LightIntensity;

                        void main()
                        {
                                gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
                                TextureCoordinate = gl_MultiTexCoord0.xy;
                               
                                vec3 ecPosition = vec3(gl_ModelViewMatrix * gl_Vertex);
                                vec3 tnorm = normalize(gl_NormalMatrix * gl_Normal);
                                vec3 lightVec = normalize(_LP.xyz - ecPosition);
                               
                                vec3 reflectVec = reflect(-lightVec, tnorm);
                                vec3 viewVec    = normalize(-ecPosition);
                                float diffuse   = max(dot(lightVec, tnorm), 0.0);
                               
                                float spec      = 0.0;
                                if (diffuse > 0.0)
                                {
                                        spec = max(dot(reflectVec, viewVec), 0.0);
                                        spec = pow(spec, 16.0);
                                }
                               
                                LightIntensity = DiffuseContribution * diffuse + SpecularContribution * spec;
                        }
                       
                        #endif
                       
                        #ifdef FRAGMENT
                                               
                        uniform sampler2D _MainTex;
                        varying vec2 TextureCoordinate;
                        uniform vec4 _LC;
                        varying float LightIntensity;

                        void main()
                        {
                                 vec4 c;
                                 c.xyz = texture2D(_MainTex, TextureCoordinate).xyz * _LC.xyz;
                                 c *= LightIntensity;
                                 c.w = 1.0;
                                 gl_FragColor = c;
                        }
                       
                        #endif
                       
                        ENDGLSL
                }
        }
}

Re: glsl шейдеры для OGLES 2.0

СообщениеДобавлено: 28 окт 2011, 19:26
artk
пыши еще!

Re: glsl шейдеры для OGLES 2.0

СообщениеДобавлено: 28 окт 2011, 20:36
gnoblin
Уже не очень актуально после того как юнитехи оптимизнули шейдинг и шейдеры для мобилок 8-|.