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

свой диффуз шейдер: проблемка

СообщениеДобавлено: 28 июн 2009, 02:08
gnoblin
Хэллоу.

Пробую сделать диффуз освещение для объекта - почему то тень поворачивается вместе с объектом (т.е. позиция источника света, по-ходу, задана не глобально...)

Код: Выделить всё
Shader "Tutorial/Display Normals" {
SubShader {
    Pass {

CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma fragmentoption ARB_fog_exp2
#include "UnityCG.cginc"

struct v2f {
    V2F_POS_FOG;
    float3  color : COLOR0;
};

v2f vert (appdata_base v)
{
    v2f o;
    PositionFog( v.vertex, o.pos, o.fog );
    o.color = max(dot(v.normal, normalize (float4(100, 100, 100, 0) - o.pos)), 0);


    return o;
}

half4 frag (v2f i) : COLOR
{
    return half4( i.color, 1 );
}
ENDCG

    }
}
Fallback "VertexLit"
}


Хэлп ми)

Re: свой диффуз шейдер: проблемка

СообщениеДобавлено: 28 июн 2009, 02:29
gnoblin
Странно... а если из скрипта передавать значение - то все пашет нормально.

Код: Выделить всё
Shader "Tutorial/GnobLighting2" {
Properties {
    _EyePosition ("EyePosition", Vector) = (0,0,0,0)
    _LightPosition ("LightPosition", Vector) = (100,100,100,0)
}

SubShader {
    Pass {

CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma fragmentoption ARB_fog_exp2
#include "UnityCG.cginc"

float4 _EyePosition;
float4 _LightPosition;

struct v2f {
    V2F_POS_FOG;
    float3  color : COLOR0;
};

v2f vert (appdata_base v)
{
    v2f o;
    PositionFog( v.vertex, o.pos, o.fog );
    o.color = max(dot(v.normal, normalize (_LightPosition - o.pos)), 0);


    return o;
}

half4 frag (v2f i) : COLOR
{
    return half4( i.color, 1 );
}
ENDCG

    }
}
Fallback "VertexLit"
}

Re: свой диффуз шейдер: проблемка

СообщениеДобавлено: 30 июн 2009, 13:17
fox
у тебя в первом варианте положение света задано постоянной координатой "float4(100, 100, 100, 0)", вот ни чего и не получатся, надо брать позицию источника динамически
Код: Выделить всё
struct v2f {
   V2F_POS_FOG;
   LIGHTING_COORDS
   float2   uv;
   float3   normal;
   float3   lightDir;
};

Re: свой диффуз шейдер: проблемка

СообщениеДобавлено: 07 ноя 2010, 02:32
gnoblin
Ошибка наверное была в том, что координаты задавались в object space :)