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

Шейдеры и все-все-все.

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

Сообщение T1m0the0S 19 май 2017, 09:23

Всем ни бага, ни лага.

В общем понадобился мне такой шейдер, чтобы поворачивал спрайт к камере (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.
Последний раз редактировалось T1m0the0S 21 май 2017, 06:46, всего редактировалось 3 раз(а).
Если долго мучаться, что-нибудь получится )
Аватара пользователя
T1m0the0S
UNец
 
Сообщения: 23
Зарегистрирован: 07 дек 2013, 01:48

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

Сообщение Shock 20 май 2017, 04:12

А что если просто указать "Tiling.Y = -1","Tiling.X = -1", конечно мы не шейдер пофиксим, но направление на экране будет корректное.
Аватара пользователя
Shock
UNIт
 
Сообщения: 77
Зарегистрирован: 10 окт 2016, 18:22

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

Сообщение T1m0the0S 20 май 2017, 04:46

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

Нет, совершенно не влияет, Я это первым делом попробовал. (Это если Вы о Transform объекта)
Если долго мучаться, что-нибудь получится )
Аватара пользователя
T1m0the0S
UNец
 
Сообщения: 23
Зарегистрирован: 07 дек 2013, 01:48

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

Сообщение Shock 29 май 2017, 21:54

Я говорил об этом:
Изображение
Аватара пользователя
Shock
UNIт
 
Сообщения: 77
Зарегистрирован: 10 окт 2016, 18:22

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

Сообщение DbIMok 30 май 2017, 01:48

предположу, что как-то так
Синтаксис:
Используется 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
                }
        }
}
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.7k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05


Вернуться в Shader Lab

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

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