FPS lag
SvEgiiVEteR opened this issue · 41 comments
хорошо что разработчик русский)
вообщем у меня возле катакомб сильно падает фпс.с 10 -20 модами от 15 до 20(фпс в среднем от 100 до 40)
с одним GraveStone-2.16.1.jar падает с 100-70 до 30 но чувствуются мелкие фризы.
на чистом майне с 1 модом 30 фпс это же не нормаль?
если нужно дам свою конфу ПК и так далее...
у товарища нвидео а у меня радеон...у него норм с фпс(и модов примерно 60+) у меня же..просто ужас.
сделанные мною изменения в моем форке: Bogdan-G@fb5ae13 , у меня перед воротами +10фпс, и +5-10фпс перед жаровнями/входом в "домик". У SvEgiiVEteR все так же как было.
Да эти изменения не совсем аналог того что сделано для 1.8+ ветки. Что еще можно предложить? Может какие то строки кода для амд карточек? Ибо нвидия+интел явно иначе сработала, чем амд+интел. Хотя может еще дело в AVX инструкции ЦП помимо вызовов в старое поколение (что тормозит так же фпс рост).
@Bogdan-G постараюсь на этих выходных смерджить, да остальные изменения с 1.8 перенести. Что ещё? честно говоря даже и не знаю, да и не уверен, что есть в этом смысл - не думаю, что получится получить сколь либо значимый прирост(а вот времени потратится не мало)
@NightKosh может можно еще больше отвязать от вызовов в ванилу, по крайней мере у др. модов таких то проблем нет, в теории ТЕ морозить/перевести в блок, а ивенты на могилку можно с записью координат сгенеренной могилки без непосредственного чека оной. Я имхо до конца не догоняю что такого тут чтобы фпс убегал, падает перейдя в ванильные методы и чем длиннее тем больше, но ванила мобы толпой или толпа спавнеров то фпс не сажают тем не менее :/
PS гитхаб нотификации тупят - я чекаю каждый день, а только 24.02 пришло 2 уведомления 2дн и 4дн давности, т.е. часть приходит быстрее, часть похоже (если я точно заходил) реже (или мб кэш арбуза еще причина).
еще изменения в моем форке Bogdan-G@d4792e3, на этот раз более эффективно, фпс у меня в плоском мире поднялся в 1.5-2раза, внутри тоже, я расковыривал ванильные вызовы, да как вариант согласен можно как с мечами своим кодом отрисовывать цветы.
проблема рендерера, а перенос в отд мир бредятина не много, ибо так оно лагать будет и в отд мире все по той же причине.
Привет. Это обусловлено большим количеством мобов + могил. Я сейчас как раз таки занимаюсь оптимизацией могил, дабы хоть как-то улучшить производительность + планирую перенести подземную часть катакомб в отдельное измерение, что тоже улучшит ситуацию. Но, к сожалению с временем у меня сейчас беда - работа + экзамены + госы + диплом...
про мобов я понимал, по этому улетал далеко потом обратно к катакомбам(так как при гене их там тьма сразу появляеться... кости на полу тоже выключал в моде, но тоже мало чем помогло). но всё равно фпс низкий 10-20 и то редко.
так же пробовал срезать верхушку территории /nukeup этим модом LagFix-2.0.1-mc1.7.10-forge.jar
но тоже не помогало может пару фпс и всё(а там все могилки срезаються + я копал на куба 5 вниз и всё что выше уничтожалось - вход, могилы, забор)
тут ещё может железный конфликт быть с ATI скажем.потому что у товарища моего нвидео, компьютеры почти схожы.и проц и озу...
если что буду рад протестировать...удачи в делах))
ещё с помощью LagFix-2.0.1-mc1.7.10-forge.jar удалял тайлентилы ..это лучше помогало на фпс +10
в итоге я уничтожал мобов и таелентилы с помощью LagFix(мобы и могилки изчезали) в радиусе 400,но на фпс это не сильно влияло..буд то дело ещё в чём то
Ну, срезать поверхность не обязательно. Есть конфиг(не помню уже название) отключающий генерацию могил на поверхности, оставляя только сам вход. Кстати, можно снизить расстояние от могилы, необходимое для спавна, а так же увеличить время между спавном мобов - это должно снизить количество мобов(но при этом и упростить прохождение). Ну, в принципе и снизить количество комнат(не уверен, есть ли эта опция в последней версии или нет)
Что касаемо отдельного мира - тут не совсем всё так. Польза всё же будет - отделение наземной части катакомб от подземной + отсутствие каких-либо других мобов(помимо тех, что будут спауниться в катакомбах) и тайлов. Конечно это не даст значительных результатов, но всё же хоть чуть-чуть но улучшит ситуацию.
А ещё, в принципе, можно добавить отдельный конфиг, изменяющий рендеринг могил, на стандартные средства. Но тогда у них всех будет лишь один единственный "тип". Если, конечно, проблема именно с рендерингом(в чём я сомневаюсь, так как было бы крайне странно со стороны разработчиков майна, рендерить то, что не видно).
@NightKosh в том то и дело не помогало срезания..эксперементы делал просто,выявлял из за чего фпс садиться..
"снизить количество мобов" ну это уже для процесса игры. а тут и убивания всех мобов не помогает.
"(в чём я сомневаюсь, так как было бы крайне странно со стороны разработчиков майна, рендерить то, что не видно)."тут уже надо тестить... мне...раз у меня конкретная просадка фпс
вот щас модов где то 100.. фпс от 70 до 100. стоит сгенерить или найти катакомбы..и встать у входа или спустится по лестнице(или срезать верхушку) фпс от 10 до 21.
чуть ниже спуститься лучше но на 1 или 2 фпс и то скачет.
тестил долго по пол часа стоял...убивал мобов(командой) улетал прилетал к входу..ни чего не менялось почти.
у забора до 40 или 50...а у входа прямо падает
@SvEgiiVEteR а есть ли разница между дневным и ночным временем?
@NightKosh "Если, конечно, проблема именно с рендерингом(в чём я сомневаюсь, так как было бы крайне странно со стороны разработчиков майна, рендерить то, что не видно)." - по данным WR большую часть времени поток клиента был занят рендерером могилок. А поток сервера почти все время спал.
Майнкрафт рендерит снизу вверх все что соприкасается с блоком воздуха и имеется освещение, поэтому мы сначало видим сеть туннелей, а только потом отрисованную поверхность. По логике должно брать то что видит игрок в пределах видимости дальности в настройках, но это работает не при первичном рендеринге. Я про версию майна 1.7.10 если что.
@NightKosh нет разници не замечал..удаление всех TE через LagFix помогало но лишь на 10 фпс прибавляло. при том что удалялось 2000 те.учитывая количество и прибавление фпс..дело в чём другом.я склоняюсь к конфликту с видеокартой АМД
вот после 5 минут создания карты
http://i.imgur.com/SKjlCmN.png от 40 до 80
в деревне например 50
потом фпс по лучше и стабилнее.
а вот возле катакомб
http://i.imgur.com/HFDa4r1.png
зашёл в подземелье http://i.imgur.com/gdaX5D6.png
график от мода sampler-1.60.jar
Удалил 3213 Tile Entities removed in range +-400
и 400 мобов в радиусе 400
в подземелье 25 фпс..всё чего смог добиться
как дела на чистом майне без модов обстоят я выше писал
насчёт входа не уверен. я его весь разломал на плоской крате. а вот могилы со цветми скорее всего. я их на кладбище все уничтожил после того как фпс упало с 120 до 39 после генеарции. ,после поломки могил со цветами поднялось до 60-70
ниже рассуждения-предположения:
а не может ли быть рекурсивный пере-рендеринг? т.е. отрендерило, выгрузило,снова рендерит и так рекурсия, вместо того чтобы держать в памяти. Судя по WR что-то такое подобное делает, там рендер не крутит итемы(возможно постоянный пересчет)? Где в коде проверка на то что игрок видит могилку, а не так что рендерит если чанк загружен?
Еще сам вход фпс сажает, что там включается в нем?
Могилы это ТЕ, можно ли их периоды обновления вынести в конфиг?(на каждый тип, но я так понял из кода период обновления идет раз в 500 тиков в среднем? ибо похоже что куда чаще).
Так же я проверил в плоском мире, 660 могли обычные серые фпс амплитуда скачков нижняя грань ниже стало(120 вместо 140), но фпс в норме(150), а вот когда 1971 могилка то фпс упал до 80. Режим игры мирный. Хотя у меня I:SpawnRate=4000
но это не мешает фпс падать. Фпс не будет меняться если переключать день/ночь. B:IsFogEnabled=false
стоит. сам конфиг: https://gist.github.com/Bogdan-G/3d7d9fa1e1cebcd757caf39aeb30e455
@Bogdan-G Обработка ТЕшек не конфигурируема, так что, как минимум приходится обновлять счётчики для каждой могилы(примерно 20 раз в секунду) + как вы уже сказали, примерно в среднем раз в 500 тиков просчёт всего прочего(положение игрока, попытка спавна моба и прочие) - но всё это дело было донельзя оптимизировано в последней версии(что, в итоге, у меня 30 фпс подняло до 60) + в 1.8 просчёт всего этого будет для всех могил(в комнате) разом, что тоже чуточку улучшит ситуацию. Но в целом, всё это особо смысла не имеет, с учётом того, что нету разницы между ночным и дневным временем.
Что касаемо самих моделей могил - они все заранее создаются(по 1 штуке каждая) и используются для всех могил, так что тут тоже проблем быть не должно, разве что, как подметил @SvEgiiVEteR , проблема вполне может быть с рендерингом цветов и мечей.. Как появится время попробую с этим что-нибудь сделать. Как минимум конфиг добавлю, отключающий их рендеринг вообще.
донельзя оптимизировано в последней версии(что, в итоге, у меня 30 фпс подняло до 60)
бэкпорт изменения возможны?
в сорцах ветки 1.7.10 забыли это: src/main/resources/assets/gravestone/textures/graves/GoldenVerticalPlateGraveStone.png
если возможно сделайте рендер более быстрым, без нагрузки на ванильные классы или своя реализация по простому. Кстати, а почему рендринг идет через ванильные классы?
Сажает фпс рендеринг ТЕ, это весь почти зоопарк что есть в моде.
@Bogdan-G Бэкпорт уже был.
Потестировал "цветочки". Выставил 1000 могил с цветами - 18фпс. Отключил рендеринг цветов - 60фпс. Пытался оптимизировать - бессмысленно - проблема именно в том, как майнкрафт рендерит предметы не в инвентаре. Соответственно с мечами аналогичная ситуация. Видимо придётся добавить конфиг для отключения цветов(либо как-нить впихнуть их в саму модель могил) + альтернативные модели для мечей(скорее всего те, что были раньше).
вот именно что рендер ваниллы убог, в коде модов я вижу часто что мод сам вне зависимости от рендер-класса майна ведет свою отрисовку(и накладывание текстуры) по своему.
в коде 1.7.10 идут таймеры, а что если делать так?
event.player.ticksExisted % 200
?
свой рендер напрямую через LWJGL или OpenGL))
но тут главное чтобы норм было, не сильно важно через что.
Поковырял ванильный код, повыкидывал часть ненужных действий. В итоге до 28 - 30 фпс поднялось. В принципе можно попробовать полностью перепилить ванильный рендер, может даже и заработает нормально)
Свой рендер пожалуй уж слишком на столь не значительную задачу(проще просто отказаться от "мечей" и цветочков, либо же использовать свои модели). А вот разодрать ванильный и оставить только нужное - вполне вариант...
@Bogdan-G наконец таки выдалось время заняться этим. Перенёс твои фиксы. Так же добавил к ним настройки, как в 1.8.9 для выбора способа рендеринга и отключения отрисовки цветов. Большое спасибо за помощь!
https://minecraft.curseforge.com/projects/gravestone-mod-graves/files/2430785/download
@SvEgiiVEteR боюсь тут уже врятли что-то можно сколь-либо серьёзно изменить, разве что заменить все модели могилок на "обрезанный блок", но выглядеть это, конечно, будет убого. Если говорить про упрощение/оптимизацию логики спавна мобов - всё что можно было перенести с новых версий уже сделано(есть там конечно парочка доп фиксов не попавших в 1.7.10, но они требуют более заморочных, обширных измененей, и не смогут быть применены к уже существующим мирам), ну а дальнейшее упрощение только лишь в ущерб функциональности...
@NightKosh я щас попробую sample сделать и кинуть файл,
но может ради теста и выяснить в чём дело сделать какую нибудь дебаг версию или скажем с отключением чего - либо.
так как игра нормально работает с 200 модами разными. а вот в этом месте даже с 2 или 3 модами фпс прямо улетает в трубу.
@NightKosh мне фиксы на 1710 те не помогали если тока пару фпс.. щас это проверю))
@SvEgiiVEteR для отключения отрисовки цветов есть опция "renderGravesFlowers", а для упрощённых моделей могил из мечей "vanillaRendererForSwordsGraves"
@NightKosh ну вообщем проверил стало лучше но не особо.
было где то от 20-до 24 фпсу входа.
щас от 31 до 40
и отключени рендеренга не помогло с приростом фпс )
и сейчас опять до 26 упало...
я думаю в целом на большенства машинах фпс думаю улучшится но лично мою проблему это ни как решило...
и в чём конкретно у меня проблема я даже не представляю...
@Bogdan-G Странно, в уведомлении числится комментарий от вас, но здесь я его найти не могу... Касаемо комментария - я что-то забыл перенести? Вроде бы полностью перенёс весь контент файла рендерера из вашей ветки(с небольшими изменениями после).
@NightKosh я затупил, перечитывал коммит и догнал, что все перенесли, поэтому комментарий с вопросом удалил.
еще изменения по теме фпс: Bogdan-G@242a9a9
@Bogdan-G вот даже интересно, чем вам так switch-case не угодили?) Везде говорится что свитч таки чуть быстрей(хотя убедительных аргументов, всё же, найти не удалось), да и с позиции читабельности, как по мне, он явно удобней.
Для чего создавать свои собственные "адско-кирпичные блоки"?)
Корректировки в TickEventHandler стоят того? Что там вообще происходит?)
Касаемо баги с консольными командами - в 1,10 было пофикшено(без доп событий на остановку сервера)
У вас, случаем, нет желания заняться поддержкой 1.7 версии(любым удобным/приемлемым для вас способом)? Мне явно в ближайшее время не до этого будет - сейчас на 2 недели в командировку, да и после надо бы обнову к 1.11, 1.12 закончить, что, в целом, явно затянется ещё месяца на полтора, если не больше, а там ещё минус месяц на отпуск...
switch-case не угодили?)
я тест погонял в JMH, по нему иф быстрее был в 2 раза, а по читаемости это смотря как, по сути свитч тупо дольше потому что проходит все условия и не отсекает часть веток в отличии от ифа который JIT может одним из способов свернуть, у свитча форма в скомпиленном виде выходит не оптимальная, хотя есть и др варианты, почему так для простых условий не понятно, тест тут:
http://paste.ubuntu.com/24360963/
Для чего создавать свои собственные "адско-кирпичные блоки"?)
чтобы их генерация руд(и не только она) могла реплейсить что решает часть коллизий при генерации чанков, а как дополнение: чтобы игрок в низер пошел за кирпичем. К этому еще идея: идея что часть данжа что например глубже иметь возможность быть частично и более разрушенной по каким то причинам, в рпг играх да и фильмах не редко в пещерах часть затоплена, часть обвалило, хотя бывают и хорошо сохранившиеся, нюанс реплейсинга(isReplaceableOreGen) - порядок что на что генерирует отчасти закономерен, а отчасти то так то сяк, отсюда: воздух в комнате отреплейсило, а стены позже разместило и выглядеть эффект что часть например потолка обвалилась уже не то, руда или декор или другое генерируемое подобным способом просто висит в воздухе может, порядок похоже у воздуха ванили раньше чем мод блоки.
Корректировки в TickEventHandler стоят того? Что там вообще происходит?)
сдвиг времени старта и конца тумана, пытается сдвинуть каждые 40 минут ирл, чем больше сдвиг тем меньше его шанс, сдвигает как в плюс так и в минус.
Касаемо баги с консольными командами - в 1,10 было пофикшено(без доп событий на остановку сервера)
возможно то что я сделал это костыль, команда отваливалась становлясь незареганной, я ее перерегистрировать сделал.
У вас, случаем, нет желания заняться поддержкой 1.7 версии(любым удобным/приемлемым для вас способом)?
да не вопрос, в какой то мере ее поддерживать.
пишите - что именно нужно из изменений? в PR часть вносить?
ПС если нужны(например для обсуждения чего то, например части не по теме исуса) контакты дс/вк/скайп/и т.д. могу написать.
@Bogdan-G странно, очень странно, согласно документации должно быть наоборот, как раз таки сразу переходить к нужной ветке, без обхода всего остального.. ну да и ладно, раз уж тесты так показывают пусть так и будет).
@Bogdan-G что касаемо поддержки - у меня каких-либо конкретный требований нету, можете делать всё, что пожелаете.
Честно говоря, мерджить столько изменений крайне лень, да и боюсь что-нить да поломается/потеряется по пути, и было бы, наверное, лучше если бы вы сами её и выкладывали(если вам такой вариант приемлем). Не уверен правда, можно ли расшарить доступ на curse-forge.
При необходимости я не буду против ни отдельных страниц на форуме и прочих сервисах с отдельным описанием / ссылками на загрузку, если вам оно понадобится)
@NightKosh гм ок, еще вопрос: версия я так понял по сурсам этого репозитария + изменения поверх? Ибо есть еще мой форк-репо и может чем то отличаться или иметь изменения балансовые под мой модпак(явно не по теме может быть).
наверное, лучше если бы вы сами её и выкладывали(если вам такой вариант приемлем)
да такой вариант тоже не проблема, мне не сильно принципиально каким именно образом, уточнить (уяснить) для себя только надо что есть и какой можно использовать.
ПС я тогда должен по идее создать еще репо для себя или ветку чтобы не перепутать где я, а где "офиц ветка репо".
@Bogdan-G да нет, не обязательно, можете и по своей ветке делать. Не знаю конечно, что именно у вас за балансовые изменения, но, это уже, по сути, проблема конечных пользователей - если их ваши изменения баланса не устраивают, то всегда есть моя - нынешняя версия. Главное явно указать про эти отличия, а дальше уже пусть сами решают)
Создавать отдельную репу или ветку - уже вам решать, по сути это лишь вопрос удобства. Если хотите в отдельной ветке - могу дать доступ к текущему репозитарию, если удобней в отдельном - можете в отдельном. Как вам больше нравится/удобней.