Страница 3 из 4

Re: Помогите! Нужно добавить тени к шейдеру дорог.

СообщениеДобавлено: 03 мар 2010, 13:11
sp00n
Нео, а если глянуть шейдеры отсюда, и выдрать оттуда тот, который для деревьев? Деревья ведь тоже с альфой рисуются насколько я помню :-?

Re: Помогите! Нужно добавить тени к шейдеру дорог.

СообщениеДобавлено: 03 мар 2010, 14:13
Neodrop
bark ? Это же ствол. Какая там альфа?

Re: Помогите! Нужно добавить тени к шейдеру дорог.

СообщениеДобавлено: 03 мар 2010, 14:54
sp00n
а листва? она не текстурой с альфой на плейне рисуется? и ведь тоже затеняется :-?

з.ы. глянул я скрипт для динамических теней, о котором говорил в теме про лайтмапы. увы, в данном случае он не подходит:( мое имхо что из шейдера Kann-a нужно убрать бамп и спекуляр, и мб он тогда заработает. Кстати, а шмат дороги у тебя как выглядит - один плейн с прозрачностью по бокам? если так, можно сделать его составным из трех плейнов: прозрачный-сплошной-прозрачный.

Re: Помогите! Нужно добавить тени к шейдеру дорог.

СообщениеДобавлено: 03 мар 2010, 15:35
Neodrop
Гиморно и полигонов в трое больше будет.

Re: Помогите! Нужно добавить тени к шейдеру дорог.

СообщениеДобавлено: 04 мар 2010, 12:09
Kann
угу, а если так....
кстати тени то были ?
Синтаксис:
Используется glsl
Shader "Transparent/Bumped Specular+" {
Properties {
        _Color ("Main Color", Color) = (1,1,1,1)
        _SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 0)
        _Shininess ("Shininess", Range (0.01, 1)) = 0.078125
        _MainTex ("Base (RGB) TransGloss (A)", 2D) = "white" {}
        _BumpMap ("Bumpmap", 2D) = "bump" {}
}

Category {
        Tags { "IgnoreProjector"="True" "RenderType"="Transparent"  "Queue"="Transparent-100""Queue"="Geometry+100"  }
        LOD 200
        Alphatest Greater 0
        Fog { Color [_AddFog] }
        ZWrite Off
        ColorMask RGB
       
        // ------------------------------------------------------------------
        // ARB fragment program
       
        SubShader {
                UsePass "Transparent/Specular/BASE"
               
                // Pixel lights
                Pass {
                        Blend SrcAlpha OneMinusSrcAlpha
                        Name "PPL"
                        Tags { "LightMode" = "Pixel" }
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile_builtin
#pragma fragmentoption ARB_fog_exp2
#pragma fragmentoption ARB_precision_hint_fastest

#include "UnityCG.cginc"
#include "AutoLight.cginc"

struct v2f {
        V2F_POS_FOG;
        LIGHTING_COORDS
        float3  uvK; // xy = UV, z = specular K
        float2  uv2;
        float3  viewDirT;
        float3  lightDirT;
};

uniform float4 _MainTex_ST, _BumpMap_ST;
uniform float _Shininess;


v2f vert (appdata_tan v)
{      
        v2f o;
        PositionFog( v.vertex, o.pos, o.fog );
        o.uvK.xy = TRANSFORM_TEX(v.texcoord,_MainTex);
        o.uvK.z = _Shininess * 128;
        o.uv2 = TRANSFORM_TEX(v.texcoord,_BumpMap);

        TANGENT_SPACE_ROTATION;
        o.lightDirT = mul( rotation, ObjSpaceLightDir( v.vertex ) );   
        o.viewDirT = mul( rotation, ObjSpaceViewDir( v.vertex ) );     
       
        TRANSFER_VERTEX_TO_FRAGMENT(o);
        return o;
}

uniform sampler2D _BumpMap;
uniform sampler2D _MainTex;
uniform float4 _Color;

float4 frag (v2f i) : COLOR
{              
        float4 texcol = tex2D( _MainTex, i.uvK.xy );
       
        // get normal from the normal map
        float3 normal = tex2D(_BumpMap, i.uv2).xyz * 2 - 1;
       
        half4 c = SpecularLight( i.lightDirT, i.viewDirT, normal, texcol, i.uvK.z, LIGHT_ATTENUATION(i) );
        c.a = texcol.a * _Color.a;
        return c;
}
ENDCG  
                }
       
       
                       
        }
}

FallBack "VertexLit", 1

}

Re: Помогите! Нужно добавить тени к шейдеру дорог.

СообщениеДобавлено: 04 мар 2010, 12:18
Neodrop
Я же вроде прикрепил скрин... Нифига небыло теней.

Re: Помогите! Нужно добавить тени к шейдеру дорог.

СообщениеДобавлено: 04 мар 2010, 12:31
Kann
я на том скриншоте не понял от чего должны были падать тени, от проводов ?
вообще конечно непонятная фигня творится с тенями.... у себя чето не получается смоделировать такую ситуацию.....
test.jpeg

Re: Помогите! Нужно добавить тени к шейдеру дорог.

СообщениеДобавлено: 04 мар 2010, 14:08
Neodrop
Отлично, Канн! Зарряботала!
А можешь то же самое, но для банально диффуза, чтобы полегче шейдер рендерился ? :ympray:

Изображение

Re: Помогите! Нужно добавить тени к шейдеру дорог.

СообщениеДобавлено: 04 мар 2010, 14:56
Neodrop
Ой... Чего то неладно с этим шейдером в Z сортировке... Второстепенные дороги, которые на картинке внахлёст, на самом деле лежат под главной дорогой, а рисуются, почему то, поверх. :(

Изображение

Re: Помогите! Нужно добавить тени к шейдеру дорог.

СообщениеДобавлено: 04 мар 2010, 16:02
Kann
скорей всего из за этой строчки
Код: Выделить всё
ZWrite Off

попробуй или закоментить ее или включить, ZWrite On

Re: Помогите! Нужно добавить тени к шейдеру дорог.

СообщениеДобавлено: 04 мар 2010, 16:08
Neodrop
А, Блин! Так я же писал в первом посте, что мне обязательно сортировка нужна :D

Re: Помогите! Нужно добавить тени к шейдеру дорог.

СообщениеДобавлено: 04 мар 2010, 16:20
Neodrop
Опять бяда...

Изображение

Re: Помогите! Нужно добавить тени к шейдеру дорог.

СообщениеДобавлено: 04 мар 2010, 16:44
sp00n
Это как бэ главная дорога на второстепенную тень бросает? :-? а если у дорог отключить возможность отбрасывать тени?

Re: Помогите! Нужно добавить тени к шейдеру дорог.

СообщениеДобавлено: 04 мар 2010, 17:22
Neodrop
Уф... Ну не настолько я баран. Отключена конечно.

Насколько я понимаю, это инверсия альфы. Отчего она происходит, я без понятия. :-?

Re: Помогите! Нужно добавить тени к шейдеру дорог.

СообщениеДобавлено: 04 мар 2010, 22:54
Kann
Мдя.... че делать хз.....
вот последний финт ушами придумал... не знаю будет ли работать или нет.... у меня на простейшей сценке вроде сносно....
vertex.jpg


Код: Выделить всё
Shader "Transparent/Bumped Specular+" {
Properties {
        _Color ("Main Color", Color) = (1,1,1,1)
        _SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 0)
        _Shininess ("Shininess", Range (0.01, 1)) = 0.078125
        _MainTex ("Base (RGB) TransGloss (A)", 2D) = "white" {}
        _BumpMap ("Bumpmap", 2D) = "bump" {}
}

Category {
        Tags { "IgnoreProjector"="True" "RenderType"="Transparent"   "Queue"="Transparent-100" }
        LOD 200
        Alphatest Greater 0
        Fog { Color [_AddFog] }
        ZWrite On
        ColorMask RGB
     

        // ------------------------------------------------------------------
        // ARB fragment program
       
        SubShader {
                UsePass "Transparent/Specular/BASE"
               
                // Pixel lights
                Pass {
                       Blend SrcAlpha OneMinusSrcAlpha
               
                        Name "PPL"
                        Tags { "LightMode" = "VertexOnly" }
                  
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile_builtin
#pragma fragmentoption ARB_fog_exp2
#pragma fragmentoption ARB_precision_hint_fastest

#include "UnityCG.cginc"
#include "AutoLight.cginc"

struct v2f {
        V2F_POS_FOG;
        LIGHTING_COORDS
        float3  uvK; // xy = UV, z = specular K
        float2  uv2;
        float3  viewDirT;
        float3  lightDirT;
};

uniform float4 _MainTex_ST, _BumpMap_ST;
uniform float _Shininess;


v2f vert (appdata_tan v)
{     
        v2f o;
        PositionFog( v.vertex, o.pos, o.fog );
        o.uvK.xy = TRANSFORM_TEX(v.texcoord,_MainTex);
        o.uvK.z = _Shininess * 128;
        o.uv2 = TRANSFORM_TEX(v.texcoord,_BumpMap);

        TANGENT_SPACE_ROTATION;
        o.lightDirT = mul( rotation, ObjSpaceLightDir( v.vertex ) );   
        o.viewDirT = mul( rotation, ObjSpaceViewDir( v.vertex ) );     
       
        TRANSFER_VERTEX_TO_FRAGMENT(o);
        return o;
}

uniform sampler2D _BumpMap;
uniform sampler2D _MainTex;
uniform float4 _Color;

float4 frag (v2f i) : COLOR
{             
        float4 texcol = tex2D( _MainTex, i.uvK.xy );
       
        // get normal from the normal map
        float3 normal = tex2D(_BumpMap, i.uv2).xyz * 2 - 1;
       
        half4 c = SpecularLight( i.lightDirT, i.viewDirT, normal, texcol, i.uvK.z, LIGHT_ATTENUATION(i) );
        c.a = texcol.a * _Color.a;
        return c;
}
ENDCG 
                }
       
       
                       
        }
}

FallBack "VertexLit", 1

}