Пойдёт ли на мобилку шейдер?

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

Пойдёт ли на мобилку шейдер?

Сообщение Cr0c 23 июл 2017, 08:49

Шейдер для маски раскраски поверх текстуры, хочу использовать на мобильной платформе.
Не будет ли он слишком тяжелым для этого?
Поверх текстуры лерпом меняется цвет по маске с каждого канала с учетом прозрачности, альфа цвета в шейдере влияет на уровень интенсивности этого цвета в маске.
Синтаксис:
Используется csharp
Shader "Custom/RGB_splat_partial" {

    Properties {
        _MainTex ("Texture", 2D) = "white" {}
                _SkinTex ("Texture", 2D) = "white" {}
                _MainColor ("Main color (red)", Color) = (1,1,1,1)
                _AddColor ("Additional 1st color (green)", Color) = (1,1,1,1)
                _ExtColor ("Additional 2nd color (blue)", Color) = (1,1,1,1)
                [Enum(UnityEngine.Rendering.CullMode)] _Cull("Cull", Float) = 2 //"Back"
    }

    SubShader {
                Cull [_Cull]
                Blend SrcAlpha OneMinusSrcAlpha
        Pass {
                        CGPROGRAM
                        #pragma fragment MyFragmentProgram
                        #pragma vertex MyVertexProgram

                        #include "UnityCG.cginc"
                               
                        sampler2D _MainTex;
                        sampler2D _SkinTex;
                        float4 _MainTex_ST;
                        float4 _MainColor;
                        float4 _AddColor;
                        float4 _ExtColor;

                        struct Interpolators {
                                float4 position : SV_POSITION;
                                float2 uv : TEXCOORD0;
                                float2 uvSplat : TEXCOORD1;
                        };

                        struct VertexData {
                                float4 position : POSITION;
                                float2 uv : TEXCOORD0;
                        };

                        Interpolators MyVertexProgram (VertexData v) {
                                Interpolators i;
                                i.position = UnityObjectToClipPos(v.position);
                                i.uv = TRANSFORM_TEX(v.uv, _MainTex);
                                i.uvSplat = v.uv;
                                return i;
                        }
                        float4 MyFragmentProgram (Interpolators i) : SV_TARGET {
                                float4 splat = tex2D(_SkinTex, i.uvSplat);
                                float4 tex = tex2D(_MainTex, i.uv);
                                float4 color = float4(tex.rgb * (1 - splat.r - splat.g - splat.b) +
                                        lerp (tex.rgb, _MainColor.rgb, _MainColor.a) * splat.r +
                                        lerp (tex.rgb, _AddColor.rgb, _AddColor.a) * splat.g +
                                        lerp (tex.rgb, _ExtColor.rgb, _ExtColor.a) * splat.b, splat.a);
                                color.a = splat.a;
                                return color;
                        }
                        ENDCG
                }
    }
}
 
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 2321
Зарегистрирован: 19 июн 2015, 13:50

Re: Пойдёт ли на мобилку шейдер?

Сообщение waruiyume 23 июл 2017, 14:12

Ну если Standard шейдер работает на мобилах, почем этот не будет. Ещё можно включить эмуляцию видео.
Вроде как можно поменять float на fixed, но это крайне сложная материя: некоторые данные приходят в float и будет теряться время на приведение, и в некоторых новых процах все операции могут производиться только с float, вроде, т.ч. я не подскажу по этому поводу.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 4521
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону


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

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

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