Почему игры занимают все больше места?

Список игр, которые вскоре легко будут занимать более 100 Гб, безостановочно растет.

access_time13 ноября 2019remove_red_eye4752question_answer29

Помните, всего лишь месяц назад я писал, что технология HDD умерла для меня? Некоторые из последних игр очень стараются заставить меня пересмотреть эту точку зрения. Как только я подумал, что 1 Тб памяти будет более чем достаточно, а про 2 Тб даже говорить не приходилось, сразу же появилось (или стало известно о скором выходе) несколько игр, размер которых превысит 100 Гб. Конечно же, мне не нужно устанавливать на ПК все имеющиеся у меня игры, но мне нравится держать некоторую коллекцию для разнообразных тестов и всякого такого. Но я впал в изумление, когда увидел Red Dead Redemption 2, готовую поглотить 150 Гб, и Call of Duty: Modern Warfare, на которую в конечном итоге, судя по тому, что известно, может понадобиться 175 Гб.

Что за полнейший бред творится с размером игр?! Индустрия внезапно перепрыгнула с 50 Гб, считающихся огромными, до почти трехкратного превышения! Я помню, когда целые игровые миры могли содержаться всего лишь на одной дискете - ну, может, на коллекции дискет. Не важно. Дело в том, что, если бы мы все еще работали в дистрибуции с физическими носителями, мы смотрели бы на игры, которые требовали бы по 20 DVD, 250 CD или, если хотите, 121 500 3,5-дюймовых дискет). Разумеется, речь идет про версию с «высокой плотностью» размером в 1,44 Мб, а не о более ранней в 720 Кб.

Просто куча CD-дисков

Почему игры занимают все больше места?

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

Позвольте мне начать с простого примера - размеры файлов для относительно скромной текстуры разрешением 2048x2048 пикселей (2K-текстуры, если так привычнее). Если вы хотите сохранить такую текстуру без какого-либо сжатия, это будет означать 32-битное значение для каждого пикселя: RGBA (красный, зеленый, синий и альфа-канал - это такое техническое название для степени прозрачности). Всего получается около 4,2 миллиона пикселей и, как мы упомянули выше, 4 байта на пиксель, что в итоге выдает нам хороший файл размером около 16 Мб. А теперь подумайте обо всех моделях и текстурах в некоторых наиболее крупных играх с открытым миром. Если бы на каждой поверхности использовалась несжатая 2K-текстура, даже при размере игры в 150 Гб осталось бы место лишь для 9600 уникальных текстур.

Ладно, это на самом деле не выглядит слишком печально, но помните, что речь шла о 2K-текстурах. А что, если игра хочет использовать 4K-текстуры разрешением 4096x4096? Это увеличит размер файла в четыре раза и, как следствие, сократит число уникальных текстур до одной четвертой: 2400 текстур для 150 Гб или всего 800 текстур в игре на 50 Гб. Этого даже близко не достаточно для современной игры со множеством различных локаций, так что дело обстоит иначе.

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

Почему игры занимают все больше места?

Но позвольте мне вернуться к тому моменту, где я говорил о сжатии. Почему текстуры должны храниться без сжатия? Конечно, это может привести к несколько более высокому качеству изображения, но размеры файлов в итоге окажутся огромными (относительно). Любой, кто знаком с цифровыми изображениями, вероятно, думает, что файлы форматов JPEG или PNG подошли бы лучше, и если мы говорим про размеры файлов - они будут правы. Это как положить мусор в уплотнитель: JPEG высокого качества (но с потерей данных, то есть в нем все равно будут артефакты сжатия) может сократить размер файла примерно до 2 Мб или сильнее (соответственно, с более низким качеством изображения) - до 1 Мб или даже до 0,5 Мб. Если попробовать PNG, то его сжатие без потерь обычно может уменьшить размер файла вдвое.

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

Поприветствуем алгоритм DirectX Texture Compression, также известный как DXTC (или его ранняя версия - S3TC, названная в честь ныне уже несуществующей компании S3 Graphics, которая создала его еще в конце 90-х). Официально S3TC стал поддерживаться в DirectX с версии 6.0, выпущенной в 1998 году. Позже его переименовали в DXTC, развив его до пяти различных режимов работы. Я не буду углубляться в детали низкого уровня, но если вкратце, DXTC - это алгоритм фиксированного сжатия изображений. Это означает, что в отличие от JPEG и PNG, здесь легко с точностью определить, насколько большими будут конечные файлы, а также проще создать аппаратное обеспечение для ускорения обработки изображений. По сути, все современные видеокарты, начиная с 2000 года, имеют аппаратную поддержку S3TC/DXTC.

Для игр, использующих DXTC, наиболее распространенными режимами работы являются степени сжатия 6:1 или 4:1. Это означает, что игра может хранить в четыре-шесть раз больше изображений в том же объеме. Unreal Engine и Unity Engine тоже поддерживают DXTC, наряду с другими форматами файлов, и, хотя я уверен, что есть исключения, мне кажется, что большинство игр в настоящее время используют для своих текстур именно DXTC. И, естественно, не все текстуры, используемые в игре, должны иметь одинаковое разрешение, поэтому маленькие объекты, которые могут занимать всего несколько сотен пикселей экранного пространства, не будут храниться в виде массивной 2К- или 4К-текстуры.

Демонстрация того, почему в играх используют MIP-текстурирование

Почему игры занимают все больше места?

Есть еще одна вещь: MIP-текстурирование. «MIP» происходит от латинской фразы «multum in parvo», означающей «много вещей в маленьком пространстве» (да, я тоже не знал об этом, пока не написал эту статью - спасибо, Википедия!). MIP-текстурирование существует с начала 80-х годов и широко используется в графических приложениях. Краткий итог: не каждую текстуру нужно постоянно хранить в полном разрешении. Предварительно рассчитав текстуры с более низким разрешением, можно оптимизировать требования к памяти и пропускной способности.

В конечном итоге каждая DXTC-текстура сохраняет мипмапы одной и той же текстуры интервалами в половину разрешения, практически до нуля – до размера в 1x1 пиксель. Если вы работаете с 2K-текстурой, вам нужно предварительно рассчитать 11 дополнительных файлов: 1024x1024, 512x512, 256x256, 128x128, 64x64, 32x32, 16x16, 8x8, 4x4, 2x2 и 1x1. Unreal Engine даже предоставляет эти полезные сведения в своей документации с указанием окончательных размеров файлов.

Теперь мы можем, по крайней мере, получить разумное представление о том, сколько места потребуется игре, основываясь на количестве используемых текстур и их размере. Расчет начинается с количества уникальных текстур, и для простоты я собираюсь игнорировать тот факт, что не все текстуры имеют одинаковый размер. Я думаю, можно сказать, что для любой достаточно сложной игры со множеством локаций счет будет идти на тысячи текстур. Давайте просто попробуем 10000 в качестве удобного круглого числа.

Если исходить из размеров файлов, указанных Unreal Engine, то для 1К-текстур (стандартные текстуры «высокого качества») игре потребуется 13,3 Гб. Увеличьте разрешение хотя бы до 2K, и это приведет к скачку до 53,3 Гб. А если вам нужны новейшие и самые лучшие 4К-текстуры, вам придется подготовить 223,7 Гб. Упс! И это мы говорим только про текстуры. В играх также присутствует много аудиофайлов, особенно если учесть их полную озвучку (например, опять же, Call of Duty и Red Dead Redemption 2). Добавьте к рассмотрению файлы геометрии и разные видео, и в итоге любая современная игра, которая использует текстуры в разрешении 4K, окажется довольно массивной.

Сколько разных текстур в этом кадре?

Почему игры занимают все больше места?

Очевидно, что нет однозначного подхода относительно того, как игры хранят свои текстуры, не говоря уже об аудио и видео файлах. Тем не менее, в целом, большая часть проблемы разрастания размера последних игр, похоже, произрастает именно из текстурирования. Преимущество состоит в том, что мы больше не получаем в играх повторяющиеся текстуры, и все выглядит намного более реалистичным. Оглядитесь назад в прошлое на такие игры, как оригинальный Half-Life или Deus Ex, - не заметить улучшение качества изображения невозможно. Я с нетерпением жду возможности посмотреть на закат в Red Dead Redemption 2, любуясь графикой - и будьте вы прокляты, 150 Гб!

Но текстуры с более высоким разрешением, несомненно, подвержены уменьшению заметного прибавления в качестве, особенно при более низких разрешениях. Переключитесь с ультры на текстуры с высоким качеством (с 4K до 2K или с 2K до 1K), и изменения часто даже трудно будет заметить, особенно на 1080p-мониторе. Это потому, что высококачественные текстуры обычно используются только на небольшой части экрана. В конце концов, по понятиям, стена с 2K-текстурой должна выглядеть лучше, чем та же стена с 1K-текстурой, но отойдите подальше, и игровой движок, вероятно, заменит 2K-текстуру аналогом с более низким на одну ступень разрешением, и вы этого даже не заметите.

Это хорошая новость, потому что я, безусловно, совсем не жду игр, пытающихся использовать текстуры с разрешением 8K, которые еще в четыре раза увеличат их размер. Возможно, когда-нибудь в будущем мы все будем использовать 8K-дисплеи, и это встанет в разряд нормального, но, надеюсь, к тому времени у нас также будут доступные SSD-накопители емкостью в десятки терабайт. Или так, или кто-нибудь умный изобретет более эффективный алгоритм сжатия текстур. Я могу на это только надеяться.

Источник: PC Gamer

Комментарии (29)

Crimson Ink
13 ноября 2019
Потому, что не хотят оптимизировать, и хотят много бесполезного графна.

Ну кому вообще нужны эти хроматические аберрации, зернистость, свечение, размытие, глубина резкости и SSAO.

Со всеми этими закидонами игра становится корейским мыльным мылом. Да ещё новой новомодное нововведение, когда качество графики влияет непонятно на что, но не на графику. Нужно ещё отдельно крутить ползунок детализация графики под 200%. Что часто ничего не меняет, но начинает подтормаживать.

Делать чёткую картинку, без закидонов, и сразу место уменьшается.
Hardonliner
13 ноября 2019
:|) надо играть в лончер - , делаешь бенчмарк на нем тестируешь свой комп, высталяешь требуемые настройки и под эти настройки скачиваются файлы. А малоимущие граждане могут "питаться картошкой" - тогда и игра будет намного меньше весить. А по теме - а почему это в кинотеатре в ВИП ложе диваны такие большие? А почему в ресторане меню такое длинное? А почему в столовой такие длинные витрины?
Aiz
13 ноября 2019
Сообщения от Crimson Ink:

Потому, что не хотят оптимизировать, и хотят много бесполезного графна.

Ну кому вообще нужны эти хроматические аберрации, зернистость, свечение, размытие, глубина резкости и SSAO.

Со всеми этими закидонами игра становится корейским мыльным мылом. Да ещё новой новомодное нововведение, когда качество графики влияет

Тебе, по-моему, прямым текстом объяснили, что размер зависит от текстур высокого разрешения, при чем здесь постэффекты? Аберрация, размытие, динамическое освещение и вот это всё не тратит ни грамма твоего дискового пространства.
Я тебе открою такую штуку - https://reshade.me/ , позволяет натянуть любые такие эффекты практически на любую игру и весит примерно пару мегабайт.
Crimson Ink
13 ноября 2019
Сообщения от Aiz:

что размер зависит от текстур высокого разрешения, при чем здесь постэффекты?


Так они же нагружают видеокарту и жрут оперативку. Что сказывается на быстродействии и работе. И как я заметил, что игры, в которых этого нет, весят меньше.
DuDos
13 ноября 2019
Сообщения от Crimson Ink:

Так они же нагружают видеокарту и жрут оперативку

Ты можешь отключить эти эффекты, держу в курсе.
NeronBurnRome
13 ноября 2019
Сообщения от Hardonliner:

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


Какая связь между вип диванами и массовыми видеоиграми?
Plem
13 ноября 2019
Сообщения от Hardonliner:

делаешь бенчмарк на нем тестируешь свой комп, высталяешь требуемые настройки и под эти настройки скачиваются файлы.


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

Кстати что-то похожее происходит сейчас с ртх, вместо готовых карт освещения\отражений они генерируются с 0. Ну и сразу заметно что нынешние гпу такие расчеты не тянут (пока) :)
Показано комментариев 8 из 29

Смотрите также