crypt of decay - а теперь диско... упрощаем [entries|archive|friends|userinfo]
ketmar

[ userinfo | ljr userinfo ]
[ archive | journal archive ]

а теперь диско... упрощаем [Aug. 20th, 2018|07:57 am]
Previous Entry Add to Memories Tell A Friend Next Entry
идея сделать в двигателе массив для «обычных» тайлов, динамический грид для движущихся и специальных, и ещё один динамический грид для других объектов — это была идиотская идея. оправдана только тем, что первый портированый код был генератором комнат, и на то время реализации динамического грида ещё нифига толком не было.

в общем, уничтожил две первых фигни, и оставил один динамический грид на все объекты. проебал несколько процентов быстродействия (потому что «обычные» тупые тайлы теперь тоже «думают» на каждом кадре), но наверстал, перенеся сортировку массивов из VC в кресты. в итоге в общем гриде примерно полторы тысячи объектов для одного нормального уровня.

тащемта, сейчас игра выжирает примерно 15-18 процентов CPU на обычном уровне — это с учётом того, что она спамит кадрами в 60 FPS. и есть какой-никакой запас на оптимизацию: для объектов, которым надо думать на каждом кадре, можно завести отдельный списочек, а не перебирать всё, что в грид напихано. таким образом почти все тайлы обрабатываться не будут, потому что им думать не надо — а такие тайлы составляют как минимум половину, а то и две трети объектов в игре. особого смысла я в этом не вижу, потому что запаса CPU ещё дофига, но, может, сделаю просто ради интереса.

собственно, больше всего CPU выжирает рендер, потому что он создаёт и сортирует список всех видимых объектов для каждого построения кадра. и, кстати, зря, потому что игра рисует примерно 60 FPS, а логика работает на жестокой 30 FPS. то есть, список рендера можно не перестраивать, если камера не сдвинулась далеко, и не было тика. по идее, это должно скосить потребление ресурсов ещё на треть, а то и на половину (учитываем всякие накладные расходы). надо сделать, это проще, чем отдельный список для думалок, а эффект должен быть очень заметен.
Linkmeow!