неправильный _WorldSpaceLightPos0

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

неправильный _WorldSpaceLightPos0

Сообщение minmarat 28 июл 2013, 18:21

Добрый день!
На сцене имеется горизонтальная плоскость с центром в (0,0.0) и DirectionalLight (0, 1000, 0 ). Обнаружилось, что в шейдере для плоскости параметр _WorldSpaceLightPos0 неверен. А именно, _WorldSpaceLightPos0.y < 1. Где подвох?

Отладочный код шейдера:

Синтаксис:
Используется glsl
Shader "Custom/lightTester" {
    SubShader {
                Pass {
                Tags { "LightMode" = "ForwardBase" }
   
                CGPROGRAM
                #pragma vertex vert
                #pragma fragment frag
                #include "UnityCG.cginc"
   
                struct v2f {
                        float4 pos : SV_POSITION;
                };
   
                v2f vert (appdata_base v)
                {
                        v2f o;
                        o.pos = mul (UNITY_MATRIX_MVP, v.vertex);
                        return o;
                }
   
                half4 frag (v2f i) : COLOR
                {
                        return half4 ( 0.0, _WorldSpaceLightPos0.y < 1 ? 1.0:0.0, 0.0, 1);
                }
                ENDCG
   
                        }
                }
        Fallback "VertexLit"
    }
minmarat
UNец
 
Сообщения: 2
Зарегистрирован: 28 июл 2013, 18:09

Re: неправильный _WorldSpaceLightPos0

Сообщение BornFoRdeatH 28 июл 2013, 18:43

С такой постановкой вопроса вам здесь вряд кто поможет, здесь ванг нет, а догадываться что у вас там не так как надо и что вас не устраивает в том что есть никто не будет.
Не бойся, если ты один, бойся, если ты ноль.
BornFoRdeatH
Адепт
 
Сообщения: 2377
Зарегистрирован: 22 окт 2011, 23:41
Откуда: Украина
Skype: bornfordeath

Re: неправильный _WorldSpaceLightPos0

Сообщение waruiyume 28 июл 2013, 19:43

Для DirectionalLight, в _WorldSpaceLightPos0, находится направление, а не положение.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: неправильный _WorldSpaceLightPos0

Сообщение minmarat 28 июл 2013, 20:19

Заменил в инспекторе объектов тип источника с Directional на Point и все без изменении...
minmarat
UNец
 
Сообщения: 2
Зарегистрирован: 28 июл 2013, 18:09

Re: неправильный _WorldSpaceLightPos0

Сообщение Chaz 25 июл 2015, 12:57

Спустя два года я поднимаю этот тред. У меня та же проблема. Кручу-верчу этот DirectionalLight - ноль эмоций. Изменил тип на Point light и меняю позицию - насинг хэз чейнджд.
Chaz
Адепт
 
Сообщения: 1412
Зарегистрирован: 07 апр 2012, 11:24

Re: неправильный _WorldSpaceLightPos0

Сообщение Chaz 25 июл 2015, 14:21

Методом гугления нашел причину.
После "Pass {" нужно добавить Tags{"LightMode"="ForwardBase"}
Синтаксис:
Используется glsl
Shader "custom/1_FlatColor"
{
        Properties {
                _Color ("Color", Color)= (1.0,1.0,1.0,1.0)
        }
       
        SubShader {
                Pass {
                 Tags{"LightMode"="ForwardBase"}
                        CGPROGRAM
                       
                        #pragma vertex vert
                        #pragma fragment frag
                       
                       
                        float4 _Color;
                       
                        struct vertexInput{
                                float4 vertex : POSITION;
                        };
                        struct vertexOutput{
                                float4 pos: SV_POSITION;
                        };
                       
                        vertexOutput vert(vertexInput v){
                                vertexOutput o;
                                o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
                                return o;
                        }
                       
                        float4 frag(vertexOutput i) : COLOR
                        {
                                return float4(_WorldSpaceLightPos0.x,0,0,1);//_Color;
                        }
                        ENDCG
                }
        }
        Fallback "Diffuse"
}

Но с ForwardBase работает только направленный свет, а вот точечный - неа. Но точечный работает с ForwardAdd, а направленный уже не работает. А вот неадекватный ShadowCaster вообще теней мне налепил, хотя я его не просил об этом.
Chaz
Адепт
 
Сообщения: 1412
Зарегистрирован: 07 апр 2012, 11:24

Re: неправильный _WorldSpaceLightPos0

Сообщение Razor_V 05 июл 2016, 16:29

Так же интересные вещи происходят с _WorldSpaceLightPos0.xyz при использовании его в лайтмапленом в2ф шейдере. При включенной лайтмапе, стоит только коснутся настроек шейдера, как разу источник света начинает резко менять свое положение. То рассчитывается от дирекшнл лайта, то от камеры. Хотя в шейдере без лайтмапы все хорошо.
Razor_V
UNец
 
Сообщения: 12
Зарегистрирован: 19 ноя 2014, 14:56

Re: неправильный _WorldSpaceLightPos0

Сообщение [bm] 07 июл 2016, 09:39

Chaz писал(а):Методом гугления нашел причину.
После "Pass {" нужно добавить Tags{"LightMode"="ForwardBase"}
Синтаксис:
Используется glsl
Shader "custom/1_FlatColor"
{
        Properties {
                _Color ("Color", Color)= (1.0,1.0,1.0,1.0)
        }
       
        SubShader {
                Pass {
                 Tags{"LightMode"="ForwardBase"}
                        CGPROGRAM
                       
                        #pragma vertex vert
                        #pragma fragment frag
                       
                       
                        float4 _Color;
                       
                        struct vertexInput{
                                float4 vertex : POSITION;
                        };
                        struct vertexOutput{
                                float4 pos: SV_POSITION;
                        };
                       
                        vertexOutput vert(vertexInput v){
                                vertexOutput o;
                                o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
                                return o;
                        }
                       
                        float4 frag(vertexOutput i) : COLOR
                        {
                                return float4(_WorldSpaceLightPos0.x,0,0,1);//_Color;
                        }
                        ENDCG
                }
        }
        Fallback "Diffuse"
}

Но с ForwardBase работает только направленный свет, а вот точечный - неа. Но точечный работает с ForwardAdd, а направленный уже не работает. А вот неадекватный ShadowCaster вообще теней мне налепил, хотя я его не просил об этом.

Чтобы заработал второй источник света, нужно добавить второй Pass с тегом ForwardAdd
Mafia Rush: universal iOS game _https://goo.gl/CKq4D Android _https://goo.gl/slFLXx
Shooter Ball: Android _https://goo.gl/21QyPw
skype: bmindfield
Аватара пользователя
[bm]
UNIверсал
 
Сообщения: 426
Зарегистрирован: 11 май 2010, 22:33
Откуда: Россия, Ижевск


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

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

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