Comments 17
Эй там, наверху, редакторы Хабра! А можно таких статей побольше?
спасибо за обзор, вы взялись сразу за обзор Вулкана, но если подходить со стороны Opengl4.6 то мы подходим к теме частиц, потомучто треугольник можно создать на конвеере геометрического шейдера отсюда тема переходит в эту - VK_EXT_transform_feedback.html glBeginTransformFeedback.xhtml
тоесть надо кинуть в новый конвеер просто сетап текущей карты и новый конвеер поидее теоретически сможет отрисовать карту такую, это же только карта
там можно подумать поидее как оптимизировать, конечно это теоретически, но с частицами 2000000 работает имейте ввиду
тоесть предположу придётся создать фрустум, параметризировать его, и по фрустуму и лоду рисовать треугольники на геометрическом шейдере и там же кидать текстурные координаты
тоесть карту придётся подготовить - смотря какая она, может она поделена на квадраты и представлена в виде картинки
хотя, сложно походу это вся игра в таком виде, я думал у какой-то 3д игры, есть режим просмотра карты и он нагружает )
Ого, статья прямо в тему! Только сегодня занимался оптимизацией графики в своей игре, и как раз натолкнулся на проблему сродни описанной - много деревьев рисуются instanced плейнами, наблюдаю немалую такую просадку производительности. Вероятно, лютый overdraw. Могли бы подсказать, какие пути задействовать, чтобы его побороть?
в godot предлагают идти по этому плану: LOD -> Billboards/Imposters -> MultiMesh
а сколько деревьев? инстансингом по количеству, я рисовал 100 000 анимаций 1го адреса, была просадка маленькая, с деревьями, мммм, вживить в террейн наверно запомнить координаты, там еще зависит от подхода, и используете или нет ускорение, странно у меня и террейн много вершин имеет, нет просадок какие были раньше, ни на убунте ни на генту-база дистрибутиве, я вроде уже без вживления разобрался как делать, ну по кубам был предел 1 миллион, если у вас деревья на 2д плейне можно в геометрический конвеер забросить
у меня всё в деревьях, на столкновение слой(это ригид самописный, и BVH), и обьекты на отрисовку другое дерево(или универсальное бинарное дерево или просто бинарное дерево), я просто пуляю в мейн шейдер обьекты, или выбираю анимацию, и щас вот 2000000 частиц одолел систему на геометрическом
может быть в купе с подходом зависит от подхода вулкан/опенжль/движок/язык, может движок pso там что-то шаманит, если это анриал, на сурсе это проще сводить даже без глобал илюминейт что-то получается кстати
потом по данным, еще надо смотреть, нужен редактор где видно размер данных структур, чтобы структуры обьектов были идентичны - аля 1 структура на всю геометрию почти кроме света и других нюансов
и если есть интерес на скорость, поменьше реактива(можно начать без ООП оставив деструкторы там где надо), эти структуры просто хранят данные
отсюда следует плотная работа с адресацией, я например использую указатели, у меня получилось снять с модели половину памяти, сохраняя и ригид и модель
и да пока ригид я не обновляю фактически, но в дереве он фиксируется, и еще нюанс, частички с геометрического можно тоже в ригид закинуть, кароче у меня уже не как в блендере работает
Самое простое: препасс глубины.
Перед отрисовкой деревьев бери только буфер глубины как рендертаргет, отрисовывай деревья без пиксельного шейдера (только пиши глубину, либо с минимальным пикс шейдером, если есть клиппинг), затем бери в рендрертагрет свой колор буфер и устанавливай тот же буфер глубины без очистки (чтобы информация о ближайшей глубине сохранилась), после чего в пиксельном шейдере деревьев ставь Depth Test LEqual.
После этих действий весь овердроу уходит ценой того, что ты удваиваешь стоимость расчёта вершин. Это выгодный обмен. Если у тебя упор по вершинам, значит что-то идёт не так, и стоит задуматься о лучшей системе кулинга и лодов.
Также, можно было бы плоские участки земли исключать из шадоупаса (т. к. тень от неё в принципе никуда не может упасть). Земля занимает значительное колличесто пикселей шадоумапы, которые по сути рассчитались просто так.
Может, там VSM или ESM тени? Им нужно, чтобы ресиверы присутствовали в шадоумапе, иначе тени будут с артефактами.
(возможен более ранний тест глубины, но в EU5 его нет)
Разве он не всегда присутствует по умолчанию и отключается в случаях, когда, например, в пиксельном шейдере есть discard или запись в gl_FragDepth?
При этом, пиксельный шейдер запускается не просто ради одного пикселя, а для блока 2х2.
Я правильно понимаю, что если только один пиксель в блоке попадает в треугольник, то пиксельный шейдер выполняется для четырёх пикселей, при этом в трёх остальных на вход шейдера приходят немножко невалидные значения, которые лежат за пределом треугольника? Условно, если я в пиксельном шейдере получаю интерполированные значения от вершинного, то для таких пискелей они на самом деле даже экстраполированные?
Ну а почему бы нет? При мультисемплинге же бывают экстраполированные значения (и артефакты из-за них https://habr.com/ru/articles/434046/)
какая оптимизация графики они игру с помощью ИИ на скорую руку сделали )))
ESC - Настройки - Карта - Плоская карта = Всегда ! играем )
Очень познавательная статья. Я даже понятия не имел, что можно делать настолько глубокий реверс-инжиниринг рендеринга сторонней игры, вплоть до мешей бобров))
Очень здорово! Мне, как любителю, совсем не зашел еще и масштаб карты и миллионы провинций, в итоге не видно ничего толком, не рассмотреть. Но, может это только у меня такие проблемы, не знаю..
Я сразу отключил эту 3d карту, толку от нее вообще никакого нет, только нагрузку создаёт.
Нечего страшного, до 2036 еще 10 DLC будет, все поправят.
Спасибо
Интересная статья, симптомы скорее типичны.
Мы тоже по сути не лечим, если никто не жалуется. Регулярно бывает, что после очередного апдейта накинули еще что-то тяжелое и игра стала еще тормознутее, но пользователям норм ((
Я так подозреваю, большинство игр (современных) страдает похожими болезнями и отсутствием оптимизации...
Проблемы контурных карт: анализ графики Europa Universalis 5