Jump to content

Переменные в графе материала


photo

Recommended Posts

Posted (edited)

Привет.

Собственно вопрос. Почему в графе материала нет переменных? Это особенность шейдеров?

Столкнулся недавно и вот любопытствую.

И еще вопрос. В графе есть параметры и есть Auto Game Time. Вот почему то на изменение Auto Game Timе материал может реагировать, а на изменение параметра, только после перекомпиляции шейдеров. Тоже любопытно, почему так.

Edited by Didgik
Posted

Здравствуйте!

Параметры справа в матграфе и есть переменные. Если создать параметр и использовать его в графе вместо константы (например, вместо простой float ноды использовать параметр float), то в отнаследованном от графа материале можно будет менять этот параметр без перекомпиляции шейдера.

Quote

В графе есть параметры и есть Auto Game Time. Вот почему то на изменение Auto Game Timе материал может реагировать, а на изменение параметра, только после перекомпиляции шейдеров.

Можете прислать видео? Возможно, вы меняете дефолтное значение переменной, а не саму переменную, но лучше детальнее посмотреть.

Спасибо.

Posted (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 by Didgik
Posted

Спасибо за материал, ознакомились. В процессе не столкнулись с перекомпиляцией шейдеров, лишь с генерацией превью:

image.png

Если у вас редактор работает как-то иначе, то просим прислать видео с демонстрацией, и, желательно, с подробным описанием шагов воспроизведения.

Насчет второго - до конца не понятно, что именно вас смущает в работе графа. Нам показалось, что ваш материал отрабатывает как надо. Можете уточнить в деталях, какую задачу хотите решить? Каким должен быть желаемый результат? 

Если вам будет удобнее, можно использовать собственный кастомный таймер из кода, вместо встроенного.

 

Posted
2 часа назад аризменда сказал:

Если у вас редактор работает как-то иначе, то просим прислать видео с демонстрацией, и, желательно, с подробным описанием шагов воспроизведения.

С этим я разобрался. Не работала булева переменная.

2 часа назад аризменда сказал:

Насчет второго - до конца не понятно, что именно вас смущает в работе графа. Нам показалось, что ваш материал отрабатывает как надо. Можете уточнить в деталях, какую задачу хотите решить? Каким должен быть желаемый результат? 

Если вам будет удобнее, можно использовать собственный кастомный таймер из кода, вместо встроенного.

Тут вопрос не в работе конкретного материала, а в общем. Обычная переменная для расчетов внутри графа материала. Неужели я настолько непонятно объясняю? )))

Впрочем этот вопрос общего характера и к конкретному материалу относится опосредованно.

Posted
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# на компонентах или без них

  • Like 3
×
×
  • Create New...