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

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

15 ответов

27 просмотров

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
5
А в каком формате фреймы? Сам формат сейчас придумываешь, или что-то готовое нужно распарсить?
Okhsunrog
5
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Карта сайта