y-axis billboard shader

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

y-axis billboard shader

Сообщение BoogieGo 19 май 2014, 15:14

как реализовать шейдер поворота объекта к камере только по y оси?
Аватара пользователя
BoogieGo
UNIт
 
Сообщения: 85
Зарегистрирован: 10 ноя 2012, 23:41
Откуда: Kiev, Ukraine
Skype: boogiego_

Re: y-axis billboard shader

Сообщение BoogieGo 19 май 2014, 17:12

... и снова всем спасибо -)
Синтаксис:
Используется glsl
Shader "Y-axis Billboard"
{
        Properties
        {
                _MainTex ("Texture Image", 2D) = "white" {}
        }

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

                Pass
                {  
                        Blend SrcAlpha OneMinusSrcAlpha

                        CGPROGRAM
                        #pragma vertex vert  
                        #pragma fragment frag
     
                        sampler2D _MainTex;
 
                        struct vertexInput
                        {
                                float4 vertex : POSITION;
                                float2 tex : TEXCOORD0;
                        };

                        struct vertexOutput
                        {
                                float4 pos : SV_POSITION;
                                float2 tex : TEXCOORD0;
                        };
 
                        vertexOutput vert(vertexInput input)
                        {
                                vertexOutput output;
 
                                float2 direct = normalize(
                                        _WorldSpaceCameraPos.xz + float2(_World2Object[0].w,
                                        _World2Object[2].w)
                                );

                                float2x2 rotate = float2x2(
                                        direct[1], direct.x,
                                        -direct.x, direct[1]
                                );

                                output.pos.xz = mul(rotate, input.vertex.xz);
                                output.pos.yw = input.vertex.yw;
                                       
                                output.pos = mul(UNITY_MATRIX_MVP, output.pos);
                                output.tex = input.tex;
 
                                return output;
                        }

 
                        fixed4 frag(vertexOutput input) : COLOR
                        {
                                return tex2D(_MainTex, float2(input.tex));  
                        }
                        ENDCG
                }
        }
}
 
Аватара пользователя
BoogieGo
UNIт
 
Сообщения: 85
Зарегистрирован: 10 ноя 2012, 23:41
Откуда: Kiev, Ukraine
Skype: boogiego_

Re: y-axis billboard shader

Сообщение Diab10 19 май 2014, 20:44

BoogieGo писал(а):... и снова всем спасибо -)


Спасибо, пригодится :)

Подскажите, как он работает?
Ну 1 билборд понятно - развернёт его в камеру.
А что если я десяток билбордов объединю в один меш, и повешу на него этот шейдер? Что будет? Он правильно их повернёт лицом к камере, или сетка полетит прахом?
Мысль в том, чтобы был 1 дравКолл на кучу билбородов.
Аватара пользователя
Diab10
Адепт
 
Сообщения: 3401
Зарегистрирован: 17 мар 2011, 20:42
Откуда: 123 RUS
Skype: diab1023

Re: y-axis billboard shader

Сообщение Neyl 19 май 2014, 21:31

2 Diab10
Тут выкладывал подобный шейдер. Суть в том что в меше 4 вертекса каждого билборда "схлопываются" в одну точку, которая будет центром вращения для билборда, а в uv2 записываются значения офсета. Шейдер же по этим значениям растягивает билборд обратно до прямоугольника и поворачивает его к камере.
Аватара пользователя
Neyl
UNIверсал
 
Сообщения: 404
Зарегистрирован: 20 июн 2010, 10:17

Re: y-axis billboard shader

Сообщение Diab10 19 май 2014, 22:22

Neyl писал(а):2 Diab10
Тут выкладывал подобный шейдер. Суть в том что в меше 4 вертекса каждого билборда "схлопываются" в одну точку, которая будет центром вращения для билборда, а в uv2 записываются значения офсета. Шейдер же по этим значениям растягивает билборд обратно до прямоугольника и поворачивает его к камере.


Спасибо! :)
Аватара пользователя
Diab10
Адепт
 
Сообщения: 3401
Зарегистрирован: 17 мар 2011, 20:42
Откуда: 123 RUS
Skype: diab1023


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

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

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