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

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

СообщениеДобавлено: 28 июл 2013, 18:21
minmarat
Добрый день!
На сцене имеется горизонтальная плоскость с центром в (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"
    }

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

СообщениеДобавлено: 28 июл 2013, 18:43
BornFoRdeatH
С такой постановкой вопроса вам здесь вряд кто поможет, здесь ванг нет, а догадываться что у вас там не так как надо и что вас не устраивает в том что есть никто не будет.

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

СообщениеДобавлено: 28 июл 2013, 19:43
waruiyume
Для DirectionalLight, в _WorldSpaceLightPos0, находится направление, а не положение.

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

СообщениеДобавлено: 28 июл 2013, 20:19
minmarat
Заменил в инспекторе объектов тип источника с Directional на Point и все без изменении...

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

СообщениеДобавлено: 25 июл 2015, 12:57
Chaz
Спустя два года я поднимаю этот тред. У меня та же проблема. Кручу-верчу этот DirectionalLight - ноль эмоций. Изменил тип на Point light и меняю позицию - насинг хэз чейнджд.

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

СообщениеДобавлено: 25 июл 2015, 14:21
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 вообще теней мне налепил, хотя я его не просил об этом.

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

СообщениеДобавлено: 05 июл 2016, 16:29
Razor_V
Так же интересные вещи происходят с _WorldSpaceLightPos0.xyz при использовании его в лайтмапленом в2ф шейдере. При включенной лайтмапе, стоит только коснутся настроек шейдера, как разу источник света начинает резко менять свое положение. То рассчитывается от дирекшнл лайта, то от камеры. Хотя в шейдере без лайтмапы все хорошо.

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

СообщениеДобавлено: 07 июл 2016, 09:39
[bm]
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