Почему инди игры так сильно лагают?

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

Почему инди игры так сильно лагают? Разработка, Игры, Gamedev, Оптимизация, Лаг, Баг, Компьютерные игры, Длиннопост

(Можно было бы отфотошопить картинку и дописать, когда пое  на секунду фризануло в 30 раз за минуту, но мне лень)


Все хардкорные геймеры знают с какими словами ассоциируются инди игры у комьюнити. А именно: лаги, фризы, краши.

Конечно, мы сейчас не говорим об инди студиях, которые состоят из опытных ветеранов с большим опытом и талантом. Мы говорим об инди студиях (или можно сказать "инди-людях", т.к. в таких студиях 1-2 человека).


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

В чем же основные проблемы инди разработчиков с лагучими проектами? Они не понимают сути программ и вычислений. О чем речь? Давайте несколько углубимся в тему и посмотрим на простые и всех знакомый термин: FPS - кадры в секунду.

ФПС - это, простыми словами, сколько раз в секунду картинка на экране обновится.

Но, любые игровые движки мыслят более глубокой сущностью: миллисекундами исполнения (мс).

В 1 секунде = 1000 миллисекунд. Для того, чтобы выполнить какие-то действия, приложению затратить 20 миллисекунд. Сколько это фпс? 1000\20=50 фпс.

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

Т.е. если ваш процессор имеет тактовую частоту 3.2 ггц - это значит, что в секунду он может выполнить до 3.2 миллиардов действий.

Что даёт нам это понимание? Давайте проведём немного вычислений для наглядности.
Допустим, для игры требуется 1 млрд. действий в секунду.
Наш процессор имеет 3.2 млрд. действий
Итого вычислим ожидаемый ФПС на такой машине:
(100\320)*100=31 мс или 1000\31=32 фпс.

Сейчас мы имеет 31 фпс, но ведь 3.2 ггц - не самый слабый процессор. Что же будет на 2.2?
(100\220)*100=45 мс или 1000\45 = 22 фпс.


Итого, мы имеем, что чем меньше вычислений, тем больше производительность (спасибо, кэп). Но такая очень банальная вещь забыта многими начинающими инди разработчиками.

Основные проблемы начинающих в том, что они пытаются интерполировать свои знания из универа\уроков в школе на процесс разработки совешенно забывая про то, что в программирование не бывает бесплатных действий. Самое банальное: длина вектора (например, растояние между нашим персонажем и противников)? По какой формуле считать? Хм, давайте посмотрим в интернете...

Почему инди игры так сильно лагают? Разработка, Игры, Gamedev, Оптимизация, Лаг, Баг, Компьютерные игры, Длиннопост

Круто, такая хорошая формула, как по учебнику. Жаль, что она не подходит для геймдева от слова совсем. Начнём мыслительный процесс: что такое длина от одной до другой точки? Это относительное растояние между точками. Посмотрим пример расчётов с того же сайта:

Почему инди игры так сильно лагают? Разработка, Игры, Gamedev, Оптимизация, Лаг, Баг, Компьютерные игры, Длиннопост

Итак, тут длина - 6. Но в формуле у нас есть корень - сложная математическая операция, которую не используют в типичных формулах в геймдеве. Давайте просто его уберём и получим, что длина = 36, а не 6. Разве для нас или игроков есть разница на какую цифру мы ориентируемся на 36 или 6? Никакой разницы нет, а процессорное время сэкономили. Т.е. вы просто будете сравнивать этот результат с другими числами - вот и всё.

И такой подход в геймдеве почти к любой формуле физики и математики. Если разницы нет - зачем платить больше?

И это самое базовое - математика\физика. Существуют так же другие пути оптимизации графики и прочего, но все они сводятся к простой истине: Чем меньше расчетов - тем лучше.


Но, основная засада в том, что нельзя сделать оптимизацию по типу: вот я её провёл, теперь всё будет отлично. Т.е. неопытные разработчики, которые в силу незнания или непроглядной тупости смогут косякнуть в пару кликов.Т.е. процесс оптимизации решений - регулярный. И чем более опытный разработчик, тем реже требуется оптимизации его решений.

Допустим, в сцене стоит 2 моба. Человек тестирует его, вроде бы всё ок по производительности. Он всё сделал, отдал дизайнерам, которые начали в сцене использовать 40 мобов. Т.е. в будущем допустив небольшую ошибку производительность на сцене упадёт разительно, ибо потребление ресурсов будет умножено на 40. (Привет POE)


------------------------------------------------
Давайте немного примеров:

Майнкрафт - огромный мир из множества блоков.
Ведьмак 3 - огромный красивый мир с синематиками, динамичной боёвкой и крупными локациями.
Инди игра Eco - небольшие миры, где можно кооперироваться, строить дома как в майнкрафт и, в целом, игра и задумывалась как улучшенный клон майнкрафта.

Что по производительности?
Майнкрафт - запуск на любом ведре и игра без лагов.
Ведьмак 3 - запуск только на средне-хороших компах и игра без лагов.
Eco - запуск на топ компах, фризы и лаги на каждом шагу.


Т.е. вдумайтесь в ситуацию, игра визуально и идейно не сильно ушла от майнкрафта, а ресурсов потребляет больше, чем Ведьмак 3. Это просто безумие. Просто так этого не сделать - тут талант нужен.

В чем же причина лагов и такой жести в этом проекте? Вероятно в том, что у тех. специалистов нет даже базовых знаний о подходе к оптимизации. Т.е. сходу тестируя игру я увидел отсутствие использования базовых механизмов оптимизации проекта. Это я даже в код не смотрел. Сходу видны были горы ошибок и неправильных использований базовых технологий. Например, когда открываешь дверь, то каждая позиция двери приходит от сервака. Т.е. пока она открывается я получаю 20+ пакетов сверху, а это всё тоже не бесплатное.

Что ещё? Хм, миры в Eco загружаются\создаются очень долго, миры в Minecraft - 2 секунды. Почему? Всё просто. Ребята из Eco в тупую хранят все клетки как физ. объекты, а не как Гейб в Minecraft-е - в паре тысяч цифр.

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


P.S. К слову говоря, когда-то давно, в моей фриланс активности была попытка попасть в их команду, но я не осилил технический тест, в котором требовалось написать динамически генирируемый лабиринт и поиск пути в нём не копируя чужие решения. Сам тест - чушь, потому что копируя решения задача решается за 10 минут, но вероятно поэтому у них такие проблемы с оптимизацией.

P.S.S. Не идите дети в разработчики игр, если не готовы въебывать как проклятые изучая гору инфы и разочаровыватся в собственных силах.

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

- Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"

1
Автор поста оценил этот комментарий

Тогда причина простите в кодерах.

Они все время лепят дермецо, но иногда получается что-то лучше слепленое.

раскрыть ветку (1)
Автор поста оценил этот комментарий

Талантов много нет, выбирают из того, кто есть.

3
Автор поста оценил этот комментарий
А теперь представь, что решение есть и можно не мучать жопу. Почти всегда есть решения откуда можно копировать.

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

Кек. Сейчас бы без интернета работать. Из разряда: "Калькулятор на экзамене нельзя использовать! Считайте сами".

- Прихожу устраиваться в автомастерскую

- Просят открутить колесо

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

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

Если ты сразу можешь сделать лучше, чтобы потом не нужно было переделывать, то зачем делать хуже?

Проблема в том, что ты не можешь слезть с темы "лучше/хуже". Когда как разговор идет о "достаточном/чрезмерном".

А на вопрос этот, можно отдельный пост написать. Но для примера, можно люто сговнокодить например когда тебе нужно проверить концепт, ты готовишь МВПшку, и если проект оказывается "жизнеспособным", то уже переписываешь нормально. Со временем. Может быть...

Понятно, что оптимизировать мелочёвку, когда это много времени занимает - глупо

Нет, глупо оптимизировать мелочевку, когда это не нужно. И похер на время.

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

Что значит "обязательно" нужна? Пример прям любой что ли? Абсолютно?

У меня есть 2 персонажа и мне нужно постоянно выводить на экран расстояние между ними.

Хуярю раз в пол секунды Vector3.Distance меж их позициями, и вывожу результат на экран. (можно и чаще, это не критично, но зачем)

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

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


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

"Я могу провести оптимизацию расчетов так, что каждый следующий агент будет потреблять меньше, но это не оптимизация!"
Сам-то понимаешь что говоришь?
Ты опять придумываешь за меня текст, а потом удивляешься тому какая хуйня получается?) Я ж тебя только в прошлом сообщении на этом ловил, а ты опять повторяешь.


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

И как пример, выполняя все условия задачи, я привожу обычное геймдев решение, расчет А*, который при элементарной реализации, одинаковой для всех, будет "крутиться" разное время для каждого из 40 агентов находящихся в лабиринте. И из "стандарта" времени выполнения (x40), можно при желании уходить хоть в большую, хоть в меньшую сторону. Просто расставляя объекты по разным определенным местам.

Про какую оптимизацию расчетов ты говоришь? Она там даже не упоминается нигде. Ни в твоем вопросе, ни в моем ответе.

Сфантазировал из нихуя называется)

раскрыть ветку (1)
Автор поста оценил этот комментарий
Ладно, остановимся на том что ты никогда не касался ничего серьезного и просто не можешь осознать о чем идет речь. Я больше не знаю что тут можно сказать.

Ладно, остановимся на том, что ты умеешь искать решения только через гугл. В пизду более узкие сайты, в пизду социнженерию. Инди разработчики такого не проходили.

- Прихожу устраиваться в автомастерскую
- Просят открутить колесо
- "Да это элементарная задача, щас в интернете гляну как правильно, и быстро сделаю"
И понимание этого момента так же остается на твоей совести. Ничего больше не буду про это писать, заебало мусолить.
Прихожу устраиватся юристом и меня просят правоприминительную практику по статье озвучить, но без интернета! Какой же ты юрист, если на память не знаешь?!
Но для примера, можно люто сговнокодить например когда тебе нужно проверить концепт, ты готовишь МВПшку, и если проект оказывается "жизнеспособным", то уже переписываешь нормально. Со временем. Может быть...
Ну тут всё прекрасно. Нет ничего более постоянного, кроме временного и, похоже, никаких серьёзных проектов ты не реализовал, потому что с таким подходом тебя бы быстро уволили.
Что значит "обязательно" нужна? Пример прям любой что ли? Абсолютно?
У меня есть 2 персонажа и мне нужно постоянно выводить на экран расстояние между ними.
Хуярю раз в пол секунды Vector3.Distance меж их позициями, и вывожу результат на экран. (можно и чаще, это не критично, но зачем)
Самое простой что пришло на ум, проще вроде как уже некуда падать.
И я в ожидании примера оптимизации этого ужасно жрущего ресурсы процесса, который категорически не подходит для использования в играх.
Можно и без корня выводить. Дистанция - понятие относительное в игровом мире, а то, что в юнити пока только Distance не значит, что все этой позиции придерживаются. Например, в Unreal разделение есть на Distance и DistanceSqrt потому что там они понимаю, что эти цифры относительные как бы ты их не посчитал.
Нет, глупо оптимизировать мелочевку, когда это не нужно. И похер на время.
Время - единственный ресурс в разработке, а тут прям похер. Панимаю уровень.

Речь идет о том, что твои задачи не имеют достаточно необходимых условий, и их можно крутить так, как выгодно решающей стороне.
И как пример, выполняя все условия задачи, я привожу обычное геймдев решение, расчет А*, который при элементарной реализации, одинаковой для всех, будет "крутиться" разное время для каждого из 40 агентов находящихся в лабиринте. И из "стандарта" времени выполнения (x40), можно при желании уходить хоть в большую, хоть в меньшую сторону. Просто расставляя объекты по разным определенным местам.
Т.е. формулу подсчета времени исполнения ты написать не можешь?

показать ответы
0
Автор поста оценил этот комментарий

А в чем причины лагания текстовых редакторов?

раскрыть ветку (1)
Автор поста оценил этот комментарий

В том же)

показать ответы
2
Автор поста оценил этот комментарий
Ну тут всё прекрасно. Нет ничего более постоянного, кроме временного и, похоже, никаких серьёзных проектов ты не реализовал, потому что с таким подходом тебя бы быстро уволили.

Ты похоже даже не понял о чем я говорил, господи...

Ладно, запишем тебе в домашнее задание на лето понимание идеи, что "Под определенные задачи, есть определенные решения".

Можно и без корня выводить. Дистанция - понятие относительное в игровом мире,

Класс. Противник от вас в 400 метрах, и хуяк он тут из ближайших кустов выпрыгивает. Ну извини игрок, все относительно.

Какое относительное понятие блять? Хуле ты крутишься как уж на сковороде. Я ж тебе предложил привести это решение написанное более лучшим образом. И?

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

а то, что в юнити пока только Distance не значит, что все этой позиции придерживаются.

Что блять значит есть только Distance?

Ты такой "загулил Distance. Ага, есть. А SqrDistance? Оппа, нет. Ну и бракоделы блять, как так можно то." Так что ли?

Ты же мастер гугловод, ты же сам формулы расчета сверху приводил. Ты бы хоть поискал по своим тайным сайтам, проверил свои слова. Vector3.Distance(a-b) из юнити, это всего лишь альтернативное написание (a-b).Magnitude, появившееся для более лучшего понимания и облегчения новичкам работы с векторами, в исходном коде, это абсолютно одно и тоже. И если ты не хочешь вычислять корень, внимание, есть (a-b).SqrMagnitude. Нихуя не напоминает?

Если бы ты когда-нибудь смотрел исходники движков, то знал бы что структура векторов во всех них, реализована абсолютно идентично. Потому как математику заново не придумаешь.

А разное название функций и полей это всего лишь особенности движка.

А если тебе зачем-то понадобиться именно Vector3.SqrDistance(a-b), и религия не позволяет использовать SqrMagnitude, то написать метод расширения над Vector3 настолько элементарно, что ты сможешь нагуглить это с 1 попытки. Или нет. Судя по этой написанной хуете.

Например, в Unreal разделение есть на Distance и DistanceSqrt потому что там они понимаю, что эти цифры относительные как бы ты их не посчитал.

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

Время - единственный ресурс в разработке, а тут прям похер. Панимаю уровень

В первом ты несомненно прав. Но косяк в том, что ты меняешь контекст утверждения, сменяя понятия.

- Глупо оптимизировать мелочевку когда это занимает много времени.
- Нет. Глупо оптимизировать мелочевку когда это не нужно. В независимости от времени.
- Ты сказал что время не важно для разработки.

Но ведь я то такого однозначно не говорил. А ты в очередной раз фантазер)

Т.е. формулу подсчета времени исполнения ты написать не можешь?

Это каким ты боком сделал это логическое заключение? Что из процитированного тебя к этому подтолкнуло? Мы же вообще написание кода не обсуждали никаким образом.

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


Ну поздравляю тебя, ты меня заебал. Ты тут столько раз уже прокекался, буквально в каждом сообщении, что мне уже просто не комфортно разгребать все это говно.

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


И так же для тебя, по заказу зрителей, песня

Предпросмотр
YouTube3:41
раскрыть ветку (1)
Автор поста оценил этот комментарий

Класс. Противник от вас в 400 метрах, и хуяк он тут из ближайших кустов выпрыгивает. Ну извини игрок, все относительно.

Какое относительное понятие блять? Хуле ты крутишься как уж на сковороде. Я ж тебе предложил привести это решение написанное более лучшим образом. И?
Я тебе привел элементарный конкретный пример, тебе очевидно нехуй сказать на его счет (хотя там раздолье чтобы доебаться), и началось очередное "ээээ хуёмое". Как же ты боишься признаться что ты был не прав и сморозил хуйни.

Какой бред, пиздец.

Ты похоже даже не понял о чем я говорил, господи...
Ладно, запишем тебе в домашнее задание на лето понимание идеи, что "Под определенные задачи, есть определенные решения".
Кек, ты снова додумал какие-то определённые задачи, где годится говнокод твой, когда за такое же время можно было написать нормально.

Что блять значит есть только Distance?
Ты такой "загулил Distance. Ага, есть. А SqrDistance? Оппа, нет. Ну и бракоделы блять, как так можно то." Так что ли?
Ты же мастер гугловод, ты же сам формулы расчета сверху приводил. Ты бы хоть поискал по своим тайным сайтам, проверил свои слова. Vector3.Distance(a-b) из юнити, это всего лишь альтернативное написание (a-b).Magnitude, появившееся для более лучшего понимания и облегчения новичкам работы с векторами, в исходном коде, это абсолютно одно и тоже. И если ты не хочешь вычислять корень, внимание, есть (a-b).SqrMagnitude. Нихуя не напоминает?
Если бы ты когда-нибудь смотрел исходники движков, то знал бы что структура векторов во всех них, реализована абсолютно идентично. Потому как математику заново не придумаешь.
А разное название функций и полей это всего лишь особенности движка.
А если тебе зачем-то понадобиться именно Vector3.SqrDistance(a-b), и религия не позволяет использовать SqrMagnitude, то написать метод расширения над Vector3 настолько элементарно, что ты сможешь нагуглить это с 1 попытки. Или нет. Судя по этой написанной хуете.
О чем речь? Ты снова додумываешь за меня слова. Я говорил о том, что для новичков не сделали функцию Distance без корня, а ты тут начинаешь расписывать какой-то бред.

Это каким ты боком сделал это логическое заключение? Что из процитированного тебя к этому подтолкнуло? Мы же вообще написание кода не обсуждали никаким образом.
Или ты выбрал стратегию пороть хуйню, а когда я буду за неё спрашивать, просто забывать о ней начинать пороть новую? Ты же не один свой вопрос не развил по этой ветке нашего общения. Ты общаешься только вопросительными предложениями, боясь углубиться в конкретику и сказать что-то против. А сейчас уже какие-то вообще рандомные вещи пошли.
Я понял, ты не знаешь как писать формулы подсчета исполнения времени кода и считаешь это написанием кода. Панимаю.
В первом ты несомненно прав. Но косяк в том, что ты меняешь контекст утверждения, сменяя понятия.
Снова контекст изменился, вы меня не так поняли, ко-ко-ко.

4
Автор поста оценил этот комментарий

Просто сказка)

Смысл? Любой адекватный разработчик находит решение, копирует, правит под себя.

А теперь представь, что есть кто-то, кто написал это самое готовое решение, с нуля. Представил? А теперь представь, что тебе поставили задачу, решения которой нет в интернетах? Накатывает ужас?) А такое бывает чаще чем кажется.

Да, в использовании чужих каких-то наработок нет ничего плохого, но представлять, что все вокруг какие-то "формошлепы", это как минимум странно.

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

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

Кулстори боб про "перед релизом проведём оптимизацию"? Сколько я такой хуйни слышал.

Ну так поменьше говори, реже будешь слышать. Ну правда.

Если год работали без взгляда на оптимизацию, то следующий год будете переписывать всё со взглядом на неё. Болезнь из разряда "всегда потом". Зачем делать хорошо сразу? Сделаю потом.

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

Я говорил про преждевременную оптимизацию, когда люди тратят время на решение не реальных задач, а каких-то будущих возможных теоретических проблем. И данная "экономия на спичках", её частный случай, когда такие умники как ты начитаются умных слов и начинается, "дистанция это медленно, используйте массивы, а не листы, это медленно, не используйте foreach, а только for, не используйте Linq, это все генерит мусор" и т.д. И обычно, как правило к таким заявления прилагаются веселые тесты, в миллионных прогонах которых, мы видим эту страшную разницу. И да, все эти заявление правда, с ними трудно поспорить, но вот только это актуально при очень определенных условиях, при формировании определенных задач, и утвержать что

Жаль, что она не подходит для геймдева от слова совсем.

нельзя. Подходит еще как. Да, не для всех решений, но для большинства вполне. Не нужно оверинженирить там, где этого не требуется.

а не так, как ты пишешь "сел, все сделал и збс".

Ну припиздивать то не нужно прям так в открытую, потому как я нигде такого не писал)

Ок, расскажи, сколько ресурсов потребит функция, которая потребляет n времени на одном объекте, если таких объектов 40 и каждая запускает эту функцию? Кек.

А, то есть мы под ресурсами понимаем только процессорное время? Ммм, ну ладно.

Но даже так, это задача в которой не хватает как минимум нескольких условий. Потому как я могу написать такие функции, что они будут выполняться как с меньшим временем, так и с большим, отталкиваясь от прямой зависимости от количества агентов. Очень много зависит от условий и задачи самой функции. Господи, да даже просто на примере из твоего собеседования, можно добиться любого результата (больше/меньше), используя одинаковую функцию поиска пути для всех, просто двигая агентов по полю дальше/ближе от цели. Исходя из размеров поля, поиск можно проводить каждый кадр, для более наглядного примера.

Что в принципе полностью соответствует поставленной тобой задачи.

Так что рановато ты кекнул. Раскекивайся обратно.

раскрыть ветку (1)
Автор поста оценил этот комментарий
А теперь представь, что есть кто-то, кто написал это самое готовое решение, с нуля. Представил? А теперь представь, что тебе поставили задачу, решения которой нет в интернетах? Накатывает ужас?) А такое бывает чаще чем кажется.
А теперь представь, что решение есть и можно не мучать жопу. Почти всегда есть решения откуда можно копировать. Да и если решения нет, то на задачу идёт больше нескольки часов. Подобные задачи за пару часов можно сделать только тогда, когда ты до этого такую задачу решал. Не иначе.
Ну так здрасьте, им то не результат нужен был, а твой ход работы посмотреть. А ты засал несколько классов написать. Я б тебя тоже попер. Если ты простое поле квадратное не можешь сгенерировать и элементарную реализацию того же Astar прикрутить к нему без интернета, как с тебя требовать то что-то более сложное.
Кек. Сейчас бы без интернета работать. Из разряда: "Калькулятор на экзамене нельзя использовать! Считайте сами".

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

Я говорил про преждевременную оптимизацию, когда люди тратят время на решение не реальных задач, а каких-то будущих возможных теоретических проблем. И данная "экономия на спичках", её частный случай, когда такие умники как ты начитаются умных слов и начинается, "дистанция это медленно, используйте массивы, а не листы, это медленно, не используйте foreach, а только for, не используйте Linq, это все генерит мусор" и т.д. И обычно, как правило к таким заявления прилагаются веселые тесты, в миллионных прогонах которых, мы видим эту страшную разницу. И да, все эти заявление правда, с ними трудно поспорить, но вот только это актуально при очень определенных условиях, при формировании определенных задач, и утвержать что
Что-то ты наркоманию какую-то несешь. Если ты сразу можешь сделать лучше, чтобы потом не нужно было переделывать, то зачем делать хуже? Понятно, что оптимизировать мелочёвку, когда это много времени занимает - глупо, но когда сразу можно сделать нормально, то в чем проблема? Мелочёвая оптимизация при больших затратах времени на это - это как спор о том, как назвать переменную\класс. Ахуенно бесполезные вещи.
Подходит еще как. Да, не для всех решений, но для большинства вполне. Не нужно оверинженирить там, где этого не требуется.
Приведи пример, где обязательно нужна дистанция через корень.
А, то есть мы под ресурсами понимаем только процессорное время? Ммм, ну ладно.
Но даже так, это задача в которой не хватает как минимум нескольких условий. Потому как я могу написать такие функции, что они будут выполняться как с меньшим временем, так и с большим, отталкиваясь от прямой зависимости от количества агентов. Очень много зависит от условий и задачи самой функции. Господи, да даже просто на примере из твоего собеседования, можно добиться любого результата (больше/меньше), используя одинаковую функцию поиска пути для всех, просто двигая агентов по полю дальше/ближе от цели. Исходя из размеров поля, поиск можно проводить каждый кадр, для более наглядного примера.
Что в принципе полностью соответствует поставленной тобой задачи.

"Я могу провести оптимизацию расчетов так, что каждый следующий агент будет потреблять меньше, но это не оптимизация!"

Сам-то понимаешь что говоришь?
показать ответы
1
DELETED
Автор поста оценил этот комментарий
Статья была бы актуально лет 15 назад. Сейчас оптимизация игр совсем другое. Есть туча встроенных утилит в любом движке, которые говорят где проблема по скриптам. Основная засада для низкопроизводительных машин это с батчами бороться и подбирать адекватный рендер пайплайн с постпроцессингом.
Короче в статье нет ни слово из реальной практики.
раскрыть ветку (1)
Автор поста оценил этот комментарий

Такие утилиты были всегда. Нужно понимать как оптимизировать место, которое тебе показывает, а не "смотрю в книгу - вижу фигу".

3
Автор поста оценил этот комментарий

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

раскрыть ветку (1)
Автор поста оценил этот комментарий

Первое, что пришло в голову. Хуже оптимизации просто не могу вспомнить. Хотя может какой-то dayz, который требует дофига ресурсов, когда графика и геймплей ниразу не динамичные.


Да и это не я хотел, а мне предложили.



Да и что такое "ошибка в оптимизации"? Само это словосочетание звучит как бред.

показать ответы
1
Автор поста оценил этот комментарий

Месяца два назад. А где-то с полгода знакомый вообще человек на 50 сервер поднимал и ничего. Хрен его знает короче.

раскрыть ветку (1)
Автор поста оценил этот комментарий

Зависит, конечно, от пк. Если 2080 там и топ проц, то мб и не заметно лагов. Так как игра позиционируется как для детей (потому что она там в какой-то образовательной программе сша), то она потребляет крайне много. Т.е. у меня сходу после запуска мира 8 гб оперативы и 3 гб видюхи она резервировала, как пример.

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

1
Автор поста оценил этот комментарий

Странно, гоняли в Эко мульт ввосьмером, ничего не лагало )


Хотя посыл поста понятен, да.

раскрыть ветку (1)
Автор поста оценил этот комментарий

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

показать ответы
0
Автор поста оценил этот комментарий
когда пое на секунду фризануло в 30 раз за минуту

Пое так фризанула, что аж Овервотч запустился =)

Иллюстрация к комментарию
раскрыть ветку (1)
Автор поста оценил этот комментарий

Это как новый губка боб переставал лагать после запуска ролика на ютубе. :D

1
Автор поста оценил этот комментарий

Ну такое. Слишком узко и односторонне. Фризы бывают не только со стороны проца, но и других подсистем, сетевого кода и пр. Кривые руки накосячат везде, вот и весь смысл поста

раскрыть ветку (1)
Автор поста оценил этот комментарий

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

0
Автор поста оценил этот комментарий
вы это скажите в лоб разработчикам DCS, со времен первого lock on игра тормозит так, что хочется ее удалить.
раскрыть ветку (1)
Автор поста оценил этот комментарий

Так что же останавливает? Сноси это говно!

показать ответы
1
Автор поста оценил этот комментарий

Ну такое. Слишком узко и односторонне. Фризы бывают не только со стороны проца, но и других подсистем, сетевого кода и пр. Кривые руки накосячат везде, вот и весь смысл поста

раскрыть ветку (1)
Автор поста оценил этот комментарий

Ага, но посты в одну строку слишком скучные. Везде первостепенно суть одинаковая - снизить кол-во действий. Хоть в сети, хоть в ГПУ.

Автор поста оценил этот комментарий

Судя по минусам у вас, тут люди либо сами инди разработчики которых вы за душу взяли и в самое больное ударили, либо first day unity devs, которые ждут перфоманса из коробки. В тему поста могу добавить что очень многие грешат тоннами кода в Update с проверкой всего и вся для каждого объекта, Instantiate-ами прям посередине процесса, огромными мутными текстурами и прочим говном. Насмотрелся, дааа

раскрыть ветку (1)
Автор поста оценил этот комментарий

Просто не совсем сейчас понимаю аудиторию сообщества, нужно провести опрос бы администрации.

Т.е. пост абсолютно нулевой и бесмысленный для специалистов, но имеет смысл для тех, кто только начинает что-либо делать.

А истории по типу "распиши всё до мелочей из коробки со всеми случаями и мы тебе за это может быть скажем спасибо" нелепые.

показать ответы
15
Автор поста оценил этот комментарий
P.S. К слову говоря, когда-то давно, в моей фриланс активности была попытка попасть в их команду, но я не осилил технический тест, в котором требовалось написать динамически генирируемый лабиринт и поиск пути в нём не копируя чужие решения. Сам тест - чушь, потому что копируя решения задача решается за 10 минут, но вероятно поэтому у них такие проблемы с оптимизацией.

Лол. Пришел на работу программистом, заставили кодить, вот же пидары.

P.S.S. Не идите дети в разработчики игр, если не готовы въебывать как проклятые изучая гору инфы и разочаровыватся в собственных силах.

Вообще не понял, к чему это прилеплено.

Итого, мы имеем, что чем меньше вычислений, тем больше производительность (спасибо, кэп). Но такая очень банальная вещь забыта многими начинающими инди разработчиками.

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

Круто, такая хорошая формула, как по учебнику. Жаль, что она не подходит для геймдева от слова совсем.

"А теперь я приведу вам пример, где буду вычислять 100 млн векторов в одном кадре. Ну вы видели, видели как быстро! То то же."

КлассЕка.

Преждевременная оптимизация. Не стоит страдать такой хуйней.

Допустим, в сцене стоит 2 моба. Человек тестирует его, вроде бы всё ок по производительности. Он всё сделал, отдал дизайнерам, которые начали в сцене использовать 40 мобов. Т.е. в будущем допустив небольшую ошибку производительность на сцене упадёт разительно,

Вопрос. Какую ошибку тут допустил тестировщик/программист? Делал гонки, а на выходе стратегия получилась почему-то? Не предугадал?

ибо потребление ресурсов будет умножено на 40. (Привет POE)

Нет, не будет, все немного сложнее работает)


Короче хуита какая-то. По теме нихуя практически, какие-то обрывки. Остальное, лиж бы текста забить побольше.

раскрыть ветку (1)
Автор поста оценил этот комментарий

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

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

"А теперь я приведу вам пример, где буду вычислять 100 млн векторов в одном кадре. Ну вы видели, видели как быстро! То то же."
КлассЕка.
Преждевременная оптимизация. Не стоит страдать такой хуйней.
Кулстори боб про "перед релизом проведём оптимизацию"? Сколько я такой хуйни слышал. Если год работали без взгляда на оптимизацию, то следующий год будете переписывать всё со взглядом на неё. Болезнь из разряда "всегда потом". Зачем делать хорошо сразу? Сделаю потом.

Вопрос. Какую ошибку тут допустил тестировщик/программист? Делал гонки, а на выходе стратегия получилась почему-то? Не предугадал?
Тут речь о том, оптимизация постоянный процесс, а не так, как ты пишешь "сел, все сделал и збс".
Нет, не будет, все немного сложнее работает)
Ок, расскажи, сколько ресурсов потребит функция, которая потребляет n времени на одном объекте, если таких объектов 40 и каждая запускает эту функцию? Кек.

показать ответы