Gravestone mod - Graves

Gravestone mod - Graves

4M Downloads

FPS lag

SvEgiiVEteR opened this issue · 41 comments

commented

хорошо что разработчик русский)

вообщем у меня возле катакомб сильно падает фпс.с 10 -20 модами от 15 до 20(фпс в среднем от 100 до 40)
с одним GraveStone-2.16.1.jar падает с 100-70 до 30 но чувствуются мелкие фризы.
на чистом майне с 1 модом 30 фпс это же не нормаль?
если нужно дам свою конфу ПК и так далее...
у товарища нвидео а у меня радеон...у него норм с фпс(и модов примерно 60+) у меня же..просто ужас.

commented

сделанные мною изменения в моем форке: Bogdan-G@fb5ae13 , у меня перед воротами +10фпс, и +5-10фпс перед жаровнями/входом в "домик". У SvEgiiVEteR все так же как было.

Да эти изменения не совсем аналог того что сделано для 1.8+ ветки. Что еще можно предложить? Может какие то строки кода для амд карточек? Ибо нвидия+интел явно иначе сработала, чем амд+интел. Хотя может еще дело в AVX инструкции ЦП помимо вызовов в старое поколение (что тормозит так же фпс рост).

commented

@Bogdan-G постараюсь на этих выходных смерджить, да остальные изменения с 1.8 перенести. Что ещё? честно говоря даже и не знаю, да и не уверен, что есть в этом смысл - не думаю, что получится получить сколь либо значимый прирост(а вот времени потратится не мало)

commented

@NightKosh может можно еще больше отвязать от вызовов в ванилу, по крайней мере у др. модов таких то проблем нет, в теории ТЕ морозить/перевести в блок, а ивенты на могилку можно с записью координат сгенеренной могилки без непосредственного чека оной. Я имхо до конца не догоняю что такого тут чтобы фпс убегал, падает перейдя в ванильные методы и чем длиннее тем больше, но ванила мобы толпой или толпа спавнеров то фпс не сажают тем не менее :/
PS гитхаб нотификации тупят - я чекаю каждый день, а только 24.02 пришло 2 уведомления 2дн и 4дн давности, т.е. часть приходит быстрее, часть похоже (если я точно заходил) реже (или мб кэш арбуза еще причина).

commented

еще изменения в моем форке Bogdan-G@d4792e3, на этот раз более эффективно, фпс у меня в плоском мире поднялся в 1.5-2раза, внутри тоже, я расковыривал ванильные вызовы, да как вариант согласен можно как с мечами своим кодом отрисовывать цветы.

commented

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

commented

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

commented

про мобов я понимал, по этому улетал далеко потом обратно к катакомбам(так как при гене их там тьма сразу появляеться... кости на полу тоже выключал в моде, но тоже мало чем помогло). но всё равно фпс низкий 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,но на фпс это не сильно влияло..буд то дело ещё в чём то

commented

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

commented

Что касаемо отдельного мира - тут не совсем всё так. Польза всё же будет - отделение наземной части катакомб от подземной + отсутствие каких-либо других мобов(помимо тех, что будут спауниться в катакомбах) и тайлов. Конечно это не даст значительных результатов, но всё же хоть чуть-чуть но улучшит ситуацию.

commented

А ещё, в принципе, можно добавить отдельный конфиг, изменяющий рендеринг могил, на стандартные средства. Но тогда у них всех будет лишь один единственный "тип". Если, конечно, проблема именно с рендерингом(в чём я сомневаюсь, так как было бы крайне странно со стороны разработчиков майна, рендерить то, что не видно).

commented

@NightKosh в том то и дело не помогало срезания..эксперементы делал просто,выявлял из за чего фпс садиться..
"снизить количество мобов" ну это уже для процесса игры. а тут и убивания всех мобов не помогает.
"(в чём я сомневаюсь, так как было бы крайне странно со стороны разработчиков майна, рендерить то, что не видно)."тут уже надо тестить... мне...раз у меня конкретная просадка фпс

вот щас модов где то 100.. фпс от 70 до 100. стоит сгенерить или найти катакомбы..и встать у входа или спустится по лестнице(или срезать верхушку) фпс от 10 до 21.
чуть ниже спуститься лучше но на 1 или 2 фпс и то скачет.
тестил долго по пол часа стоял...убивал мобов(командой) улетал прилетал к входу..ни чего не менялось почти.
у забора до 40 или 50...а у входа прямо падает

commented

@SvEgiiVEteR а есть ли разница между дневным и ночным временем?

commented

@NightKosh "Если, конечно, проблема именно с рендерингом(в чём я сомневаюсь, так как было бы крайне странно со стороны разработчиков майна, рендерить то, что не видно)." - по данным WR большую часть времени поток клиента был занят рендерером могилок. А поток сервера почти все время спал.

Майнкрафт рендерит снизу вверх все что соприкасается с блоком воздуха и имеется освещение, поэтому мы сначало видим сеть туннелей, а только потом отрисованную поверхность. По логике должно брать то что видит игрок в пределах видимости дальности в настройках, но это работает не при первичном рендеринге. Я про версию майна 1.7.10 если что.

commented

@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 фпс..всё чего смог добиться

как дела на чистом майне без модов обстоят я выше писал

commented

насчёт входа не уверен. я его весь разломал на плоской крате. а вот могилы со цветми скорее всего. я их на кладбище все уничтожил после того как фпс упало с 120 до 39 после генеарции. ,после поломки могил со цветами поднялось до 60-70

commented

ниже рассуждения-предположения:
а не может ли быть рекурсивный пере-рендеринг? т.е. отрендерило, выгрузило,снова рендерит и так рекурсия, вместо того чтобы держать в памяти. Судя по WR что-то такое подобное делает, там рендер не крутит итемы(возможно постоянный пересчет)? Где в коде проверка на то что игрок видит могилку, а не так что рендерит если чанк загружен?

Еще сам вход фпс сажает, что там включается в нем?
Могилы это ТЕ, можно ли их периоды обновления вынести в конфиг?(на каждый тип, но я так понял из кода период обновления идет раз в 500 тиков в среднем? ибо похоже что куда чаще).
Так же я проверил в плоском мире, 660 могли обычные серые фпс амплитуда скачков нижняя грань ниже стало(120 вместо 140), но фпс в норме(150), а вот когда 1971 могилка то фпс упал до 80. Режим игры мирный. Хотя у меня I:SpawnRate=4000 но это не мешает фпс падать. Фпс не будет меняться если переключать день/ночь. B:IsFogEnabled=false стоит. сам конфиг: https://gist.github.com/Bogdan-G/3d7d9fa1e1cebcd757caf39aeb30e455

commented

@Bogdan-G Обработка ТЕшек не конфигурируема, так что, как минимум приходится обновлять счётчики для каждой могилы(примерно 20 раз в секунду) + как вы уже сказали, примерно в среднем раз в 500 тиков просчёт всего прочего(положение игрока, попытка спавна моба и прочие) - но всё это дело было донельзя оптимизировано в последней версии(что, в итоге, у меня 30 фпс подняло до 60) + в 1.8 просчёт всего этого будет для всех могил(в комнате) разом, что тоже чуточку улучшит ситуацию. Но в целом, всё это особо смысла не имеет, с учётом того, что нету разницы между ночным и дневным временем.

Что касаемо самих моделей могил - они все заранее создаются(по 1 штуке каждая) и используются для всех могил, так что тут тоже проблем быть не должно, разве что, как подметил @SvEgiiVEteR , проблема вполне может быть с рендерингом цветов и мечей.. Как появится время попробую с этим что-нибудь сделать. Как минимум конфиг добавлю, отключающий их рендеринг вообще.

commented

донельзя оптимизировано в последней версии(что, в итоге, у меня 30 фпс подняло до 60)

бэкпорт изменения возможны?


в сорцах ветки 1.7.10 забыли это: src/main/resources/assets/gravestone/textures/graves/GoldenVerticalPlateGraveStone.png


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

Сажает фпс рендеринг ТЕ, это весь почти зоопарк что есть в моде.

commented

@Bogdan-G Бэкпорт уже был.

commented

Потестировал "цветочки". Выставил 1000 могил с цветами - 18фпс. Отключил рендеринг цветов - 60фпс. Пытался оптимизировать - бессмысленно - проблема именно в том, как майнкрафт рендерит предметы не в инвентаре. Соответственно с мечами аналогичная ситуация. Видимо придётся добавить конфиг для отключения цветов(либо как-нить впихнуть их в саму модель могил) + альтернативные модели для мечей(скорее всего те, что были раньше).

commented

вот именно что рендер ваниллы убог, в коде модов я вижу часто что мод сам вне зависимости от рендер-класса майна ведет свою отрисовку(и накладывание текстуры) по своему.


в коде 1.7.10 идут таймеры, а что если делать так?
event.player.ticksExisted % 200?

commented

свой рендер напрямую через LWJGL или OpenGL))
но тут главное чтобы норм было, не сильно важно через что.

commented

Поковырял ванильный код, повыкидывал часть ненужных действий. В итоге до 28 - 30 фпс поднялось. В принципе можно попробовать полностью перепилить ванильный рендер, может даже и заработает нормально)

commented

Свой рендер пожалуй уж слишком на столь не значительную задачу(проще просто отказаться от "мечей" и цветочков, либо же использовать свои модели). А вот разодрать ванильный и оставить только нужное - вполне вариант...

commented

@Bogdan-G наконец таки выдалось время заняться этим. Перенёс твои фиксы. Так же добавил к ним настройки, как в 1.8.9 для выбора способа рендеринга и отключения отрисовки цветов. Большое спасибо за помощь!

https://minecraft.curseforge.com/projects/gravestone-mod-graves/files/2430785/download

commented

@SvEgiiVEteR боюсь тут уже врятли что-то можно сколь-либо серьёзно изменить, разве что заменить все модели могилок на "обрезанный блок", но выглядеть это, конечно, будет убого. Если говорить про упрощение/оптимизацию логики спавна мобов - всё что можно было перенести с новых версий уже сделано(есть там конечно парочка доп фиксов не попавших в 1.7.10, но они требуют более заморочных, обширных измененей, и не смогут быть применены к уже существующим мирам), ну а дальнейшее упрощение только лишь в ущерб функциональности...

commented

@NightKosh я щас попробую sample сделать и кинуть файл,
но может ради теста и выяснить в чём дело сделать какую нибудь дебаг версию или скажем с отключением чего - либо.
так как игра нормально работает с 200 модами разными. а вот в этом месте даже с 2 или 3 модами фпс прямо улетает в трубу.

commented

@NightKosh мне фиксы на 1710 те не помогали если тока пару фпс.. щас это проверю))

commented

@SvEgiiVEteR для отключения отрисовки цветов есть опция "renderGravesFlowers", а для упрощённых моделей могил из мечей "vanillaRendererForSwordsGraves"

commented

@NightKosh ну вообщем проверил стало лучше но не особо.
было где то от 20-до 24 фпсу входа.
щас от 31 до 40
и отключени рендеренга не помогло с приростом фпс )
и сейчас опять до 26 упало...
я думаю в целом на большенства машинах фпс думаю улучшится но лично мою проблему это ни как решило...
и в чём конкретно у меня проблема я даже не представляю...

commented

@Bogdan-G Странно, в уведомлении числится комментарий от вас, но здесь я его найти не могу... Касаемо комментария - я что-то забыл перенести? Вроде бы полностью перенёс весь контент файла рендерера из вашей ветки(с небольшими изменениями после).

commented

@NightKosh я затупил, перечитывал коммит и догнал, что все перенесли, поэтому комментарий с вопросом удалил.

commented

еще изменения по теме фпс: Bogdan-G@242a9a9

commented

@Bogdan-G вот даже интересно, чем вам так switch-case не угодили?) Везде говорится что свитч таки чуть быстрей(хотя убедительных аргументов, всё же, найти не удалось), да и с позиции читабельности, как по мне, он явно удобней.
Для чего создавать свои собственные "адско-кирпичные блоки"?)
Корректировки в TickEventHandler стоят того? Что там вообще происходит?)
Касаемо баги с консольными командами - в 1,10 было пофикшено(без доп событий на остановку сервера)

У вас, случаем, нет желания заняться поддержкой 1.7 версии(любым удобным/приемлемым для вас способом)? Мне явно в ближайшее время не до этого будет - сейчас на 2 недели в командировку, да и после надо бы обнову к 1.11, 1.12 закончить, что, в целом, явно затянется ещё месяца на полтора, если не больше, а там ещё минус месяц на отпуск...

commented

@NightKosh

switch-case не угодили?)

я тест погонял в JMH, по нему иф быстрее был в 2 раза, а по читаемости это смотря как, по сути свитч тупо дольше потому что проходит все условия и не отсекает часть веток в отличии от ифа который JIT может одним из способов свернуть, у свитча форма в скомпиленном виде выходит не оптимальная, хотя есть и др варианты, почему так для простых условий не понятно, тест тут:
http://paste.ubuntu.com/24360963/

Для чего создавать свои собственные "адско-кирпичные блоки"?)

чтобы их генерация руд(и не только она) могла реплейсить что решает часть коллизий при генерации чанков, а как дополнение: чтобы игрок в низер пошел за кирпичем. К этому еще идея: идея что часть данжа что например глубже иметь возможность быть частично и более разрушенной по каким то причинам, в рпг играх да и фильмах не редко в пещерах часть затоплена, часть обвалило, хотя бывают и хорошо сохранившиеся, нюанс реплейсинга(isReplaceableOreGen) - порядок что на что генерирует отчасти закономерен, а отчасти то так то сяк, отсюда: воздух в комнате отреплейсило, а стены позже разместило и выглядеть эффект что часть например потолка обвалилась уже не то, руда или декор или другое генерируемое подобным способом просто висит в воздухе может, порядок похоже у воздуха ванили раньше чем мод блоки.

Корректировки в TickEventHandler стоят того? Что там вообще происходит?)

сдвиг времени старта и конца тумана, пытается сдвинуть каждые 40 минут ирл, чем больше сдвиг тем меньше его шанс, сдвигает как в плюс так и в минус.

Касаемо баги с консольными командами - в 1,10 было пофикшено(без доп событий на остановку сервера)

возможно то что я сделал это костыль, команда отваливалась становлясь незареганной, я ее перерегистрировать сделал.

У вас, случаем, нет желания заняться поддержкой 1.7 версии(любым удобным/приемлемым для вас способом)?

да не вопрос, в какой то мере ее поддерживать.

commented

пишите - что именно нужно из изменений? в PR часть вносить?
ПС если нужны(например для обсуждения чего то, например части не по теме исуса) контакты дс/вк/скайп/и т.д. могу написать.

commented

@Bogdan-G странно, очень странно, согласно документации должно быть наоборот, как раз таки сразу переходить к нужной ветке, без обхода всего остального.. ну да и ладно, раз уж тесты так показывают пусть так и будет).

commented

@Bogdan-G что касаемо поддержки - у меня каких-либо конкретный требований нету, можете делать всё, что пожелаете.
Честно говоря, мерджить столько изменений крайне лень, да и боюсь что-нить да поломается/потеряется по пути, и было бы, наверное, лучше если бы вы сами её и выкладывали(если вам такой вариант приемлем). Не уверен правда, можно ли расшарить доступ на curse-forge.
При необходимости я не буду против ни отдельных страниц на форуме и прочих сервисах с отдельным описанием / ссылками на загрузку, если вам оно понадобится)

commented

@NightKosh гм ок, еще вопрос: версия я так понял по сурсам этого репозитария + изменения поверх? Ибо есть еще мой форк-репо и может чем то отличаться или иметь изменения балансовые под мой модпак(явно не по теме может быть).

наверное, лучше если бы вы сами её и выкладывали(если вам такой вариант приемлем)

да такой вариант тоже не проблема, мне не сильно принципиально каким именно образом, уточнить (уяснить) для себя только надо что есть и какой можно использовать.

ПС я тогда должен по идее создать еще репо для себя или ветку чтобы не перепутать где я, а где "офиц ветка репо".

commented

@Bogdan-G да нет, не обязательно, можете и по своей ветке делать. Не знаю конечно, что именно у вас за балансовые изменения, но, это уже, по сути, проблема конечных пользователей - если их ваши изменения баланса не устраивают, то всегда есть моя - нынешняя версия. Главное явно указать про эти отличия, а дальше уже пусть сами решают)

Создавать отдельную репу или ветку - уже вам решать, по сути это лишь вопрос удобства. Если хотите в отдельной ветке - могу дать доступ к текущему репозитарию, если удобней в отдельном - можете в отдельном. Как вам больше нравится/удобней.