SNMetamorph писал: А можно просто сразу в пиксельном шейдере блюрить в зависимости от шероховатости? Какие подводные?
Можно, но нужно много семплов, иначе мутные стекла будут шуметь. Вариант с мипами, как правило, быстрее. Если бы в паранойе стекла батчились, а не рисовались по одному, то мипы были бы однозначно быстрее.
ncuxonaT писал: просто заменить одно на другое с указанием MAX_STRING?
Можно, но лучше использовать sizeof( string ), где string - имя переменной в которую пишется конечная строка. Ну или по крайней мере убедиться, что везде, где ты меняешь это дело, размер строки реально равен MAX_STRING.
Цитата:
ncuxonaT писал: Если бы в паранойе стекла батчились, а не рисовались по одному
Стёкла не могут батчиться, для каждого стекла делается новая копия экрана.
Ну хоть бы подумал сначала.
Дядя Миша писал: Стёкла не могут батчиться, для каждого стекла делается новая копия экрана.
Ну хоть бы подумал сначала.
Надо группировать неперекрывающиеся стекла и делать им общую копию. Можно наверное софтварно проецировать треугольники в экранные координаты и проверять на пересечение.
ncuxonaT писал: Надо группировать неперекрывающиеся стекла и делать им общую копию
Даже если мы с гарантией уверены, что нашли такие стёкла, нам надо записать в буффер экрана несколько обновлённых копий. А сделать это можно только чередой последовательных вызовов subImage. Далее, стекло, это практически всегда квадрат, два треугольника. Полигонаж стёкол на экране редко когда превышает 100-200 треугольников. А для такого кол-ва батчинг просто бессмыслица, ты не увидишь никакой разницы абсолютно.
Добавлено 04-08-2021 в 09:41:
Цитата:
ncuxonaT писал: Можно наверное софтварно проецировать треугольники в экранные координаты и проверять на пересечение.
Именно так сейчас и происходит. Копии делаются для квадов, а не для треугольников, если ты не заметил.
Для студиомоделей и вовсе делается один вызов для всего меша, например если это шлем на голове NPC.
Ну включи r_scissor_glass_debug 1
Crystallize браузер или ОС не поддерживают эмодзи. Там было
Дядя Миша ну ты думай ширше. Каждое стекло - это не только копирование экрана (glCopyTexSubImage2D клампит в 0-1, поэтому только glBlitFramebuffer, только хардкор), это еще блюр мипов. В паранойе большинство стекол, которые можно было бы копировать/блюрить за один раз, разбиты на 33 куска. И ААВВ в экранном пространстве у этих кусков естественно будут перекрываться.