на сцене рендерятся по разному: С/без текстуры, по гуро/фонгу, с дифузным цветом/без него. И скорее всего потом еще параметров добавится.
Сейчас юзаю отдельную программу под каждую возможную комбинацию.
Но программ становится чет многовато, раздражает копипастить на каждое изменение. И вот думаю: может лучше все таки включить одну программу, а для параметров uniform bool?
Как вообще люди делают?
(Где-то слышал что умные компиляторы сами разбивают шейдер на несколько, в зависимости от значения uniform bool но у меня webgl1, и реализовано ли это в таком старье, не уверен).
Параметры и пермутации. То есть определяется набор дефайнов в программе и компилируются все возможные версии. Для получения нужной версии можно определить простой апи по типу GetProgram(name, defines_list), который все загрузит, скомпилирует и закеширует. Так движки делали очень долгое время, это не лучшая стратегия, но она работает и может подойти под небольшой проект. Насчет параметров, если даже компилятор не разобьет убершейдер, то все ок до тех пор, пока нет дивергенции (например если соседние пиксели не используют разные наборы фичей, которые зависят от вычислений в шейдере и не делают кондишнл атомики на глобальную память).
Это называется комбинаторный взрыв. А предложенное решение называется убершейдер.
компиляторы шейдеров позволяют передавать туда не просто строчку, а массив строчек. т.е. если запарится, ты можешь написать тулзу, которая по флагам скомпилирует тебе шейдер из нужных запчастей, которые ты заранее напишешь
а какая стратегия лучше? кстати чето от игроков слышал многие жалуются что в играх свежих компиляция шейдеров очень долго идёт
лучше иметь меньше пермутаций и заранее их компилировать, чтобы не было стаггеров как - другой вопрос
просчитать заранее наверное анрил, так что мне кажется тут наверное самое простое решение это каждую пермутацию писать в какой-то кэш, если её уже нету в кэше. и там постепенно все накопятся. и уже из этого кэша все предзагружать перед началом иггры
в думе уложили все в 200 программ, кажется
насчёт того какая лучше - вон в той же ксго пользователю буквально настройка наружу выставлена на всякий случай
вроде можно в установку игры вшить вызов компиляции, тогда бы не жаловались)
ну проблема в том, что мы заранее не знаем что нам надо скомпилировать
это как раз должно быть известно
наверное можно сделать и так, чтобы было известно, не особо вникал в детали
Наверно лучше в запуск? ГПУ может поменяться
поменялось - перекомпилим
гта 3 примерно так делала. при запуске на не-топовом по ее мнению железе она при первом старте несколько минут текстуры шакалила
Обсуждают сегодня