Дядя Миша писал: Достаточно по тем сурфейсам, которые видны из лифов, попавших в кадр. Но может случится ситуация, когда сурфейс не виден, а трава на нём видна. На этот случай можно увелчить bbox лифа.
Я там вообще сделал возможность использовать PVS-куллинг опционально. Т.е. рендер может бсп дерево не использовать вообще.
Добавлено 17-04-2021 в 23:55:
При каком условии R_AddGrassToChain должна возвращать true? Что-то не очень понятно, потому что она по факту для любого сюрфейса возвращает true, если хотя бы где-то на карте есть трава.
Ещё был баг с неимоверной кучей вызовов glEnable и glCullFace, эта пара вызывалась на каждый сурфейс при рендеринге мира в R_DrawWorldList
Был код такой:
C++ Source Code:
1
if( FBitSet( surf->flags, SURF_DRAWTURB ))
2
GL_Cull(GL_NONE);
3
else
4
GL_Cull(GL_FRONT);
Пофиксил вот так:
C++ Source Code:
1
int cull_type;
2
if( FBitSet( surf->flags, SURF_DRAWTURB ))
3
cull_type = GL_NONE;
4
else
5
cull_type = GL_FRONT;
6
7
if (cull_type != cached_cull_type) {
8
GL_Cull(cull_type);
9
cached_cull_type = cull_type;
10
}
Хотя мне вообще непонятно, зачем дергать куллинг для каждого сурфейса? В том месте кода же даже не рендеринг, а просто сбор нужных индексов.
SNMetamorph писал: Ещё был баг с неимоверной кучей вызовов glEnable и glCullFace
Ну и что, fps вырос после исправления? И зачем было городить огород, если переменная для кэша имеется в самой функции GL_Cull.
Ты её прямо там бы мог задействовать, но я не стал, поскольку периодически наблюдается рассинхрон стейтов между движком и клиенткой, а у меня не было времени каждый случай разбирать от отдельности.
Добавлено 18-04-2021 в 12:01:
Ты вообще за какую малосущественную ерунду цепляешься, которая ни на что не влияет. Обещал же исследование, что удалось существенно повысить fps, с картинкоме и-тогдалие, до сих пор ждём.
Дядя Миша писал: Ты вообще за какую малосущественную ерунду цепляешься, которая ни на что не влияет.
Ну так это лишь одна из мелочей. Но это хоть и мелочь, но все таки оно тоже негативно влияло, навскидку в сложной сцене на карте hg_industrialzone у меня фпс с 124 поднялся до 139.
Добавлено 18-04-2021 в 13:38:
Цитата:
Дядя Миша писал: Обещал же исследование, что удалось существенно повысить fps, с картинкоме и-тогдалие, до сих пор ждём.
Мне вот осталось разобраться с
Цитата:
SNMetamorph писал: При каком условии R_AddGrassToChain должна возвращать true? Что-то не очень понятно, потому что она по факту для любого сюрфейса возвращает true, если хотя бы где-то на карте есть трава.
А потом уже можно будет сделать подробное сравнение с ванильным ксашмодом.
Добавлено 18-04-2021 в 13:39:
Цитата:
Дядя Миша писал: А. В конце R_DrawBrushList будет вызов
C++ Source Code:
1
GL_SelectTexture( glConfig.max_texture_units - 1 ); // force to cleanup all the units
2
GL_CleanUpTextureUnits( 0 );
3
pglBindVertexArray( GL_FALSE );
4
GL_BindShader( NULL );
5
GL_Cull( GL_FRONT );
В принципе такой подход избыточен и можно не обнулять ничего, но внимательно следить, чтобы всё встало в дефолтное состояние к концу кадра, чтобы движок смог корректно отрендерить худ.
Аналогично и в студиомоделях и еще где-то. Вообщем надо провести ревизию состояния стейтов.
Добавлено 09-04-2021 в 11:25:
естественно там всё это есть.
А еще и с этим тоже можно поковыряться, возможно что неплохой прирост даст.
Дядя Миша писал: а что именно? Я вообще замечал, что фрустум иногда глючит, но так и не понял в чём там дело.
В общем, из-за неправильной проверки в R_AddGrassToChain она возвращала true даже для тех сурфейсов на которой травы не было, из-за этого в итоге остальные проверки видимости просто пропускались. https://github.com/SNMetamorph/xash...world.cpp#L3175
Дядя Миша и тем не менее даже без энтитей в некоторых местах больше 1000 дипов, и фпс здорово проседает. Например, на складе со стеллажами, где нужно искать папки.