Привет, я в гл недавно, и есть вот такой вопрос Объекты

на сцене рендерятся по разному: С/без текстуры, по гуро/фонгу, с дифузным цветом/без него. И скорее всего потом еще параметров добавится.
Сейчас юзаю отдельную программу под каждую возможную комбинацию.
Но программ становится чет многовато, раздражает копипастить на каждое изменение. И вот думаю: может лучше все таки включить одну программу, а для параметров uniform bool?
Как вообще люди делают?
(Где-то слышал что умные компиляторы сами разбивают шейдер на несколько, в зависимости от значения uniform bool но у меня webgl1, и реализовано ли это в таком старье, не уверен).

15 ответов

6 просмотров

Параметры и пермутации. То есть определяется набор дефайнов в программе и компилируются все возможные версии. Для получения нужной версии можно определить простой апи по типу GetProgram(name, defines_list), который все загрузит, скомпилирует и закеширует. Так движки делали очень долгое время, это не лучшая стратегия, но она работает и может подойти под небольшой проект. Насчет параметров, если даже компилятор не разобьет убершейдер, то все ок до тех пор, пока нет дивергенции (например если соседние пиксели не используют разные наборы фичей, которые зависят от вычислений в шейдере и не делают кондишнл атомики на глобальную память).

Это называется комбинаторный взрыв. А предложенное решение называется убершейдер.

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

Columbus Utrigas
Параметры и пермутации. То есть определяется набор...

а какая стратегия лучше? кстати чето от игроков слышал многие жалуются что в играх свежих компиляция шейдеров очень долго идёт

Vladimir
а какая стратегия лучше? кстати чето от игроков сл...

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

Columbus Utrigas
лучше иметь меньше пермутаций и заранее их компили...

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

Vladimir
просчитать заранее наверное анрил, так что мне каж...

в думе уложили все в 200 программ, кажется

Vladimir
а какая стратегия лучше? кстати чето от игроков сл...

насчёт того какая лучше - вон в той же ксго пользователю буквально настройка наружу выставлена на всякий случай

Vladimir
а какая стратегия лучше? кстати чето от игроков сл...

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

Alexey Larionov
вроде можно в установку игры вшить вызов компиляци...

ну проблема в том, что мы заранее не знаем что нам надо скомпилировать

Columbus Utrigas
это как раз должно быть известно

наверное можно сделать и так, чтобы было известно, не особо вникал в детали

Alexey Larionov
вроде можно в установку игры вшить вызов компиляци...

Наверно лучше в запуск? ГПУ может поменяться

Vladimir Zaytsev
Наверно лучше в запуск? ГПУ может поменяться

гта 3 примерно так делала. при запуске на не-топовом по ее мнению железе она при первом старте несколько минут текстуры шакалила

Похожие вопросы

Обсуждают сегодня

Привет, кто может сделать юзербота с апи? Задачи: - создавать группы - создавать каналы - задавать для созданных каналов аватарку или эмоджи, имя группы - добавлять в группы...
Lencore
11
у меня такой вопрос про память в x86 возник, может кто пояснить?.. у процессора есть (как минимум) 3 типа адресов (названия "п1", "п2", "п3" --- мои, чтобы проще было дальше)...
Toideng
10
У них там что-то своё же вроде!?
Евгений Данилов
5
К слову, почему бы не использовать ссылки на папки, вместо инвайтинга?
Артем Уколов
3
Кастомные эмодзи для ботов доступны только элите, верно?
山 | Bobby | 山
3
Какого хера? /Sources/App/Modules/User/Models/UserLinkApple.swift:21:20: warning: stored property '_id' of 'Sendable'-conforming class 'UserLinkApple' is mutable @ID(...
Alexander Sherbakov
14
Портфолио: Зовут меня Александр, мне 36 лет. Город Пушкино. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github....
Magic
10
Второй вопрос: снимаются ли эти ограничения при покупке на fragment хрени за кучу денег? (до 4096 / 2048)
Артем Уколов
3
Портфолио: Зовут меня Александр, мне 41 год. Город Киров. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github.co...
Magic
11
здравствуйте, братья, кто-нибудь знает, как работать с Swift.com или Swift.net?
Ozzy
6
Карта сайта