Didgik Posted October 31 Posted October 31 (edited) Привет. Собственно вопрос. Почему в графе материала нет переменных? Это особенность шейдеров? Столкнулся недавно и вот любопытствую. И еще вопрос. В графе есть параметры и есть Auto Game Time. Вот почему то на изменение Auto Game Timе материал может реагировать, а на изменение параметра, только после перекомпиляции шейдеров. Тоже любопытно, почему так. Edited October 31 by Didgik
arizmenda Posted November 2 Posted November 2 Здравствуйте! Параметры справа в матграфе и есть переменные. Если создать параметр и использовать его в графе вместо константы (например, вместо простой float ноды использовать параметр float), то в отнаследованном от графа материале можно будет менять этот параметр без перекомпиляции шейдера. Quote В графе есть параметры и есть Auto Game Time. Вот почему то на изменение Auto Game Timе материал может реагировать, а на изменение параметра, только после перекомпиляции шейдеров. Можете прислать видео? Возможно, вы меняете дефолтное значение переменной, а не саму переменную, но лучше детальнее посмотреть. Спасибо.
Didgik Posted November 2 Author Posted November 2 (edited) On 11/2/2024 at 9:01 AM, arizmenda said: Параметры справа в матграфе и есть переменные. Если создать параметр и использовать его в графе вместо константы (например, вместо простой float ноды использовать параметр float), то в отнаследованном от графа материале можно будет менять этот параметр без перекомпиляции шейдера. Вот. Тут два толкования переменной. 1. В отнаследованном материале я хочу поменять параметр. В редакторе меняется, но проскакивает надпись Перекомпиляция шейдеров. Программно пока менять параметр не получается, поэтому не знаю, работает как я задумал или нет. Тут более менее разобрался. Оказывается параметр типа Bool не попадает в список параметров в коде. Я интуитивно догадываюсь, то видны будут только int, float и array, т.е. для которых есть соответствующие функции типа getParameter*. 2. Это переменная в прямом смысле. Т.е. я хочу сделать анимационный материал, в котором последовательно переключаются 4 текстуры. На FlipBook надо подавать индекс от 0 до 3. Я думал завести переменую Index и на каждом, допустим 10 тике её увеличивать на 1, а при 3 сбрасывать в 0. А переменных то и нету. Вот материал для примера. Параметр Stop выключает мигание, но из программы я пока его поменять не смог. И внутре индекс меняется через Auto Game Time с множителем. Но это просто повезло, что нужна такая простая логика. Я чего-то не понимаю или хочу странного? decal_target_cursor.mgraph.zip Edited November 3 by Didgik
arizmenda Posted November 5 Posted November 5 Спасибо за материал, ознакомились. В процессе не столкнулись с перекомпиляцией шейдеров, лишь с генерацией превью: Если у вас редактор работает как-то иначе, то просим прислать видео с демонстрацией, и, желательно, с подробным описанием шагов воспроизведения. Насчет второго - до конца не понятно, что именно вас смущает в работе графа. Нам показалось, что ваш материал отрабатывает как надо. Можете уточнить в деталях, какую задачу хотите решить? Каким должен быть желаемый результат? Если вам будет удобнее, можно использовать собственный кастомный таймер из кода, вместо встроенного.
Didgik Posted November 5 Author Posted November 5 2 часа назад аризменда сказал: Если у вас редактор работает как-то иначе, то просим прислать видео с демонстрацией, и, желательно, с подробным описанием шагов воспроизведения. С этим я разобрался. Не работала булева переменная. 2 часа назад аризменда сказал: Насчет второго - до конца не понятно, что именно вас смущает в работе графа. Нам показалось, что ваш материал отрабатывает как надо. Можете уточнить в деталях, какую задачу хотите решить? Каким должен быть желаемый результат? Если вам будет удобнее, можно использовать собственный кастомный таймер из кода, вместо встроенного. Тут вопрос не в работе конкретного материала, а в общем. Обычная переменная для расчетов внутри графа материала. Неужели я настолько непонятно объясняю? ))) Впрочем этот вопрос общего характера и к конкретному материалу относится опосредованно.
andrey-kozlov Posted November 6 Posted November 6 On 11/3/2024 at 1:33 AM, Didgik said: Это переменная в прямом смысле. Т.е. я хочу сделать анимационный материал, в котором последовательно переключаются 4 текстуры. На FlipBook надо подавать индекс от 0 до 3. Я думал завести переменую Index и на каждом, допустим 10 тике её увеличивать на 1, а при 3 сбрасывать в 0. А переменных то и нету. Вот материал для примера. Параметр Stop выключает мигание, но из программы я пока его поменять не смог. И внутре индекс меняется через Auto Game Time с множителем. Но это просто повезло, что нужна такая простая логика. Материалы не могут менять свое состояние, есть только вход и выход. Подобная логика с анимационными материалами так и реализуется, через time. Если нужно что-то более сложное, то нужно писать дополнительную логику за пределами материала - она будет хранить и передавать состояние в материал через параметры, а материал отвечает уже за непосредственную визуализацию текущего состояния. Это связано с особенностями шейдеров, да: шейдер зовется параллельно на каждый видимый пиксель на экране, параллельно друг другу. Одну глобальную переменную они из-за этого менять не могут, а состояние на каждый пиксель негде хранить и количество пикселей от кадра к кадру отличается. Есть возможность сделать логику на скрипте через Scriptable material https://developer.unigine.com/en/docs/2.19/content/materials/scriptable?autotranslate=en Либо обычным способом, как любая другая логика - через C++/C# на компонентах или без них 3
Recommended Posts