_Time.x(y и тд) работает только с fmod?

Шейдеры и все-все-все.

_Time.x(y и тд) работает только с fmod?

Сообщение Roman777 24 июн 2017, 22:02

Добрый всем вечер!
есть небольшой шейдер, который я применяю к Плоскости:
Синтаксис:
Используется csharp
Shader "Custom/MyShader" {
        Properties {
        }
        SubShader {
            Cull off
                Pass{
                        CGPROGRAM
                    #pragma vertex vert_img
                    #pragma fragment frag
                    #pragma target 2.0

                    #include "UnityCG.cginc"
                        float _myvalue;
                    float4 frag(v2f_img i) : COLOR {
                        float2 mcoord;
                        float4 color;
                        mcoord.x = i.uv.x;
                        mcoord.y = i.uv.y;
                        fixed temp=0.0;
                        temp = _Time.x/50;
                        if (fmod(mcoord.y*100,20)>0.0&&fmod(mcoord.y*100,20)<temp){
                            color= float4(0.0,0.0,1.0,1.0);
                        }
                        else{
                                                color= float4(1.0,1.0,1.0,1.0);
                        }
                        return color;
                    }

                        ENDCG
                }
        }
        FallBack "Diffuse"

На сколько я понял mcoord.y - float значение от 0 до 1, поэтому шейдер режет мою плоскость на 5 линий.
Благодаря "temp = _Time.x/50", я хотел увидеть постепенное заполнение синим цветом 5 полученных прямоугольников. И удивился, увидев статичную картинку, но ведь _Time.x меняется со временем.
Почему же работает только такой Вариант, когда:
Синтаксис:
Используется csharp
temp=fmod(_Time.y*10,20);

Тоесть динамическая картинка появляется только при использывании ф-ии fmod?
Roman777
UNец
 
Сообщения: 38
Зарегистрирован: 06 мар 2016, 12:09

Re: _Time.x(y и тд) работает только с fmod?

Сообщение jetyb 25 июн 2017, 08:34

Потому что в контексте кода значение temp должно быть небольшим в пределах 20 (диапазон значений типа fixed вообще от -2 до 2),
а _Time.y (читаем внимательно мануал) - время в секундах со старта уровня.
Прошла минута - и оно >60 ,вот код и работает всегда одинаково, показывает статичную полосу.

Естественно взятие дробной части времени через fmod решает эту проблему. Я бы брал дробную часть через frac.
jetyb
Адепт
 
Сообщения: 1266
Зарегистрирован: 31 окт 2011, 17:21

Re: _Time.x(y и тд) работает только с fmod?

Сообщение Roman777 25 июн 2017, 09:23

Похоже ответ не отправился.
Благодарю! Про диапазоны [-2;2] для fixed не знал.
Но в любом случае, с самого начала temp у меня был float.
В коде я использовал именно temp=_Time.x/50 - что даёт 1/100 секунды.
То же самое, казалось бы, должна быть динамика - но картинка была статичной с самых первых секунд.

с fmod была применена _Time.y - чисто для настройки скорости динамики нужной моему глазу.
Для меня так же совсем непонятно, почему при fmod(_Time.y*10, 20) картинка динамичная даже без запуска приложения. _Time отсчитывается с момента начала отображения картинки даже при незапущенном приложении? Этот момент я что-то не нашёл в мануале, что является началом отсчёта для _Time...
Roman777
UNец
 
Сообщения: 38
Зарегистрирован: 06 мар 2016, 12:09


Вернуться в Shader Lab

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

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