Существует растущий список игр, которые с удовольствием потребляют более 100 ГБ места для хранения.
Некоторые из последних игр очень стараются заставить меня пересмотреть свои взгляды. Там, где я раньше чувствовал, что 1 ТБ хранения было более чем достаточно, а 2 ТБ было просторным, несколько игр вышли или скоро прибудут, где размер установки составляет более 100 ГБ. Мне, конечно, не нужна каждая игра, которую я установил на своем компьютере, но мне нравится держать коллекцию вокруг для тестирования и так далее. И с Red Dead Redemption 2 , по-видимому, готов сосать 150 ГБ, а Call of Duty Modern Warfare думает, что в конечном итоге Redему может понадобиться 175 ГБ, это заставило меня задуматься.
Просто WTF происходит с игровыми размерами, которые мы внезапно прыгаем с 50GB, будучи большой установкой, почти в три раза больше!? Я помню, когда целые миры игр можно было содержать только на одном дискете-или, возможно, на коллекции дискет. Что угодно. Дело в том, что если бы мы все еще делали физические дистрибутивные носители, мы смотрим на игры, которые потребовали бы 20 DVD, 250 компакт-дисков или всего лишь 121 500 3,5-дюймовых дискет. Это разновидность "высокой плотности" 1.44 MB, естественно, а не более ранняя версия 720KB.
Я решил немного покопаться, потому что, хотя простой ответ заключается в том, что есть больше текстур, видео, аудио, карт и других файлов, которые включены, это на самом деле не все объясняет. Я в конечном итоге сосредоточился на первом пункте в этом списке, потому что он был самым доступным, и я видел довольно много текстурных пакетов HD, вышедших за последние пару лет. Что я действительно хотел бы знать, так это почему текстуры с более высоким разрешением настолько гигантские.
Позвольте мне начать с простого примера размеров файлов для относительно скромной текстуры 2048x2048—или размера текстуры 2K, если вы предпочитаете. Если вы хотите сохранить текстуру без какого-либо сжатия, это обычно означает 32—разрядное значение для каждого пикселя: RGBA (красное, зеленое, синее и Альфа-Альфа-техническое название прозрачности). Это около 4,2 миллиона пикселей и 4 байта на пиксель, и мы в конечном итоге получаем хороший круглый размер файла 16MiB. Теперь представьте себе все модели и текстуры в некоторых из более крупных игр с открытым миром. Если бы каждая поверхность использовала 2K несжатую текстуру, даже с 150GB текстур там все еще было бы только место для 9600 уникальных текстур.
Ладно, это на самом деле не кажется слишком потрепанным, но помните, что это для текстур 2K. Что делать, если игра хочет использовать текстуры 4K (разрешение 4096x4096)? Это бы вчетверо увеличило размеры файлов или сократило число уникальных текстур до одной четвертой от общего числа. 2400 текстур в 150 ГБ, или только 800 текстур в игре на 50 ГБ. Это не кажется почти достаточным для современной игры с большим количеством уникальных сред, и это не так.
Но позвольте мне вернуться к этому несжатому кусочку. Почему текстуры должны храниться несжатыми? Конечно, это может привести к несколько более высокому качеству изображения, но размеры файлов могут быть массивными (относительно говоря). Любой, кто знаком с цифровыми изображениями, вероятно, думает, что файлы JPEG или PNG будут лучше, и что касается размеров файлов, они будут правильными. Это похоже на размещение мусора в компакторе: высокое качество (но с потерями, что означает наличие артефактов сжатия) JPEG может сократить размеры файлов до примерно 2 МБ каждый, например, а более высокие скорости сжатия (и более низкое качество JPEG) могут достигать размеров файлов 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 для своих текстур. И конечно же, не все текстуры, используемые в игре, должны иметь одинаковое разрешение, поэтому небольшие объекты, которые могут занимать только несколько сотен пикселей экранного пространства, не должны храниться в виде массивной текст 2K и 4K текстур.
Есть еще одна вещь: MIP-карты. МИП, по-видимому, происходит от латинского словосочетания "multum in parvo", что означает "много вещей в небольшом месте."(Да, я тоже этого не знал, пока не написал эту статью-спасибо,Википедия !) MIP-карты существуют с начала 80-х годов и широко используются в графических приложениях. Краткое описание: не каждая текстура должна храниться в полном разрешении, все время, и путем предварительного расчета версий текстуры с более низким разрешением можно оптимизировать требования к памяти и пропускной способности.
Каждая текстура DXTC в конечном итоге сохраняет MIP—карты одной и той же текстуры на каждой половине интервалов разрешения, вплоть до практически ничего-пикселя 1x1. Если вы начинаете с текстуры 2K, вам нужно предварительно вычислить 11 дополнительных MIP-карт (также называемых mips): 1024x1024, 512x512, 256x256, 128x128, 64x64, 32x32, 16x16, 8x8, 4x4, 2x2 и 1x1.
Теперь мы можем, по крайней мере, получить разумное представление о том, сколько места потребуется игре, основываясь на количестве используемых ею текстур, а также на размере текстуры. Все начинается с количества уникальных текстур, и для простоты я собираюсь игнорировать тот факт, что не все текстуры имеют одинаковый размер. Для любой достаточно сложной игры с большим количеством различных сред, я думаю, можно с уверенностью сказать, что она будет использовать тысячи текстур. Давайте просто выбросим 10,000 как хорошее круглое число.
Если говорить о размерах файлов Unreal Engine, то для 1K текстур (в основном это текстуры "высокого качества") потребуется 13,3 ГБ текстур. Увеличьте разрешение до 2K текстур, и это подскочит до 53,3 ГБ. И если вы хотите самые последние и самые большие текстуры 4K, то вы смотрите на 223.7 GB. Ой. И это только для текстур—в большинстве игр также будет много аудиофайлов, особенно если они полностью озвучены (например, Call of Duty и Red Dead Redemption 2). Добавьте в файлы геометрии карты и некоторые видео, и любая современная игра, которая использует текстуры 4K, в конечном итоге будет довольно массивной.
Сколько различных текстур есть в этой сцене?
Очевидно, что нет единого ответа на то, как игра хранит свои текстуры, не говоря уже об аудио-и видеофайлах. Тем не менее, в целом, большая часть размера установки игры раздувается из последних игр, похоже, поступает из отдела текстурирования. Преимущество в том, что мы больше не получаем четко повторяющихся текстур в играх, и все выглядит гораздо более реалистично. Оглянитесь на такие игры, как оригинальный Half-Life или Deus Ex, и улучшение точности изображения является массовым. Я с нетерпением жду, чтобы смотреть на закат в Red Dead Redemption 2, восхищаясь графикой-150GB будь проклят!
Но текстуры с более высоким разрешением явно являются примером уменьшения отдачи, особенно при более низких разрешениях. Переключитесь с ультра на высокие текстуры (4K на 2K или от 2K до 1K), и часто трудно увидеть изменения, особенно на мониторе 1080p. Это потому, что текстуры обычно используются только на небольшой части экрана. Вблизи стена с текстурой 2K должна выглядеть лучше, чем та же стена с текстурой 1K, но резервное копирование и игровой движок, вероятно, заменят текстуру 2K на более низкое разрешение MIP-карты, и вы даже не заметите.
Это хорошая новость, потому что я, конечно, не с нетерпением жду каких-либо игр, пытающихся включить текстуры с разрешением 8K, которые снова увеличивают размер установки в четыре раза. Возможно, когда мы все будем использовать дисплеи 8K в какой-то момент в будущем это станет фактором, но, надеюсь, к тому времени у нас также будут доступные SSD с емкостью в десятки терабайт. Это или кто-то умный придумает лучший алгоритм сжатия текстур. Я могу только надеяться.