Страница 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