Didgik Posted October 31, 2024 Posted October 31, 2024 (edited) Привет. Собственно вопрос. Почему в графе материала нет переменных? Это особенность шейдеров? Столкнулся недавно и вот любопытствую. И еще вопрос. В графе есть параметры и есть Auto Game Time. Вот почему то на изменение Auto Game Timе материал может реагировать, а на изменение параметра, только после перекомпиляции шейдеров. Тоже любопытно, почему так. Edited October 31, 2024 by Didgik
arizmenda Posted November 2, 2024 Posted November 2, 2024 Здравствуйте! Параметры справа в матграфе и есть переменные. Если создать параметр и использовать его в графе вместо константы (например, вместо простой float ноды использовать параметр float), то в отнаследованном от графа материале можно будет менять этот параметр без перекомпиляции шейдера. Quote В графе есть параметры и есть Auto Game Time. Вот почему то на изменение Auto Game Timе материал может реагировать, а на изменение параметра, только после перекомпиляции шейдеров. Можете прислать видео? Возможно, вы меняете дефолтное значение переменной, а не саму переменную, но лучше детальнее посмотреть. Спасибо.
Didgik Posted November 2, 2024 Author Posted November 2, 2024 (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, 2024 by Didgik
arizmenda Posted November 5, 2024 Posted November 5, 2024 Спасибо за материал, ознакомились. В процессе не столкнулись с перекомпиляцией шейдеров, лишь с генерацией превью: Если у вас редактор работает как-то иначе, то просим прислать видео с демонстрацией, и, желательно, с подробным описанием шагов воспроизведения. Насчет второго - до конца не понятно, что именно вас смущает в работе графа. Нам показалось, что ваш материал отрабатывает как надо. Можете уточнить в деталях, какую задачу хотите решить? Каким должен быть желаемый результат? Если вам будет удобнее, можно использовать собственный кастомный таймер из кода, вместо встроенного.
Didgik Posted November 5, 2024 Author Posted November 5, 2024 2 часа назад аризменда сказал: Если у вас редактор работает как-то иначе, то просим прислать видео с демонстрацией, и, желательно, с подробным описанием шагов воспроизведения. С этим я разобрался. Не работала булева переменная. 2 часа назад аризменда сказал: Насчет второго - до конца не понятно, что именно вас смущает в работе графа. Нам показалось, что ваш материал отрабатывает как надо. Можете уточнить в деталях, какую задачу хотите решить? Каким должен быть желаемый результат? Если вам будет удобнее, можно использовать собственный кастомный таймер из кода, вместо встроенного. Тут вопрос не в работе конкретного материала, а в общем. Обычная переменная для расчетов внутри графа материала. Неужели я настолько непонятно объясняю? ))) Впрочем этот вопрос общего характера и к конкретному материалу относится опосредованно.
andrey-kozlov Posted November 6, 2024 Posted November 6, 2024 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