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

Re: Дополнить шейдер флага

СообщениеДобавлено: 19 фев 2011, 20:02
Ert Donuell
Вероятно, проблема либо в Unity 3.2, либо в освещении..
Как же наладить эти тени :-?

Re: Дополнить шейдер флага

СообщениеДобавлено: 19 фев 2011, 20:57
gnoblin
какие тени?

в 3.2 тоже работает

Re: Дополнить шейдер флага

СообщениеДобавлено: 19 фев 2011, 20:58
gnoblin
Я думал шейдер не компилится.

Прочитал еще раз первый пост )).

Для того чтобы после манипуляции над вершинами была тень - нужно дописать слово addshadow (или как-то так, есть в справке).

Re: Дополнить шейдер флага

СообщениеДобавлено: 19 фев 2011, 22:05
Ert Donuell
Done
Синтаксис:
Используется glsl
Shader "WavedFlag"
{
        Properties
        {
                _Color ("Main Color", Color) = (1,1,1,1)
                _MainTex ("Base (RGB)", 2D) = "white" {}
                _WaveSpeed ("Wave Speed", float) = 50.0
                _Distortion ("Flag Distortion", Range(0.01,1)) = 0.05
        }
        SubShader
        {
                Tags { "RenderType"="Opaque" }
                LOD 200
                CULL Off

                CGPROGRAM
                #pragma surface surf Lambert vertex:vert addshadow

                sampler2D _MainTex;
                float4 _Color;
                struct Input
                {
                        float2 uv_MainTex;
                };

                float _WaveSpeed;
                float _Distortion;
                void vert (inout appdata_full v)
                {
                        float sinOff = v.vertex.x + v.vertex.y + v.vertex.z;
                        float t = _Time * _WaveSpeed;
                        if (t < 0.0) t *= -1.0;
                        float fx = v.texcoord.x;
                        float fy = v.texcoord.x * v.texcoord.y;
                        //v.vertex.x += sin(t * 1.45 + sinOff) * fx * 5 * _Distortion;
                        v.vertex.y = sin(t * 3.12 + sinOff) * fx * 5 * _Distortion - fy * 9 * _Distortion;
                        //v.vertex.z -= sin(t * 2.2 + sinOff) * fx * 2 * _Distortion;
                }
               
                void surf (Input IN, inout SurfaceOutput o)
                {
                        float4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color;
                        o.Albedo = c.rgb;
                        o.Alpha = c.a;
                }
                ENDCG
        }
        Fallback "VertexLit"
}


Правда, всё-равно ругается

Re: Дополнить шейдер флага [РЕШЕНО]

СообщениеДобавлено: 19 фев 2011, 22:32
Neodrop
А я бы демку сюда прикрепил... :-?

Re: Дополнить шейдер флага [РЕШЕНО]

СообщениеДобавлено: 19 фев 2011, 22:40
Ert Donuell
Постараюсь не забыть скинуть завтра.

Re: Дополнить шейдер флага [РЕШЕНО]

СообщениеДобавлено: 19 фев 2011, 22:57
Battle Angel Alita
>>[РЕШЕНО]
Не так быстро.
А теперь скажите, какое волшебное слово надо сказать, чтоб он ещё и для построения лайт-буффера использовал модифицированные вершины?
light_buffer.jpg

Re: Дополнить шейдер флага [РЕШЕНО]

СообщениеДобавлено: 20 фев 2011, 00:40
gnoblin
А откуда пингвин кстати? :)

Re: Дополнить шейдер флага [РЕШЕНО]

СообщениеДобавлено: 20 фев 2011, 00:54
Battle Angel Alita

Re: Дополнить шейдер флага [РЕШЕНО]

СообщениеДобавлено: 20 фев 2011, 01:02
Neodrop
Классный артист. Я правда, так и не понял, как там можно что-то взять.

Re: Дополнить шейдер флага [РЕШЕНО]

СообщениеДобавлено: 20 фев 2011, 01:18
Battle Angel Alita
Никак. Он выкладывал эту модельку в один из традиционных лоу-поли тредов на polycount(или CGtalk, непомню), там и взяла.

Re: Дополнить шейдер флага [РЕШЕНО]

СообщениеДобавлено: 20 фев 2011, 14:34
Ert Donuell
Пипец.. Всю ночь шейдеры снились 8()

HTML код для вашего блога :
Код: Выделить всё
<script language='javascript' type="text/javascript"> document.write("<iframe marginheight='0' src='http://unity3d.ru/distribution/player.php?url=http://dc316.4shared.com/download/qJn4jHWk/Flag.unity3d&w=600&h=450&t=true&preview=1' height='"+(450+30)+"' width='600' frameborder='0' scrolling='no'></iframe>"); </script>

Battle Angel Alita писал(а):А теперь скажите, какое волшебное слово надо сказать, чтоб он ещё и для построения лайт-буффера использовал модифицированные вершины?


Что Вы имеете в виду? Я тот ещё валенок в шейдерах :)

Re: Дополнить шейдер флага [РЕШЕНО]

СообщениеДобавлено: 20 фев 2011, 17:40
Battle Angel Alita
а интересный эффект получается..
алсо, когда закомментировала CULL Off комп завис напроч
light_buffer2.jpg

Re: Дополнить шейдер флага [РЕШЕНО]

СообщениеДобавлено: 20 фев 2011, 18:05
Ert Donuell
Забавно)

В демке я использую этот шейдер (тут закомментирована пара строк для пущего реализма):
Синтаксис:
Используется glsl
Shader "WavedFlag"
{
        Properties
        {
                _Color ("Main Color", Color) = (1,1,1,1)
                _MainTex ("Base (RGB)", 2D) = "white" {}
                _WaveSpeed ("Wave Speed", float) = 50.0
                _Distortion ("Flag Distortion", Range(0.01,1)) = 0.05
        }
        SubShader
        {
                Tags { "RenderType"="Opaque" }
                LOD 200
                CULL Off

                CGPROGRAM
                #pragma surface surf Lambert vertex:vert addshadow

                sampler2D _MainTex;
                float4 _Color;
                struct Input
                {
                        float2 uv_MainTex;
                };

                float _WaveSpeed;
                float _Distortion;
                void vert (inout appdata_full v)
                {
                        float sinOff = v.vertex.x + v.vertex.y + v.vertex.z;
                        float t = _Time * _WaveSpeed;
                        if (t < 0.0) t *= -1.0;
                        float fx = v.texcoord.x;
                        float fy = v.texcoord.x * v.texcoord.y;
                        //v.vertex.x += sin(t * 1.45 + sinOff) * fx * 5 * _Distortion;
                        v.vertex.y = sin(t * 3.12 + sinOff) * fx * 5 * _Distortion - fy * 9 * _Distortion;
                        //v.vertex.z -= sin(t * 2.2 + sinOff) * fx * 2 * _Distortion;
                }
               
                void surf (Input IN, inout SurfaceOutput o)
                {
                        float4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color;
                        o.Albedo = c.rgb;
                        o.Alpha = c.a;
                }
                ENDCG
        }
        Fallback "VertexLit"
}