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

Для экспериментальных разработок и тем "я нашел чужой исходник, почему он не работает?"

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

Сообщение gnoblin 28 июн 2009, 02:08

Хэллоу.

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

Код: Выделить всё
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"
}


Хэлп ми)
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

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

Сообщение gnoblin 28 июн 2009, 02:29

Странно... а если из скрипта передавать значение - то все пашет нормально.

Код: Выделить всё
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"
}
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

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

Сообщение fox 30 июн 2009, 13:17

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

Изображение
Аватара пользователя
fox
UNITрон
 
Сообщения: 255
Зарегистрирован: 07 ноя 2008, 13:02
Откуда: Питер
  • ICQ

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

Сообщение gnoblin 07 ноя 2010, 02:32

Ошибка наверное была в том, что координаты задавались в object space :)
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт


Вернуться в Шейдерная кузня

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

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