Архив сообщества
2011 — 2019
Аватар Krieg

Лаги и оптимизация

Автор: Krieg · 12.01.2012, 19:59 · 49 сообщений

Сообщений в теме: 49

WiFiN#26
Krieg сказал: писал:
Почему лагает, когда люди - люди, и не лагает, когда они ящеры. Там что каждый тик проверяется какая ДНК, что персонаж одел, что держит в руках и обновляется картинка? когда поднимаешь предмет, он в руке появляется не сразу, то есть изменение спрайта связано не с процессом поднятия предмета, а обновляется каждый тик или каждые несколько тиков?

Оооо, в конфе, или даже здесь было обсуждение сей проблемы, правда очень давно. Дело в чем:
За отрисовку персонажей отвечает жуткий индусский говнокод, работающий следующим образом - раз в несколько тиков опрашиваются ВСЕ персонажи по ВСЕМ слотам на предмет того надето на них что-то или нет, а это все живые игроки, все обезьяны а так же трупаки и обезьяны с измененной хромосомой. отсюда и задержки при отображении когда одеваешь что-нибудь (уже в руках, можно использовать, а на персонаже еще не отобразилось), и хартбит лаг раз в несколько секунд, который превращается в полный пиздец, когда на серве дохрена народа. Что-то мне подсказывает что код распространения грибов  и алиенотравы был написан с помощью тех же сумасшедших умений, возможно изменение алгоритма сильно бы помогло справиться с лагом.
0
Get IC, bitches!
Скопировать ссылку
Gardanos#27
WiFiN сказал: писал:
За отрисовку персонажей отвечает жуткий индусский говнокод - раз в несколько тиков опрашиваются ВСЕ персонажи по ВСЕМ слотам на предмет того надето на них что-то или нет, а это все живые игроки, все обезьяны а так же трупаки и обезьяны с измененной хромосомой.

Охренеть, бьенд вообще позволяет это реализовать более человеческим образом? Из самых простых вариантов, увеличить количество тиков между проверками и сделать задержку при одевании одежды - моментально переодевающиеся люди ненужны все равно.
0
Ha Ha! I hid all yours signatures.
Скопировать ссылку
Creeperz#28
Gardanos сказал: писал:
Охренеть, бьенд вообще позволяет это реализовать более человеческим образом? Из самых простых вариантов, увеличить количество тиков между проверками и сделать задержку при одевании одежды - моментально переодевающиеся люди ненужны все равно.

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

Есть ли какие-нибудь подводные камни вроде хитрого алгоритма, не связанного с перерисовкой спрайтов, который использует именно нынешний сбор полной информации инвентаря?
0
Скопировать ссылку
Edo Linto#29
Что бы убрать лаги, не трогая атмос (у меня есть мат модель в несколько раз(меньше мат операций в ~60 раз) более быстрого атмоса, но её никто не будет пилить), надо переписать: трубы, свет и отображение персонажей. Полное удаление труб со станции убирает очень толстый кусок лагов.
Ещё в нашем коде очень часто бывает ситуация, когда не явление влияет на объект, а объект проверяет не находится ли он под явлением.
0
Скопировать ссылку
Matias Gray#30
Энзо, ты бы поделился своей легендарной моделью атмоса- пусть лежит тут где-нибудь, может какой-нибудь мимокодер заинтересуется и воплотит.
0
Атмос это магия.
Скопировать ссылку
Morlab#31
А мы по прежнему мерджим ревизии с TG станции? Не лучше ли показать твои наработки им, или я что-то упустил, раз никому не пришла в голову такая идея.
0
Скопировать ссылку
Edo Linto#33
С атмосом если кратко:
У нас атмос делится на 3 большие части: микроатмос(внутри боллонов и канистр), макроатмос(на тайтлах карты) и переход.  Суть оптимизации атмоса: переход с диффуров на линейное распространение, теплоёмкость константа, которая не зависит ни от чего, газы не сжимаемы это всё в макроатмосе.
Трубы станции переносятся из разряда микроатмоса/переход в разряд чистого макроатмоса. При расчёте макроатмоса считать не 5(и 9)х точечной схемами, а 2мя 3х точечными. Разделить атмос на последовательные части.

Теперь чуть подробнее: у нас есть 256^2 * число Z уровней тайтлов, среди них: Атмос-нулевые(космос), Атмос-нейтральные(пол), Атмос-пассивные(стены), Атмос-активные(входы и выходы системы труб). При расчёте мы проходим массив тайтлов сначала горизонтально, при этом: А(i,j)=(А(i-1,j)+А(i+1,j))*0,5
Где А(i,j) это параметр атмосферы на i j тайтле. Это на 2*N ом тике, на 2*N+1ом тике осуществляется вертикальный проход А(i,j)=(А(i,j+1)+А(i,j-1))*0,5.
Т.е. без учёта проверок(все тайтлы это пол) это сокращает вычисления на тик в 12 раз. Если i,j тайтл Атмос-нулевой то расчёт не производится. Если тайтл граничит с Атмос-пассивным тайтлом то значение на Атмос-пассивном тайтле берётся равным значению на i j ом. При расчёте Атмос-активного тайтла добавляется слагаемое Атмос-активности.
Трубы: трубы соединяются в единую систему труб, которая в совокупности представляет из себя одну единицу микроатмоса, все взаимодействия с системой труб эквивалентны взаимодействию с канистрой.

Вот краткий вариант атмоса.
0
Скопировать ссылку
Jack Rost#34
С трубами есть заморочки. При прорыве трубы посерёдке, с обоих концов постепенно выходит газ, тем самым с каждым разом отнимая газ у последующей трубы в цепочке, а она может быть очень длинная, при этом если будет неодинакового давления в последующих трубах, то количество проверок и расссчётов увеличиваеться, плюс надо учитывать что газ выходящий из трубы должен проверять какое давление снаружи.
На эту тему я картинку кажеться видел на ТГ форуме.
0
Скопировать ссылку
Edo Linto#35
При прорыве одна система труб поделится на две и будет эффект как от 2х открытых канистр у которых один из выходов в месте прорыва.
Цитата
тем самым с каждым разом отнимая газ у последующей трубы в цепочке, а она может быть очень длинная, при этом если будет неодинакового давления в последующих трубах, то количество проверок и расссчётов увеличиваеться
Поэтому систему труб я и предлагаю считать не совокупностью связанных объектов, а одним объектом.
Цитата
плюс надо учитывать что газ выходящий из трубы должен проверять какое давление снаружи
Можно опустить это, слишком малозаметная деталь.
0
Скопировать ссылку
Jack Rost#36
Edo Linto сказал: писал:
При прорыве одна система труб поделится на две и будет эффект как от 2х открытых канистр у которых один из выходов в месте прорыва.
Цитата
Поэтому систему труб я и предлагаю считать не совокупностью связанных объектов, а одним объектом.
А если скажем опять же посерёдке новой системы не будет трубы? На одном конце давлением малое, на другом нормальное. С учётом, что малое давление от конца может также и быть в остальных трубах считая от него(т.е там где труба сломалась, несколкьо труб в цепи давление понизили), а до тех где нормальное было ещё не дошло понижение давления.

Цитата
Можно опустить это, слишком малозаметная деталь.
Ну к примеру, если снаружи давление очень больше, то выходящий газ из трубы просто не сможет выйти. Хотя и вправду зачем? Не резиновое же помещение - не лопнет.
0
Скопировать ссылку
Matias Gray#37
О, если труба будет считаться как одна канистра, то передача газа будет идти мгновенно. Это офигенно же, можно будет на лету менять состав атмосферы в отсеках.
0
Атмос это магия.
Скопировать ссылку
Jack Rost#38
Matias Gray сказал: писал:
О, если труба будет считаться как одна канистра, то передача газа будет идти мгновенно. Это офигенно же, можно будет на лету менять состав атмосферы в отсеках.
Естественно, но я опасаюсь, что атмос может вести себя не правильно при разных и неучтённых ситуациях.
0
Скопировать ссылку
Editor TEH Chaos-neutral#45
Цитата
4. Освещение. Когда оно становится динамичным - на станции темно и кучи людей бегают с фонарями, лаги растут.
Линчую два раза. Люто и бешено ненавижу ивенты с отключением света, после синги конечно. Проблему выяснить не могу.
Цитата
3. Отрисовка людей. Когда кетрэткэт заменял всех на ящериц, лагало заметно меньше.
Тут не совсем фича в отрисовке. Тут проблема скорее в лютых нагрузках на сервер. В отличии от остальных мобов - люди имеют систему органов, где каждый тик производятся невообразимые действия. Это раз. Проблема в отрисовке не конкретно людей, а их одежды. Чем больше оверлеев приходится двигать - тем больше нагрузка. Не верите - сделайте всех голыми и сравните.
Цитата
2. Большое количество движущихся объектов
См. 3.
Цитата
1. Расчёт изменения атмосферы.
Не просто расчет, а натуральный трындец. Не забываем - СС13 задумывалась как симулятор атмосферы. Во-первых тысячи проверок(умножайте размеры станции, к счастью в космосе не просчитывается). Если начнется бурление - эти самие проверки начнут производить столько матана - что вам и не снилось. Используются формулы в ИРЛ физике, так что ничего удивительного.

Мое личное мнение - упросить сраный атмос, сделав его меньше матановым.
0
Скопировать ссылку
Editor TEH Chaos-neutral#46
Цитата
Почему лагает, когда люди - люди, и не лагает, когда они ящеры. Там что каждый тик проверяется какая ДНК, что персонаж одел, что держит в руках и обновляется картинка? когда поднимаешь предмет, он в руке появляется не сразу, то есть изменение спрайта связано не с процессом поднятия предмета, а обновляется каждый тик или каждые несколько тиков?
Именно так, господин. Для оптимизации предлагаю следующее - напилить методы обновляющие картинку персонажа, активируемые только при ситуациях, когда у человека меняют какую-нибудь переменную.
Цитата
Меня среди этого волнуют два вопроса. Во-первых есть ли хоть какая-то возможность юзать клиентскую обработку кода? Тут много кода, который можно повесить на плечи клиента. Во-вторых возможность юзать длл позволит перекинуть в них(в длл) код, который повесит обработку на клиента?
Нет, нету. Не реализовано.
0
Скопировать ссылку
Jack Rost#47
EditorRUS сказал: писал:
Цитата
Меня среди этого волнуют два вопроса. Во-первых есть ли хоть какая-то возможность юзать клиентскую обработку кода? Тут много кода, который можно повесить на плечи клиента. Во-вторых возможность юзать длл позволит перекинуть в них(в длл) код, который повесит обработку на клиента?
Нет, нету. Не реализовано.
Ну тогда надо просто ждать пока запилят, ибо лаги это могло снизить значительно.
0
Скопировать ссылку
Editor TEH Chaos-neutral#48
Цитата
Ну тогда надо просто ждать пока запилят, ибо лаги это могло снизить значительно.
95% вычислений на сервере - нафиг не нужны, и их надо переложить клиентам. Даже ту же отрисовку.
0
Скопировать ссылку
Jack Rost#49
EditorRUS сказал: писал:
Цитата
Ну тогда надо просто ждать пока запилят, ибо лаги это могло снизить значительно.
95% вычислений на сервере - нафиг не нужны, и их надо переложить клиентам. Даже ту же отрисовку.
Вот я про это и говорю. Так что ждём и надеемся, что реализуют.
0
Скопировать ссылку

Обратно в Архив