Сегодня обсудим извечную тему с оптимизацией.

Поговорим как про общие вещи, так и те, что относятся чисто к разработке игр.
1. Гифка выше из игры Horizon Zero Dawn. Фича называется Occlusion Culling и позволяет не рендерить то, что не попадает в область камеры.

Давайте на примеры неё обсудим сабж.
2. Эта фича, думаю, по дефолту включена во всех движках. Но если и нет, то как бы вы пришли сами к такому решению?

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

Что дальше?
4. Ищем, как же сократить число объектов для отрисовки. Решение с тем, чтобы не отрисовывать всё, а лишь видимые объекты — логично.

Отлично. Проблема решена. Возможно...
5. А теперь посмотрим на этот скрин. Да тут же у нас отражения объектов, которые не попадают в камеру. Но мы их выгрузили. Или нет? Image
6. Как минимум, если нам нужны относительно достоверные отражения, то нужно оставлять информацию про геометрию и какую информацию о текстурах/цвете.

Как мы уже поняли, всё это держать в памяти не выйдет. И тут опять какие-то трейдофы будут.
7. На консолях, к примеру, RAM меньше, чем на ПК обычно. Нужно периодически, всё же, выгружать ресурсы из памяти. Что очень медленно, если у вас HDD (как было ещё на PS4 фат).

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

И вот все эти выгрузки/загрузки умудряются за кадры происходить в фоне.
9. Вы могли слышать про Ratchet & Clank, который выходит на PS5. Там эту фичу по максимум задействовали. И в порталах даже видны куски других миров, а не просто какие-то спрайты-болванки.
10. Даже текущие nvme на PC не могут такого выдать, т. к. всё тормозит декомпрессинг и проход через CPU.

К примеру, в RE8 на PS5 сейвы грузятся 2 секунды, у меня на PC с nvme около 4 секунд.
11. Порядок то вроде тот же. И в случае с сейвами это вполне приемлемо.

Но если вам нужно стримить ресурсы в рантайме, напомню, в рамках кадра-двух, то эта разница вам не позволит такое провернуть.
12. При разработки игр стоит точно такой же вопрос, как и в случае любого софта: нужно ли париться об оптимизации, если "premature optimization is the root of all evil"?

Многие фразу слишком буквально трактуют. Да и оптимизации же не только самого кода касаются.
13. Этот вопрос тесно связан с планированием и видением продукта. Нужно хотя бы примерно представлять, в каком направление будет развитие, чтобы на ранних этапах это заложить в систему.

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

Много раз сам ловил себя этом. Но про это в воскресенье расскажу.
15. Ещё интересный вопрос: как человек понять, что нужно что-то переделать? Как сформулировать проблему?

У всех ведь разный уровень. Кто-то только начинает.
16. Скажем, в Unity 5.2 была проблема с лишними аллокациями при обходе циклов итерраторами. Проблема? Ну...нет наверно, если это один раз за кадр. А если не один раз? А зависит ли это от числа элементов?
17. Скажем, новичок умудрился заметить это в профайлере. Что он будет гуглить? "У меня странные аллокации"?

Поэтому, если начинается работать с чем-то новым, то погуглите для начала всякие best practice для этой технологии/движка.

Это в будущем кучу времени сэкономит.
18. И помните: правильно поставленный вопрос — это уже половина ответа.

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

На том же StackOverflow раньше даже была причина закрытия для вопросов "Слишком общий", т. к. люди не могли выделить точно проблему. Как следствие, было сложно им помочь (почти невозможно).
20. И нужно задавать себе постоянно вопросы. Оптимизация — это ещё и про оптимизацию работы всей команды.

Если вы делаете синглплей платформер, то есть ли в планах локальный кооп? Если да, то возможно в будущем нужен будет мультиплеер с дедикейтед серверов?
21. В этом платформере явно будут абилки. Планируется ли даблжамп? Если такие вопросы не задавать, то левелдизайнерам придётся по нескольку раз перекраивать уровни.
22. А чардж в вохдухе? Отскок от стен? Представьте, сколько раз бы пришлось переделывать Hollow Knight, если бы все эти вещи не были продуманы изначально.
23. Многие вещи лучше заложить заранее. Особенно, учитывая, что в движках есть поддержка таких штук. В частности, хорошо бы оптимизировать модельки. В зависимости от расстояния грузить в отдалении LOD'ы с меньшим число вершим, чтоб не нагружать рендерер.
24. Вы даже не заметите разницы между такими модельками, а весть они будут в десятки раз меньше, вершин там может быть в сотни/тысячи раз меньше, что очень облегчает отрисовку.
25. По поводу LOD'ов был отличный доклад от разработчиков Assassin's Creed на GDC, где они кучу техник рассказали. И не только про LOD'ы.

26. В отдалении, к примеру, когда нужно отрисовать армии врагов, это вообще были не полноценные модели, а простые меши-болванки с простой анимацией.

На них даже физики никакой не висело. С ним нельзя взаимодействовать.
27. Даже всякие мелочи могут сильно ускорить кадр. Много полезных советов можно найти в этом видео про Unity.

28. Всякие базовые вещи типа работы с геттерами/сеттерами, кеширование трансформа, кеширование deltaTime, уменьшение операций с векторами, работа с массивами вместо списков и прочее.

Всё в сумме, в примере от разработчиков INSIDE, снизило время кадра со 106 до 10 мс. Image
29. Говоря про Unity (¬‿¬ ) Image
30. В том же докладе ещё отмечается, что нужно тестировать на всех платформах, где будет издаваться игра. К примеру, в INSIDE синус в редакторе и на ПК (в их кастомной реализации) работал быстрее дефолтного, на Xbox медленней. Image
31. Это же касается и окружения. Если вы пишете бекенд, то настройте такое же окружение, как на удалённом серваке.

Если на сервере nginx, то запускайте локально nginx. Не apache. Не какой-то dev-сервер. Именно nginx.

Желательно ещё работать под той же ОС (или в виртуалке).
32. В геймдеве чуть ли не в абсолют возведена практика предвычисления значений, а потом поиск их по таблице/хешмепе. Синусы, косинусы, поиск по графам и прочее, прочее.

Жертвуя памятью вы очень ускоряете многие вещи.
33. Зачем нам каждый раз прогонять алгоритм поиска пути, если у нас статичная карта и можно просто закешировать уже вычисленные пути?

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

docs.unity3d.com/Manual/nav-Nav…
34. В реалтайме очень ресурсоёмко просчитывать свет и тени, поэтому используются различные техники, когда свет запекают в лайтмепы.

Особенно полезно для мобилок.

learn.unity.com/tutorial/confi…
35. Про свет в Unity был отличный доклад прошлым летом.

36. В Silent Hill был туман, ограничивающий видимость. Image
37. В Witcher 3 уровни проектировались так, чтобы ограничить обзор игрока.

Об этом и многих других трюках можно в этом докладе с GDC узнать.

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

Очень вдохновляет.

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Человек из IT

Человек из IT Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @itunderhood

17 May
Привет! На этой неделе с вами я, проектно-программный менеджер про платежи. Буду делиться ежедневным из работы.

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

План: ежедневно писать про происходящее на работе с инсайтами а что делать чтобы не было больно!
Первое ежедневное: я начала писать сюда на 4 часа позже запланированного потому что воркшоп на полдня и 15+ человек пожрал мою мультизадачность.
Ничего плохого в воркшопах, но если вы хотите чтобы все присутствующие правда были с вами, запланируйте маленькие под-сессии и опубликуйте расписание заранее чтобы народ подтягивался когда интересно. Иначе будут в твиторах сидеть, а не людей слушать.
Read 12 tweets
16 May
Закончилась неделя, посвящённая геймдеву. Надеюсь, хоть какой-то из тредов оказался вам полезным. Спасибо за лайки, ретвиты и, самое главное, за интересные вопросы.

С вами был @Suvitruf. Всем хорошей недели, котята.

Ниже закину ссылки на всё, что обсуждалось на этой неделе. Image
Как войти в геймдев, как выйти и т. д.
Про выбор игрового движка.

Read 8 tweets
16 May
Сегодня день на расслабоне, поэтому поделюсь всякими капитанскими советами, многие из которых из личной практики.

Некоторые из этих ошибок/просчётов стали причиной закрытия нашего стартапа. Image
1. Отсутствие задокументированного плана/родмепа.

Если вы как-то свои цели документируете, то потом сложнее их менять. А если вы, всё же, их меняете, то есть тому подтверждение.

Когда же это всё только в вашей голове, то вы постоянно будете отклоняться от выбранного курса.
2. Это очень важно и в геймдеве, и просто у стартапов. Тут ещё можно про MVP рассказать.

Но, как по мне, лучше посмотреть одно видео от Майкла (одного из создателей Твича).

Read 20 tweets
15 May
"После разработки игр я не могу в них играть". Такое очень часто можно услышать от разработчиков игр.

Кто-то говорит, что "хобби перестаёт быть хобби, когда становится работой".

У нас ещё часто используют термин "игровая импотенция" (хотя это не только про разработчиков). Image
1. Всё это очень индивидуально. Кто-то, работая над играми, потом начинает везде видеть косяки отрисовки: "я не могу смотреть на эти лесенки", "в этой игре SSR убог", "в этой игре нет отражений персонажа в зеркалах".
2. Лично мне опыт разработки позволяет понимать многие технически вещи/трюки, которые другие разработчики проворачивают. Это очень вдохновляет и подогревает интерес к игре.
Read 11 tweets
13 May
Сегодня поговорим о поиске денег на разработку своей игры (не только игры, на самом деле).
1. Многие почему-то думают, что за деньгами нужно идти к издателю. Чуть меньше людей знают, что есть ещё инвесторы.

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

И за это забирает от 50% прибыли.
Read 24 tweets
12 May
Сегодня поговорим про кранчи и то, как они вредят индустрии и «сжигают» людей. Image
1. Кранчи — это длительные переработки, продолжающиеся неделями (а порой месяцами). В индустрии разработки игр довольно часто явление, особенно при разработке AAA-игр.

В начале этого года отдельную статью опубликовал. В этом треде тезисно пройдёмся.

suvitruf.ru/2020/12/31/827…
2. На написание оригинальной статьи меня натолкнули обсуждения игр, где люди не понимали вреда этого явления, а кто-то даже одобрял.
Read 51 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!

Follow Us on Twitter!

:(