w23 / xash3d-fwgs

Vulkan Ray Tracing fork of Xash3D FWGS engine. Intended to be merged into master at some point in the future.
160 stars 16 forks source link

materials: loading textures even when they are not needed #372

Closed 0x4E69676874466F78 closed 1 year ago

0x4E69676874466F78 commented 1 year ago

Сейчас система материалов подгружает текстуры всех указанных материалов даже тех которые не нужны для карты, это при большом количестве материалов приводит к тому что карты загружаются долго (более 5 секунд любая смена уровня). Требуется перед загрузкой замены текстур из материалов

  1. проверить их наличие в карте, если текстуры в карте нет то не грузить, если есть то загрузить и не выгружать пока на следующей карте они используются (проверить при переходе на другую карту).
  2. закэшировать текстуры спрайтов, моделей (при желании можно так же проверять какие модели используются и не грузить их текстуры) и не грузить повторно при смены карты.
0x4E69676874466F78 commented 1 year ago

Материалы в принципе медленно обрабатываются даже если текстур мало, но много самих файлов материалов с пустыми записями. Нам бы их как-то кэшировать.

0x4E69676874466F78 commented 1 year ago

После того изменения со строкой я не уверен в том что материалы действильно загружаются. Особенно вкупе с этим: #332

w23 commented 1 year ago

После того изменения со строкой я не уверен в том что материалы действильно загружаются. Особенно вкупе с этим: #332

Какого изменения со строкой?

0x4E69676874466F78 commented 1 year ago

@w23 ну где ты убрал тормоза из-за спама принтом при загрузке материалов. Я не помню точный коммит и бегло поиск не даёт его найти.

w23 commented 1 year ago

Можешь привести примеры текстур, которые мы грузим, но не используем? Там только "new", или "for" тоже есть? Новые я могу условно легко грузить лениво, только если их действительно после патчинга попросили. Но вот с текстурами, которые нас попросил загрузить движок, а затем не стал нигде использовать, я не знаю, что делать. Потому что я в принципе ожидаю, что движок лучше знает, что ему вдруг может понадобиться.

w23 commented 1 year ago

И да, я всё ещё не понимаю коммент про "не уверен в том, что материалы действительно загружаются". И как к этому относится #332

0x4E69676874466F78 commented 1 year ago

Забей пока на эту проблему. Лучше посмотри в сторону

0x4E69676874466F78 commented 1 year ago

И да, я всё ещё не понимаю коммент про "не уверен в том, что материалы действительно загружаются". И как к этому относится https://github.com/w23/xash3d-fwgs/issues/332

Имеется ввиду текстуры.

w23 commented 1 year ago

Скорее всего тут происходит следующее: текстуры загружаются вне зависимости от того, существует ли "for" текстура, или нет. Мы безусловно загружаем все текстуры для таких материалов, а потом просто дропаем сам материал в конце, если для него не было "for" текстуры (оставив текстуры загруженными, да). Это нетрудно починить, откладывая загрузку на самый конец загрузки материала.

Труднее починить случаи, когда движок загрузил текстуры, но не использовал их. И случаи "new" материалов тоже труднее, т.к. рендер не знает, где они могут использоваться. Репочёс и более тесная интеграция с патчингом surface нужны, да.

Либо, альтернативно: все материалы загружаются лениво в таблицу, и только потом осуществляется загрузка текстур, которые в принципе могут быть запрошены. Либо даже стриминг текстур сделать в отдельном треде и на трансфер очереди, как у взрослых. Попить будет как не в себя!

0x4E69676874466F78 commented 1 year ago

Стриминг текстур интересная тема, но это сразу надо смотреть в контексте https://github.com/FWGS/xash3d-fwgs/pull/729 иначе это что-то странное получается, когда есть менеджер текстур/ресурсов а стриминг в вулкане отдельно делается. Там осталось до принятия пуллреквеста сделать:

1. Вернуть R_ShowTextures в ref api
2. Поправить оформление в texturelib
3. Прикрутить текстуры неба
4. Протестировать текстуры-заглушки
5. Решить, стоит ли оставлять оригинал текстуры в ref_ и вообще для чего оно использовалось раньше

Но zgdump уже не в состоянии это доделать судя по всему.

w23 commented 1 year ago

Привлекать движок к стримингу не вижу целесообразным. Движок же ничего не знает про дополнительные RT/Vk-специфичные текстуры, и не должен знать. У движка в голове всё ещё 1998 год на дворе и маленькие простые текстуры.

Если смотреть в будущее и пытаться научить движок (и GL рендер) новому и интересному, то там да, сложнее. Но меня точно не хватит ещё и на это.

Стриминг, ограниченный вулканом, сделать в принципе не так сложно.