Комментарии 3
Отличная статья, спасибо!
Где можно почитать (и что конкретнее гуглить) про графические движки, чтобы понять почему спекание объектов в один ускоряет прорисовку?
Это как-то совсем не очевидно, ведь общее число треугольников не меняется. Та же штука вероятно и со склеиванием текстур в одну.
Могу предположить только, что возникает бутылочное горлышко где-то в передаче команд от процессора в видеокарту - если я буду передавать на отрисовку миллион объектов, то я условно буду миллион раз выделять память под это, а если они запечены - достаточно это сделать один раз. Видимо, нужно разобраться в том как в принципе сейчас работают современные рендереры и прикинуть на каком этапе какие у них могут возникать потребности в ресурсах?..
Обычно в документации к игровому движку приведены общие сведения об оптимизации и лучших практиках. Но почитать детальнее - тут лучше искать какие-то специальные статьи про игровые движки, видеокарту, 3д-графику. Опять же, есть профайлер и различные свои соображения разработчик может проверять самостоятельно, на практике - запуская игру и смотря как изменяются fps и draw calls.
В целом, предположение по ситуации с треугольниками верное - это как если бы человек выходил на сцену читать сто стихотворений, или всего одно, но большое. В первом случае тратилось бы время на каждый отдельный для каждого стиха выход на сцену, представление читающего и его уход. Во втором случае вся "ритуальная обёртка" произошла бы один раз.
Всё, опять же, зависит от ситуации - если сшивать слишком много треугольников в один меш, то профит от его более быстрой отрисовки нивелируется в определённых сценариях тем, что камера не сможет отсечь лишнее. В случае примера со стихами - незачем читать сто стихотворений за раз, если публика пришла всего на 10 минут и банально не успеет всё послушать.
С материалами (текстура входит в их состав) ситуация похожая - если очень условно, то это как макнуть кисточку в одну краску и легко и быстро красить все объекты в один лишь этот цвет. Если же у нас одни объекты должны быть зелёные, другие красные, третьи синие, десятые - желтые, то всё замедляется, так как нужно сначала покрасить все зелёные в зелёный, потом помыть кисточку, макнуть её в красный, ну и так далее.
Крайне интересная статья ,хоть и в примерах кода не всегда (лично мне ) понятна задумка автора .
Godot game engine | Введение в оптимизацию