Skip to content

Conversation

@Chip11-n
Copy link
Contributor

@Chip11-n Chip11-n commented Nov 11, 2023

Для игрока

Если у вас начинает сильно фризить игра после попадания с лазера или нескольких сварок, то идёте в преференсы и ищите Blur effect, переключаете его и проверяете.

Описание изменений

Обсуждалась уже проблема с тем, что по попаданию в куклу и какое-то время после этого у некоторых игроков очень лагает. Такое я встречал и у себя на старой машине, при полном отсутствии на более сильной. Пообщался с несколькими игроками, у всех симптомы схожи: помутнение от лазера, 4 сварок.

Итак, данный ПР даёт возможность жмякнуть в вкладке Preferences на кнопку Blur effect, что отключит этот фильтр для них, используя старый оверлей (туман по всему экрану). По крайней мере у моего ноута лаги пропадают.

Почему и что этот ПР улучшит

closes #12037

Авторство

Страдания слабых ПК

Чеинжлог

🆑

  • fix[link]: Найдена и оптимизирована проблема, связанная с лагами клиента на слабых машинах при появлении на экране эффекта блюра зрения (после попадания оружием, от сварки). Если проблема с лагом еще присутствует - добавлена опция на переключение на старый фильтр через кнопку "Preferences" -> "Blur effect"

@TauKitty
Copy link
Contributor

Changelog status: ✔️

@TauKitty TauKitty added Feature Новая фича Preferences Update labels Nov 11, 2023
@volas volas self-requested a review November 11, 2023 17:20
@TauKitty
Copy link
Contributor

Этот запрос на слияние был упомянут в Tau Ceti Station Forum. Там могут быть соответствующие подробности:

https://forum.taucetistation.org/t/fludilka-chast-2/28659/28373

@Chip11-n
Copy link
Contributor Author

Chip11-n commented Nov 12, 2023

Оказалось, что со старым оверлеем (который был до фильтра), не лагало. По этой причине теперь опция не убирает эффект вообще, а переключает его на старую версию. Если у кого будут с этим проблемы, введём и 3-ю опцию полного отключения.
Также при логине идёт зачистка оверлея для защиты от застывания. К примеру, если кукла у игрока получила блюр, гостанулся, блюр спадёт без клиента, то и экран МОБА не очистится и следующий зашедший за моба будет играть с фильтром до следующего его обновления. Также это защита от префов разных игроков (только одна версия фильтров обновляется у игрока)

Comment on lines 274 to 277
if(mob.eye_blurry)
game_plane_master_controller.remove_filter("eye_blur_angular")
game_plane_master_controller.remove_filter("eye_blur_gauss")
mob.clear_fullscreen("blurry")
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

может просто вызывать update_eye_blur() тут?

Copy link
Contributor Author

@Chip11-n Chip11-n Nov 13, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

В нем мы обновляем и убираем фильтры только по преференсам. Если у нас уже есть один из фильтров, то он застрянет для нас и не будет убран, ведь более не обновляется.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

там вроде как смотрит и на client.prefs.eye_blur_effect, флаг клиента, и на eye_blurry, флаг моба. Можно скорее всего учесть оба и сделать, чтоб всё корректно обновлялось в одном месте.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Честно, не понимаю как это сделать, что бы не срабатывало в холостую. Если мы имеем преф на новый блюр, то обновляется только новый блюр и процессинг ни коим образом не взаимодействует со старым, и наоборот.

Comment on lines -417 to -418
game_plane_master_controller.add_filter("eye_blur_angular", 1, angular_blur_filter(16, 16, clamp(eye_blurry * 0.1, 0.2, 0.6)))
game_plane_master_controller.add_filter("eye_blur_gauss", 1, gauss_blur_filter(clamp(eye_blurry * 0.05, 0.1, 0.25)))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

я, кстати, догадываюсь, почему оно могло лагать.

/atom/movable/plane_master_controller/add_filter(name, priority, list/params)
	. = ..()
	for(var/i in controlled_planes)
		var/atom/movable/screen/plane_master/pm_iterator = controlled_planes[i]
		pm_iterator.add_filter(name, priority, params)

Применяется фильтр не на плейн, а на гейм контроллер, а он в свою очередь создает копию фильтра для каждого из плейнов. Т.е. тут будет 13*2 (!!!) копий фильтра блюра!

Copy link
Member

@volas volas Nov 13, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Если тебя еще не задолбало, можешь попробовать применить фильтр к plane_master/game_world/ и потестить?
Что-то вроде

var/atom/movable/screen/plane_master/game_world/PM = locate(/atom/movable/screen/plane_master/rendering_plate/game_world) in client.screen
PM.add_filter()
PM.add_filter()

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Если задолбало, вечерам сам могу сделать тестовую ветку, но мне потребуется твоя помощь для определения лагучести

Copy link
Contributor Author

@Chip11-n Chip11-n Nov 13, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Я только вечером смогу затестить и проверить лагучесть.

Copy link
Contributor Author

@Chip11-n Chip11-n Nov 14, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Сделал по твоему предложению. Лаги почти полностью пропали, но всё же немного чувствуются. ФПС почти не просаживается, "замедление" времени тоже пропадает в таком варианте.

Comment on lines 275 to 276
game_plane_master_controller.remove_filter("eye_blur_angular")
game_plane_master_controller.remove_filter("eye_blur_gauss")
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

осталось в других местах плейн изменить (почему я и предлагаю в одном месте сделать - так проще)

@volas volas merged commit 8228961 into TauCetiStation:master Nov 14, 2023
TauKitty added a commit to TauCetiStation/ClassicChangelog that referenced this pull request Nov 14, 2023
@volas volas mentioned this pull request Jan 22, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Проседание частоты кадров

3 participants