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

Помогите с шейдером билборда

СообщениеДобавлено: 19 май 2017, 09:23
T1m0the0S
Всем ни бага, ни лага.

В общем понадобился мне такой шейдер, чтобы поворачивал спрайт к камере (viewtopic.php?f=5&t=43292).

Вот код шейдера:
Синтаксис:
Используется glsl
Shader "Custom/BillboardAlpha" {
Properties {
        _MainTex ("Base (RGB)", 2D) = "white" {}
        }

SubShader {
        Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }

        Pass{
                Cull Off
                ZTest Always
                Blend SrcAlpha OneMinusSrcAlpha

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

sampler2D _MainTex;

struct v2f {
        float4 pos:SV_POSITION;
        float2 texc:TEXCOORD0;
};

v2f vert(appdata_base v)
{
        v2f o;
        float4 ori=mul(UNITY_MATRIX_MV,float4(0,0,0,1));
        float4 vt=v.vertex;
        vt.y=vt.z;
        vt.z=0;


        vt.xyz+=ori.xyz;//result is vt.z==ori.z ,so the distance to camera keeped ,and screen size keeped
        o.pos=mul(UNITY_MATRIX_P,vt);

        o.texc=v.texcoord;
        return o;
}

float4 frag(v2f i):COLOR
{
        return tex2D(_MainTex,i.texc);
}
ENDCG
}//endpass
}
}
 



Но как всегда возникло огромное НО -

Изображение

Шейдер переворачивает текстуру, в связи с этим вопрос -
1. Как отредактировать шейдер, чтобы он не переворачивал картинку.
2. Как поменять вводные данные с текстура2д на часть атласа спрайта?

Сам Я имбовый нубяра в шейдинге, так что помогите, пожалуйста.

Заранее спасибы.

Почему то на скриншоте обрезался инспектор. Если что то там скейл по умолчанию 0,4.

Re: Помогите с шейдером билборда

СообщениеДобавлено: 20 май 2017, 04:12
Shock
А что если просто указать "Tiling.Y = -1","Tiling.X = -1", конечно мы не шейдер пофиксим, но направление на экране будет корректное.

Re: Помогите с шейдером билборда

СообщениеДобавлено: 20 май 2017, 04:46
T1m0the0S
Shock писал(а):А что если просто указать "Tiling.Y = -1","Tiling.X = -1", конечно мы не шейдер пофиксим, но направление на экране будет корректное.

Нет, совершенно не влияет, Я это первым делом попробовал. (Это если Вы о Transform объекта)

Re: Помогите с шейдером билборда

СообщениеДобавлено: 29 май 2017, 21:54
Shock
Я говорил об этом:
Изображение

Re: Помогите с шейдером билборда

СообщениеДобавлено: 30 май 2017, 01:48
DbIMok
предположу, что как-то так
Синтаксис:
Используется glsl
Shader "Custom/BillboardAlpha" {
        Properties {
                _MainTex ("Base (RGB)", 2D) = "white" {}
        }

        SubShader {
        Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }

        Pass {
            ZTest Always
            Blend SrcAlpha OneMinusSrcAlpha

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

                        sampler2D _MainTex;

                        struct v2f {
                                float4 pos: SV_POSITION;
                                float2 texcoord: TEXCOORD0;
                        };

                        v2f vert(appdata_base v) {
                                v2f o;
                                o.pos = mul(UNITY_MATRIX_P,
                                        mul(UNITY_MATRIX_MV, float4(0.0, 0.0, 0.0, 1.0))
                                                - float4(v.vertex.x, v.vertex.z, 0.0, 0.0));
                                o.texcoord = v.texcoord;
                                return o;
                        }

                        float4 frag(v2f i): COLOR {
                                return tex2D(_MainTex, i.texcoord);
                        }
                        ENDCG
                }
        }
}