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

Помощь с шейдерами

СообщениеДобавлено: 07 май 2018, 12:58
Brim187killa
Здравствуйте, мне необходима помощь. Мне нужно связать два шейдера. Языка вообще не знаю! Если есть время и желание, то можете их связать? Буду благодарен)
Первый шейдер
Синтаксис:
Используется csharp
 // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'

Shader "Mattatz/TextureAnimation"
{
        Properties
        {
                _MainTex ("Texture", 2D) = "white" {}
                _Color ("Color", Color) = (1, 1, 1, 1)

                _Cols ("Cols Count", Int) = 5
                _Rows ("Rows Count", Int) = 3
                _Frame ("Per Frame Length", Float) = 0.5
        }

        SubShader
        {
                Tags { "RenderType"="Opaque" }
                LOD 100

                Pass
                {
                        CGPROGRAM
                        #pragma vertex vert
                        #pragma fragment frag
                       
                        #include "UnityCG.cginc"

                        struct appdata
                        {
                                float4 vertex : POSITION;
                                float2 uv : TEXCOORD0;
                        };

                        struct v2f
                        {
                                float2 uv : TEXCOORD0;
                                float4 vertex : SV_POSITION;
                        };

                        sampler2D _MainTex;
                        float4 _MainTex_ST;

                        fixed4 _Color;

                        uint _Cols;
                        uint _Rows;

                        float _Frame;
                       
                        fixed4 shot (sampler2D tex, float2 uv, float dx, float dy, int frame) {
                                return tex2D(tex, float2(
                                        (uv.x * dx) + fmod(frame, _Cols) * dx,
                                        1.0 - ((uv.y * dy) + (frame / _Cols) * dy)
                                ));
                        }
                       
                        v2f vert (appdata v) {
                                v2f o;
                                o.vertex = UnityObjectToClipPos(v.vertex);
                                o.uv = TRANSFORM_TEX(v.uv, _MainTex);
                                return o;
                        }
                       
                        fixed4 frag (v2f i) : SV_Target {
                                int frames = _Rows * _Cols;
                                float frame = fmod(_Time.y / _Frame, frames);
                                int current = floor(frame);
                                float dx = 1.0 / _Cols;
                                float dy = 1.0 / _Rows;

                                // not lerping to next frame
                                // return shot(_MainTex, i.uv, dx, dy, current) * _Color;

                                int next = floor(fmod(frame + 1, frames));
                                return lerp(shot(_MainTex, i.uv, dx, dy, current), shot(_MainTex, i.uv, dx, dy, next), frame - current) * _Color;
                        }

                        ENDCG
                }
        }
}

Второй
Синтаксис:
Используется csharp
 // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'

Shader "Custom/YouDied"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
        _Zoom ("Zoom", Range(0.5, 20)) = 1
        _Speed ("Speed", Range(0.01, 10)) = 1
    }
    SubShader
        {
                Tags{ "RenderType" = "Opaque"  "Queue" = "Overlay+0" "ForceNoShadowCasting" = "True" "IsEmissive" = "true"  }
                Cull Off
                ZTest Always
        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"
 
            float4 vert (appdata_base v) : SV_POSITION
            {
                return UnityObjectToClipPos(v.vertex);
            }
           
            sampler2D _MainTex;
            half _Zoom;
            half _Speed;
 
            fixed4 frag (float4 i : VPOS) : SV_Target
            {
                return tex2D(_MainTex, float2((i.xy/ _ScreenParams.xy) + float2(_CosTime.x * _Speed, _SinTime.x * _Speed) / _Zoom));
            }
            ENDCG
        }
    }
}

Re: Помощь с шейдерами

СообщениеДобавлено: 07 май 2018, 13:26
IDoNotExist
Brim187killa писал(а):Здравствуйте, мне необходима помощь. Мне нужно связать два шейдера. Языка вообще не знаю! Если есть время и желание, то можете их связать? Буду благодарен)

О господи, это (3A4OT) , первый пост за долгое время который вызвал у меня гомерический смех, :D тут собрано просто всё:
- хреновая постановка задачи.
- постановка перед фактом, что автору лень и и он не желает что либо делать сам.
- и напоследок наглое попрошайничество с невероятной возможностью получить от него благодарность.

Re: Помощь с шейдерами

СообщениеДобавлено: 07 май 2018, 13:29
lawsonilka
и напоследок наглое попрошайничество.

ну не сказал бы что наглое
Если есть время и желание, то можете их связать? Буду благодарен)

Re: Помощь с шейдерами

СообщениеДобавлено: 07 май 2018, 13:33
IDoNotExist
lawsonilka писал(а):
и напоследок наглое попрошайничество.

ну не сказал бы что наглое
Если есть время и желание, то можете их связать? Буду благодарен)

Я считаю иначе, в контексте того сколько времени он потратил на описание задачи, это самое настоящее безразличие и наглость, что делают шейдеры, что с чем связывать то, и зачем, что в результате должно получиться?

Re: Помощь с шейдерами

СообщениеДобавлено: 07 май 2018, 14:40
Tolking
Ну так ты разберись что делает первый, что делает второй, представь как автор представил их "совмесную" работу - это и должно получиться...

Re: Помощь с шейдерами

СообщениеДобавлено: 07 май 2018, 14:47
Brim187killa
Извиняюсь за некомпетентность, но наглости я в своем тексте не вижу.. Я не принуждаю вас как "Обязательно!!!" сделать это. По поводу того, чего я хочу сделать с этими шейдерами: Мне нужно с первого шейдера взять его свойства и импортировать во второй шейдер, чтобы во второй шейдер я мог загружать кадровые изображения.

Re: Помощь с шейдерами

СообщениеДобавлено: 07 май 2018, 15:01
IDoNotExist
Brim187killa писал(а):Мне нужно с первого шейдера взять его свойства и импортировать во второй шейдер

так бы сразу и сказал, это ж проще простого:
Синтаксис:
Используется csharp
 // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'

Shader "Custom/YouDied"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
        _Zoom ("Zoom", Range(0.5, 20)) = 1
        _Speed ("Speed", Range(0.01, 10)) = 1

        _Color ("Color", Color) = (1, 1, 1, 1)

        _Cols ("Cols Count", Int) = 5
        _Rows ("Rows Count", Int) = 3
        _Frame ("Per Frame Length", Float) = 0.5
    }
    SubShader
        {
                Tags{ "RenderType" = "Opaque"  "Queue" = "Overlay+0" "ForceNoShadowCasting" = "True" "IsEmissive" = "true"  }
                Cull Off
                ZTest Always
        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"
 
            float4 vert (appdata_base v) : SV_POSITION
            {
                return UnityObjectToClipPos(v.vertex);
            }
           
            sampler2D _MainTex;
            half _Zoom;
            half _Speed;
 
            fixed4 frag (float4 i : VPOS) : SV_Target
            {
                return tex2D(_MainTex, float2((i.xy/ _ScreenParams.xy) + float2(_CosTime.x * _Speed, _SinTime.x * _Speed) / _Zoom));
            }
            ENDCG
        }
    }
}

Re: Помощь с шейдерами

СообщениеДобавлено: 07 май 2018, 15:10
Brim187killa
так бы сразу и сказал, это ж проще простого

Спасибо большое! Вы меня очень сильно выручили)

Re: Помощь с шейдерами

СообщениеДобавлено: 07 май 2018, 16:01
Brim187killa
Кхм

Re: Помощь с шейдерами

СообщениеДобавлено: 07 май 2018, 16:06
Brim187killa
IDoNotExist писал(а):
Brim187killa писал(а):Мне нужно с первого шейдера взять его свойства и импортировать во второй шейдер

так бы сразу и сказал, это ж проще простого:
Синтаксис:
Используется csharp
 // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'

Shader "Custom/YouDied"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
        _Zoom ("Zoom", Range(0.5, 20)) = 1
        _Speed ("Speed", Range(0.01, 10)) = 1

        _Color ("Color", Color) = (1, 1, 1, 1)

        _Cols ("Cols Count", Int) = 5
        _Rows ("Rows Count", Int) = 3
        _Frame ("Per Frame Length", Float) = 0.5
    }
    SubShader
        {
                Tags{ "RenderType" = "Opaque"  "Queue" = "Overlay+0" "ForceNoShadowCasting" = "True" "IsEmissive" = "true"  }
                Cull Off
                ZTest Always
        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"
 
            float4 vert (appdata_base v) : SV_POSITION
            {
                return UnityObjectToClipPos(v.vertex);
            }
           
            sampler2D _MainTex;
            half _Zoom;
            half _Speed;
 
            fixed4 frag (float4 i : VPOS) : SV_Target
            {
                return tex2D(_MainTex, float2((i.xy/ _ScreenParams.xy) + float2(_CosTime.x * _Speed, _SinTime.x * _Speed) / _Zoom));
            }
            ENDCG
        }
    }
}


Вот только возникла одна проблема - это неработоспособность свойств. Они вообще не работают. Вот, как я хотел, чтобы работал второй шейдер (который я ранее упоминал) (справа - первый шейдер, слева - тот, который вы сделали) https://imgur.com/a/KbjfGnV