Кэш текстур в играх что это

Обновлено: 03.07.2024

На консолях ассеты более высокого качества можно будет скачать отдельно.

10 ноября Infinity Ward выпустила апдейт 1.29 для Call of Duty: Modern Warfare и Warzone, который призван уменьшить общий размер игры более чем на 25 ГБ, а также добавить улучшения для консолей нового поколения.

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

Проверка DTF показала, что на обычной PS4 пока нет опции скачать текстуры высокого разрешения, однако итоговый размер одной только Warzone после установки 33 гигабайтового обновления всё же стал меньше — на базовой PS4 без high-res асссетов королевская битва теперь весит 82 ГБ.

Директор по производству MW отметил, что текстур-паки можно скачать на всех консолях, но сами авторы рекомендуют их только для PS4 Pro, PS5, Xbox One X и Xbox Series X.

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

При желании стриминг текстур на ПК можно отключить — если у игрока выставлены высокие настройки, то у него по-прежнему будут отобржаться high-res ассеты.

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

Подробнее о текстур-паках на консолях и стриминге на ПК можно почитать в официальном F.A.Q. от разработчиков.

Call of Duty: Black Ops Cold War выйдет уже 13 ноября, а её объединение с Warzone и Modern Warfare начнётся 10 декабря.

5 ноября разработчики Call of Duty опубликовали материал в блоге, где подробно рассказали об общей…

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

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

Это через интернет что ли? Нахуя? Ради пары десятков гигов экономии?
А сжимать свои игры они не пробовали нормально?

Технология сжатия видимо доступна только разрабам Warframe, которые недавно снизили размер своей игры на 1/5

попредержи мой кофе
reduced Fortnite file size (over 60 GB smaller)

Please note the patch size will be larger than normal on PC (approx. 27 GB). This is to make optimizations on PC resulting in a massively reduced Fortnite file size (over 60 GB smaller), smaller downloads for future patches, and improved loading performance.

Там они просто модели и эффекты с онлайн концертов вырезали, которые лежали без дела

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

Даже 1/3, это был второй апдейт по снижению размеры игры. За два апдейта игра похудела на

15 гб, с 43 до 28

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

Все такие охуенно умные носятся со своими - "просто взять и сжать". Идите попробуйте запилить движок, чтобы тащил такую гору ассетов, работал при 60FPS, грузился быстро, масштабировался с карт 6х6 до батлрояля и все это на консольном железе 7-летней давности.
Да, в варфрейме научились в сжатие, ну так зато он в остальных аспектах зато сосет.

- ответил представитель Activision Blizzard в своём твиттере

Ближайший конкурент в лице уже почившей BFV при всем этом чет не весит 250 гигов.

Ну, CDPR смогли, что дальше? Ведьмак 50гб весит, а контента больше, чем в колде. Кбп обещают 75гб на релизе, контента опять же больше чем в колде. Просто активижен сказал делайте так, чтобы быстро получилось и пипл схавал, вот и получилось. Игра без сжатия и патчи по 50 гб. Консоли тут не причем, просто делать надо прямыми руками. Все что не видео/картинки вполне реально сжимается, просто по традициям серии код, они торопились выпустить ее поскорее, Котику кушать надо.

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

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

Очевидно речь именно о стриминге в реальном времени прямо во время игры.
Но написано максимально пространно.

Не, вроде как один раз закачается и сохранится на диске (вернутся назад эти 25Гб)

Кстати, какие оптимальные значения тут поставить? А то не выкупаю ничего(

ставь на максимум, чего ты не как ПК боярин

Пусть только ПК сгорит.

серваки IW сгорят

Калда (англ. "Call of Duty", рус. "Каловдутие") в SSD(англ. "Solid State Drive", рус. "АСМР Церни") - внесистемная единица измерения объема SSD новых приставок, равная количеству вмещаемых туда экземпляров игры Call of Duty: Modern Warfare. 1 Калда в SSD = количество экземпляров игры деленная на объем памяти приставки. Берется только целая часть. Применяется в интернетных срачах. На текущий момент: SeS - 1 калда в SSD, SeX - 4 калды в SSD, PS5 - 3 калды в SSD.
Примечание: подвергается дефляции с течением времени, но в последнее время владелец единицы измерения пытается сдержать дефляцию путем разделения эталона на более мелкие части и выборочного скачивания текстур высокого разрешения.

Только что проверил, даже пробовать не буду.

Это фулл с сетевой игрой? о_О

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

Пиздец. Овердохера что-то.

Вообще то можно скачать варзон отдельно и выбрать нужные тебе режимы, варзон вместе с сетевой у меня 166 весила

Все, разобрался. 260 гиг - это сетевая, кампания, варзон, спецоперации и выживание вместе
варзон + сетевая весят 143 вместе

варзон просто вроде сейчас вообще 110 гигов весит "только"

Warzone + сетевая после обновления

И усе, на Xbox SeS место закончилось

Чё уж не терабайт то

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

Эх, вот бы кто Bungie научил игры оптимизировать.

Они пошли самым простым путем, потому что их кредо после ухода от Activision это "Делай как можно меньше работы - руби как можно больше бабла"

У нас из последних только фотрнайт нормально уменьшили.

Здравствуй UE3 и текстуры уровня Rage эх вот ето время было ушла епоха

Проверка DTF показала, что на обычной PS4 пока нет опции скачать текстуры высокого разрешения

Ух ты блять, у ДТФ прям отдел проверки есть, не знал.
А консольщики опять соснули :)

Почему консольщики соснули?

уменьшить общий размер игры более чем на 25 ГБ

после установки 33 гигабайтового обновления

патч с разжиженным вакуумом ред.

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

Говорили же, за стримингом будущее. Гугл просто не так прочитали эту фразу

если игра установлена на ссд - изнашиваться ресурс будет еще быстрее

А кто-то нашел это меню в настройках на PS4 Pro? Я сперва отказался, так как они написали, что можно будет в настройках включить, но в настройках ничего такого не нашел

Это была разовая акция, очевидно же.

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

На моем аккаунте она официально продается в псн

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

Значит нужно искать в этой самой менюшке. Называется «установочные данные»

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

Ты зайди в «Общее», там внизу

Там тоже ничего нет

Чел, ты или в глазки долбишься или разводишь. Всё там есть

на русском аккаунте у меня тоже нет, но на украинском или любом другом, эта опция есть

Это украинский аккаунт

Ну тогда, мои полномочия всё.

Нашёл? Тоже у меня нет(

стриминг текстур - это типа бандлы? он же их всё равно кэшировать будет, верно?

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


На картинке выше видно, что шейдерных ядер много.

texture units may be grouped together with one texture unit per shader core, or one texture unit shared among two or three shader cores, depending on the GPU.

The whole chip shares a single L2 cache, but the different units will have individual L1 caches.

каждый shader core Один texture unit , Или через два или три shader core Поделитесь одним между texture unit

Весь чип использует кэш L2, и каждый блок использует свой собственный L1cache.

Texture units operate independently and asynchronously from shader cores. When a shader performs a texture read, it sends a request to the texture unit across a little bus between them; the shader can then continue executing if possible, or it may get suspended and allow other shader threads to run while it waits for the texture read to finish.

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

The texture unit batches up a bunch of requests and performs the addressing math on them—selecting mip levels and anisotropy, converting UVs to texel coordinates, applying clamp/wrap modes, etc. Once it knows which texels it needs, it reads them through the cache hierarchy, the same way that memory reads work on a CPU (look in L1 first, if not there then L2, then DRAM). If many pending texture requests all want the same or nearby texels (as they often do), then you get a lot of efficiency here, as you can satisfy many pending requests with only a few memory transactions. All these operations are pipelined, so while the texture unit is waiting for memory on one batch it can be doing the addressing math for another batch of requests, and so on.

Текстурные блоки обрабатывают запросы пакетно, выполняют адресацию (выберите уровень mip и разные полы, Преобразуйте uv в координаты текселя, примените clamp/wrap Узор и др. ), вы можете узнать, где нужен тексель, а затем прочитать его в иерархии кеша (если кэш L1 не попал, он перейдет в кэш L2 через Crossbar, если не найден, он перейдет в DRAM)

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

Once the data comes back, the texture unit will decode compressed formats, do sRGB conversion and filtering as necessary, then return the results back to the shader core.

Как только данные будут возвращены, текстурный блок декодирует сжатый формат, выполнит преобразование и фильтрацию sRGB, а затем вернет результат в shader core 。

When a cache miss occurs and a new cache line must be read in from off-chip memory, a large latency is incurred.

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

computing the values that go into a texture map using the GPU has become common place and is called“render to texture”.all on-chip memory references to that texture must be invalidated and then the GPU can write to the texture. A simpler brute force method which flushes all caches in the GPU, can also be used.

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


the pixel grid is divided into groups of 2 × 2 pixels, called quads.

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

Традиционная растеризация имеет две проблемы:

The order of texels accessed in a texture map can have any orientation with respect to the rasterization order. If the texels in a texture map are stored in memory in a simple linear row major ordering, and the texture is mapped horizontally,then cache lines will store long horizontal lines resulting in a high hit rate. But if the texture is mapped at a 90 degrees rotation, then every pixel will miss and require a new cacheline to be loaded.

Although I suspect most textures these days will be stored in either a tiled or Morton-like (aka Twiddled/Swizzled) order (or even a combination of both), some textures might still be in scan-line order, which means that rotation of the texture is likely to lead to a significant number of cache misses/page breaks. Unfortunately, I don't really know how to spot if a particular format is arranged in such a way.

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

For very large triangles a texture cache could fill up as pixels are generated across a horizontal span and on returning to the next line find that the texels from the previous line have been evicted from the cache.

2. Если треугольник слишком большой и одна линия рисуется горизонтально, кэш текстур будет заполнен, а когда будет нарисована следующая линия, предыдущая линия будет удалена из кэша.

Tiled Rasterization Решит две вышеуказанные проблемы.

To avoid this orientation dependency textures are stored in memory in a tiled higher cache hit rates are achieved when the tile size is equal to cache line size for cache sizes of 128KB and 256KB and tile sizes of 8×8 and 16×16.

Tiled rasterization divides the screen into equally sized rectangles, typically powers of two , and completes the rasterization within each tile before moving to the next tile.

Разделите экран на сетки и растрируйте каждую сетку

The texture unit requires 4 texels in parallel in order to perform one bilinear operation, so most texture caches are designed to feed these values in parallel in order to maintain full rate for bilinear filtering.

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

Most GPUs have multiple texture filtering units running in parallel, and the texture cache must supply these with texels. To do this the texture cache uses multiple read ports, or else replicates the data in the cache.


Сжатие текстуры может уменьшить пропускную способность текстуры. Декомпрессия происходит между чтением сжатой текстуры и подготовкой текстурного фильтра.

texture accesses that hit in the cache must wait in the FIFO behind others that miss. A FIFO is used because the graphics pipeline ensures that triangle submission order is maintained

Из-за потока данных очереди «первым пришел - первым вышел», даже если кэш попадает во вторую, он должен ждать первой части, не попавшей в очередь.

Об оптимизации кэша текстур

The easiest way to break the texture cache is to do lots of dependent texture reads and what I mean by dependent texture reads is to generate a texture coordinate in the fragment shader and then go fetch it instead of the interpolated texture coordinate.

This is going to start fetching texels from areas that are very different in your actual texture map, which is going to cause the cache to be thrashed often.

1. Считайте текстуру вместо uv, которая интерполируется вершинным шейдером.

Уничтожит кеш текс и вызовет частую очистку кеша, потому что в основном он не попадает, но Вызвать частое обновление кеша.

2. Текстура не может быть слишком большой.

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

3. Формат текстуры должен быть как можно меньше.

По той же причине, что и выше

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

5. Используйте MIP-карту.

Remember our example of a tiled 256x256 texture, where each repeat is being scaled down to 1x1 (a common situation in things like terrain rendering). Without mipmaps, every destination pixel will sample a radically different location in the source texture, so the GPU must jump around fetching colors from different areas of memory. GPUs typically have very small texture caches, relying on the fact that textures tend to be accessed sequentially, so this access pattern will thrash the cache and can bring even a high end card to its knees. But with mipmaps, the GPU can simply load a small mip level which will easily fit in the cache, and can then render many destination pixels without having to go back to main memory.

6. Сожмите карту.

Может сэкономить пропускную способность

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


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

Анизотропная фильтрация
Когда любая текстура отображается на мониторе не в своем исходном размере, в нее необходимо вставлять дополнительные пикселы или, наоборот, убирать лишние. Для этого применяется техника, называемая фильтрацией.

Билинейная фильтрация является самым простым алгоритмом и требует меньше вычислительной мощности, однако и дает наихудший результат. Трилинейная добавляет четкости, но по-прежнему генерирует артефакты. Наиболее продвинутым способом, устраняющим заметные искажения на объектах, сильно наклоненных относительно камеры, считается анизотропная фильтрация. В отличие от двух предыдущих методов она успешно борется с эффектом ступенчатости (когда одни части текстуры размываются сильнее других, и граница между ними становится явно заметной). При использовании билинейной или трилинейной фильтрации с увеличением расстояния текстура становится все более размытой, анизотропная же этого недостатка лишена.

Учитывая объем обрабатываемых данных (а в сцене может быть множество 32-битовых текстур высокого разрешения), анизотропная фильтрация особенно требовательна к пропускной способности памяти. Уменьшить трафик можно в первую очередь за счет компрессии текстур, которая сейчас применяется повсеместно. Ранее, когда она практиковалась не так часто, а пропуская способность видеопамяти была гораздо ниже, анизотропная фильтрация ощутимо снижала количество кадров. На современных же видеокартах она почти не влияет на fps.

Анизотропная фильтрация имеет лишь одну настройку коэффициент фильтрации (2x, 4x, 8x, 16x). Чем он выше, тем четче и естественнее выглядят текстуры. Обычно при высоком значении небольшие артефакты заметны лишь на самых удаленных пикселах наклоненных текстур. Значений 4x и 8x, как правило, вполне достаточно для избавления от львиной доли визуальных искажений. Интересно, что при переходе от 8x к 16x снижение производительности будет довольно слабым даже в теории, поскольку дополнительная обработка понадобится лишь для малого числа ранее не фильтрованных пикселов.

Шейдеры
Шейдеры это небольшие программы, которые могут производить определенные манипуляции с 3D-сценой, например, изменять освещенность, накладывать текстуру, добавлять постобработку и другие эффекты.

Шейдеры делятся на три типа: вершинные (Vertex Shader) оперируют координатами, геометрические (Geometry Shader) могут обрабатывать не только отдельные вершины, но и целые геометрические фигуры, состоящие максимум из 6 вершин, пиксельные (Pixel Shader) работают с отдельными пикселами и их параметрами.

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

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

Parallax mapping
Parallax mapping это модифицированная версия известной техники bumpmapping, используемой для придания текстурам рельефности. Parallax mapping не создает 3D-объектов в обычном понимании этого слова. Например, пол или стена в игровой сцене будут выглядеть шероховатыми, оставаясь на самом деле абсолютно плоскими. Эффект рельефности здесь достигается лишь за счет манипуляций с текстурами.

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

Parallax mapping существенно экономит вычислительные ресурсы компьютера, поскольку при использовании объектов-аналогов со столь же детальной 3D-структурой производительности видеоадаптеров не хватало бы для просчета сцен в режиме реального времени.

Эффект чаще всего применяется для каменных мостовых, стен, кирпичей и плитки.

Anti-Aliasing
До появления DirectX 8 сглаживание в играх осуществлялось методом SuperSampling Anti-Aliasing (SSAA), известным также как Full-Scene Anti-Aliasing (FSAA). Его применение приводило к значительному снижению быстродействия, поэтому с выходом DX8 от него тут же отказались и заменили на Multisample Аnti-Аliasing (MSAA). Несмотря на то что данный способ давал худшие результаты, он был гораздо производительнее своего предшественника. С тех пор появились и более продвинутые алгоритмы, например CSAA.

Учитывая, что за последние несколько лет быстродействие видеокарт заметно увеличилось, как AMD, так и NVIDIA вновь вернули в свои ускорители поддержку технологии SSAA. Тем не менее использовать ее даже сейчас в современных играх не получится, поскольку количество кадров/с будет очень низким. SSAA окажется эффективной лишь в проектах предыдущих лет, либо в нынешних, но со скромными настройками других графических параметров. AMD реализовала поддержку SSAA только для DX9-игр, а вот в NVIDIA SSAA функционирует также в режимах DX10 и DX11.

Принцип работы сглаживания очень прост. До вывода кадра на экран определенная информация рассчитывается не в родном разрешении, а увеличенном и кратном двум. Затем результат уменьшают до требуемых размеров, и тогда «лесенка» по краям объекта становится не такой заметной. Чем выше исходное изображение и коэффициент сглаживания (2x, 4x, 8x, 16x, 32x), тем меньше ступенек будет на моделях. MSAA в отличие от FSAA сглаживает лишь края объектов, что значительно экономит ресурсы видеокарты, однако такая техника может оставлять артефакты внутри полигонов.

Раньше Anti-Aliasing всегда существенно снижал fps в играх, однако теперь влияет на количество кадров незначительно, а иногда и вовсе никак не cказывается.

Тесселяция
С помощью тесселяции в компьютерной модели повышается количество полигонов в произвольное число раз. Для этого каждый полигон разбивается на несколько новых, которые располагаются приблизительно так же, как и исходная поверхность. Такой способ позволяет легко увеличивать детализацию простых 3D-объектов. При этом, однако, нагрузка на компьютер тоже возрастет, и в ряде случаев даже не исключены небольшие артефакты.

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

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

Чтобы игра могла использовать тесселяцию, ей требуется видеокарта с поддержкой DirectX 11.

Вертикальная синхронизация

V-Sync это синхронизация кадров игры с частотой вертикальной развертки монитора. Ее суть заключается в том, что полностью просчитанный игровой кадр выводится на экран в момент обновления на нем картинки. Важно, что очередной кадр (если он уже готов) также появится не позже и не раньше, чем закончится вывод предыдущего и начнется следующего.

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

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

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

Post-processing
Это общее название всех эффектов, которые накладываются на уже готовый кадр полностью просчитанной 3D-сцены (иными словами, на двухмерное изображение) для улучшения качества финальной картинки. Постпроцессинг использует пиксельные шейдеры, и к нему прибегают в тех случаях, когда для дополнительных эффектов требуется полная информация обо всей сцене. Изолированно к отдельным 3D-объектам такие приемы не могут быть применены без появления в кадре артефактов.

High dynamic range (HDR)
Эффект, часто используемый в игровых сценах с контрастным освещением. Если одна область экрана является очень яркой, а другая, наоборот, затемненной, многие детали в каждой из них теряются, и они выглядят монотонными. HDR добавляет больше градаций в кадр и позволяет детализировать сцену. Для его применения обычно приходится работать с более широким диапазоном оттенков, чем может обеспечить стандартная 24-битовая точность. Предварительные просчеты происходят в повышенной точности (64 или 96 бит), и лишь на финальной стадии изображение подгоняется под 24 бита.

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

Bloom
Bloom нередко применяется совместно с HDR, а еще у него есть довольно близкий родственник Glow, именно поэтому эти три техники часто путают.

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

Film Grain
Зернистость артефакт, возникающий в аналоговом ТВ при плохом сигнале, на старых магнитных видеокассетах или фотографиях (в частности, цифровых изображениях, сделанных при недостаточном освещении). Игроки часто отключают данный эффект, поскольку он в определенной мере портит картинку, а не улучшает ее. Чтобы понять это, можно запустить Mass Effect в каждом из режимов. В некоторых «ужастиках», например Silent Hill, шум на экране, наоборот, добавляет атмосферности.

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

Эффект также поможет при необходимости завуалировать низкую частоту смены кадров и добавить плавности в игровой процесс.

SSAO
Ambient occlusion техника, применяемая для придания сцене фотореалистичности за счет создания более правдоподобного освещения находящихся в ней объектов, при котором учитывается наличие поблизости других предметов со своими характеристиками поглощения и отражения света.

Screen Space Ambient Occlusion является модифицированной версией Ambient Occlusion и тоже имитирует непрямое освещение и затенение. Появление SSAO было обусловлено тем, что при современном уровне быстродействия GPU Ambient Occlusion не мог использоваться для просчета сцен в режиме реального времени. За повышенную производительность в SSAO приходится расплачиваться более низким качеством, однако даже его хватает для улучшения реалистичности картинки.

SSAO работает по упрощенной схеме, но у него есть множество преимуществ: метод не зависит от сложности сцены, не использует оперативную память, может функционировать в динамичных сценах, не требует предварительной обработки кадра и нагружает только графический адаптер, не потребляя ресурсов CPU.

Cel shading
Игры с эффектом Cel shading начали делать с 2000 г., причем в первую очередь они появились на консолях. На ПК по-настоящему популярной данная техника стала лишь через пару лет. С помощью Cel shading каждый кадр практически превращается в рисунок, сделанный от руки, или фрагмент из мультика.

В похожем стиле создают комиксы, поэтому прием часто используют именно в играх, имеющих к ним отношение. Из последних известных релизов можно назвать шутер Borderlands, где Cel shading заметен невооруженным глазом.

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

Depth of field
Глубина резкости это расстояние между ближней и дальней границей пространства, в пределах которого все объекты будут в фокусе, в то время как остальная сцена окажется размытой.

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

Лицезреть эффект глубины резкости в гипертрофированной форме можно на некоторых фотографиях. Именно такую степень размытия часто и пытаются симулировать в 3D-сценах.

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

Влияние на производительность

Чтобы выяснить, как включение тех или иных опций сказывается на производительности, мы воспользовались игровым бенчмарком Heaven DX11 Benchmark 2.5. Все тесты проводились на системе Intel Core2 Duo e6300, GeForce GTX460 в разрешении 1280Ч800 точек (за исключением вертикальной синхронизации, где разрешение составляло 1680Ч1050).

Как уже упоминалось, анизотропная фильтрация практически не влияет на количество кадров. Разница между отключенной анизотропией и 16x составляет всего лишь 2 кадра, поэтому рекомендуем ее всегда ставить на максимум.

Сглаживание в Heaven Benchmark снизило fps существеннее, чем мы того ожидали, особенно в самом тяжелом режиме 8x. Тем не менее, поскольку для ощутимого улучшения картинки достаточно и 2x, советуем выбирать именно такой вариант, если на более высоких играть некомфортно.

Тесселяция в отличие от предыдущих параметров может принимать произвольное значение в каждой отдельной игре. В Heaven Benchmark картинка без нее существенно ухудшается, а на максимальном уровне, наоборот, становится немного нереалистичной. Поэтому следует устанавливать промежуточные значения moderate или normal.

Для вертикальной синхронизации было выбрано более высокое разрешение, чтобы fps не ограничивался вертикальной частотой развертки экрана. Как и предполагалось, количество кадров на протяжении почти всего теста при включенной синхронизации держалось четко на отметке 20 или 30 кадров/с. Это связано с тем, что они выводятся одновременно с обновлением экрана, и при частоте развертки 60 Гц это удается сделать не с каждым импульсом, а лишь с каждым вторым (60/2 = 30 кадров/с) или третьим (60/3 = 20 кадров/с). При отключении V-Sync число кадров увеличилось, однако на экране появились характерные артефакты. Тройная буферизация не оказала никакого положительного эффекта на плавность сцены. Возможно, это связано с тем, что в настройках драйвера видеокарты нет опции принудительного отключения буферизации, а обычное деактивирование игнорируется бенчмарком, и он все равно использует эту функцию.

Если бы Heaven Benchmark был игрой, то на максимальных настройках (1280Ч800; AA 8x; AF 16x; Tessellation Extreme) в нее было бы некомфортно играть, поскольку 24 кадров для этого явно недостаточно. С минимальной потерей качества (1280Ч800; AA 2x; AF 16x, Tessellation Normal) можно добиться более приемлемого показателя в 45 кадров/с.

В связи с многократными вопросами и спорами, связанными с FPS в тестах для видеокарт, представленными на нашем сайте, мы решили более детально остановиться на этом вопросе и рассказать вам про настройки игр.

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

Разрешение экрана

Пожалуй, этот параметр является одним из главных, влияющих как на качество картинки, так и на производительность игры. Данный параметр зависит исключительно от матрицы ноутбука, и поддержки данного разрешения игрой (от 640х480 до 1920х1080). Тут все просто и пропорционально, чем больше разрешение, тем четче картинка и больше нагрузка на систему, и, соответственно, наоборот.

The Witcher 2: Assassins of Kings. Разрешение экрана: 640x480, 1024x768, 1366x768

Качество графики

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

The Witcher 2: Assassins of Kings. Качество графики: Низкое, Среднее, Высокое, Ультра
Далее мы рассмотрим более детально настройки в играх по отдельности.

Качество текстур

Данная настройка отвечает за разрешение текстур в игре. Чем выше разрешение текстур, тем более четкую и детализированную картинку вы видите, соответственно и нагрузка на GPU будет больше.

The Witcher 2: Assassins of Kings. Качество текстур: Низкое, Среднее, Высокое

Качество теней

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

Battlefield 3. Качество теней: Низкое, Среднее, Высокое, Ультра

Качество эффектов

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

Battlefield 3. Качество эффектов: Низкое, Среднее, Высокое, Ультра

Качество окружающей среды

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

Battlefield 3. Качество окружающей среды: Низкое, Среднее, Высокое, Ультра

Покрытие ландшафта

В некоторых играх указывается как «Плотность травы» либо носит другие подобные названия. Отвечает за количество травы, кустов, веток, камней и прочего мусора находящегося на земле. Соответственно чем выше параметр, тем более насыщенной разными объектами выглядит земля.

Аллоды Онлайн. Покрытие ландшафта: Низкое, Среднее, Высокое, Ультра

Анизотропная фильтрация

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

Самой лучшей фильтрацией является анизотропная, которая заметно устраняет искажения на текстурах сильно наклоненных относительно камеры. Для современных видеокарт, данный параметр практически не влияет на производительность, но существенно улучшает четкость и естественный вид текстуры.

Аллоды Онлайн. Анизотропная фильтрация: Выкл., х2, х4, х8, х16

Сглаживание

Принцип работы сглаживания таков: до вывода картинки на экран она рассчитывается не в родном разрешение, а в двукратном увеличении. Во время вывода картинка уменьшается до нужных размеров, причем неровности по краям объекта становятся менее заметными. Чем больше исходное изображение и коэффициент сглаживания (x2, x4, x8, x16), тем меньше неровностей будет заметно на объектах. Собственно само сглаживание нужно для того чтобы максимально избавится от «лестничного эффекта» (зубцов по краям текстуры).

Существуют разные виды сглаживания, чаще всего в играх встречаются FSAA и MSAA. Полноэкранное сглаживание (FSAA) используется для устранения «зубцов» на полноэкранных изображениях. Минус данного сглаживания заключается в обработке всей картинки целиком, что конечно значительно улучшает качество изображения, но требует большой вычислительной мощности графического процессора.

Multisample anti-aliasing (MSAA), в отличие от FSAA, сглаживает только края объектов, что приводит к небольшому ухудшению графики, но при этом экономит огромную часть вычислительной мощи. Так что если вы не обладаете топовой игровой видеокартой, лучше всего использовать MSAA.

The Witcher 2: Assassins of Kings. Сглаживание: Выкл., Вкл.

SSAO (Screen Space Ambient Occlusion)

В переводе на русский означает «преграждение окружающего света в экранном пространстве». Является имитацией глобального освещения. Увеличивает реалистичность картинки, создавая более «живое» освещение. Дает нагрузку только на GPU. Данная опция значительно уменьшает количество FPS на слабых графических адаптерах.

The Witcher 2: Assassins of Kings. SSAO (Screen Space Ambient Occlusion): Выкл., Вкл.

Размытие в движение

Также известно как Motion Blur. Это эффект, смазывающий изображение при быстром передвижении камеры. Придает сцене больше динамики и скорости (часто используется в гонках). Увеличивает нагрузку на GPU, тем самым уменьшает количество FPS.

The Witcher 2: Assassins of Kings. Размытие в движение: Выкл., Вкл.

Глубина резкости (Depth of field)

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

The Witcher 2: Assassins of Kings. Глубина резкости: Выкл., Вкл.

Вертикальная синхронизация (V-Sync)

Синхронизирует частоту кадров в игре с частотой вертикальной развертки монитора. При включенной V-Sync, максимальное количество FPS равно частоте обновления монитора. Если же количество кадров в игре у вас ниже, чем частота развертки монитора, стоит включить тройную буферизацию, при которой кадры подготавливаются заранее, и хранятся в трех раздельных буферах. Преимущество вертикальной синхронизации состоит в том, что она позволяет избавиться от нежелательных рывков, при резких скачках FPS.

Не обошлось и без недостатков, например в новых требовательных играх возможно сильное падение производительности. Также в динамических шутерах или онлайн играх, V-Sync может только навредить.

Заключение

Выше изложены основные, но далеко не все настройки в играх. Стоит напомнить, что каждая игра имеет свой уровень оптимизации, и свой ряд настроек. В некоторых случаях игры с лучшей графикой будут идти на вашем ноутбуке быстрее, чем неоптимизированные игры с более низкими требованиями. Большинство игр позволяет использовать как уже готовые настройки, так и задавать вручную каждый отдельно взятый параметр. Часть из рассмотренных выше эффектов поддерживается только в новых DirectX 11 играх, а в более старых с поддержкой DirectX 9 их просто нет.

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

Пробовал с DirectX9 рендером, игра заметно подвисает даже при загрузке одной текстуры ARGB 2048x2048 (

1.5mb с PNG компрессией), как это можно заметно ускорить и правильно ли я это делаю вовсе?
Делал так:
1) Загружаю через libpng изображение (тут профайлер показал, что много времени уходит) [этот момент я скорее всего заменю быстрым компрессом c помощью zlib]
2) Создаю текстуру в системной памяти
3) Заливаю изображение в текстуру, располагающейся в системной памяти
4) Создаю и обновляю посредством UpdateTexture() текстуру на GPU

В инетах трудно было найти что-то дельное по теме, в основном только очень древние статьи.
Благодарю!

SoulSharer
> 1) Загружаю через libpng изображение (тут профайлер показал, что много времени уходит)
Зачем тебе png ? DXT Сжатие не решит проблему?

Andrey
Сжатие хотелось бы обойти, оно ухудшает качество (хоть и немного).
И тут проблема не в сжатии, даже если умещу больше текстур со сжатием, то всеравно я физически не могу предсказать использование многих других текстур.

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

SoulSharer
Может тебе стриминг кусков сцены подойдет?

Andrey
> Может тебе стриминг кусков сцены подойдет?
Насколько я понял, стриминг загружает сначала низкокачественные версии текстур (через мипмапы или еще как), если да - то наврядли такой вариант пойдет. :( (очень будет заметно)
Да и анимация содержится в атласах/полотенцах из кадров, поэтому не уверен, что это будет стримиться хорошо.

Вам серьёзное решение или так? Просто если нужна мегатекстура (а по факту то что вы описали это она и есть), то могу поделится некоторым опытом. Но только через скайп, просто писать простыни текста нету никакого желания (я тут одному парню уже объяснял её, так на 12 страниц вроде написал)

Bishop
> Вам серьёзное решение или так? Просто если нужна мегатекстура (а по факту то
> что вы описали это она и есть), то могу поделится некоторым опытом. Но только
> через скайп, просто писать простыни текста нету никакого желания (я тут одному
> парню уже объяснял её, так на 12 страниц вроде написал)

Читал немного про мегатекстуру, но оно как-то заумно там и наврядли нужно обычной 2D Adventure игре? Всетаки такой подход больше для ААА класса игр, требующих тонны перформенса.
Может я ошибаюсь?

SoulSharer
> Читал немного про мегатекстуру, но оно как-то заумно там и наврядли нужно
> обычной 2D Adventure игре? Всетаки такой подход больше для ААА класса игр,
> требующих тонны перформенса.
> Может я ошибаюсь?
Это довольно сложная технология, но если у вас тормозит - значит видимо она нужна. Ну просто одно то, что вы ждёте в PNG стримящиеся данные уже как-бы плохо, т.к. медленно. Да и заливать на GPU кусками по 16МБ, может быть тоже не лучшее решение (по крайней мере при ваших метриках производительности).

SoulSharer
> 1) Загружаю через libpng изображение (тут профайлер показал, что много времени
> уходит) [
грузи в другом потоке

SoulSharer
> 3) Заливаю изображение в текстуру, располагающейся в системной памяти
заливай по кускам-квадратам за несколько кадров а не сразу всю

SoulSharer
> 2) Создаю текстуру в системной памяти
в идеале аллоцируй сразу макс число текстур всех нужных размеров на старте игры

Mr F
> грузи в другом потоке
трудно представить, как это поможет. Ведь рендер будет всеравно ждать тоже самое время (пока текстура не загрузится), только теперь с добавленной стоимостью потоков.

Mr F
> заливай по кускам-квадратам за несколько кадров а не сразу всю
Речь о Dirty regions? сомнительная идея

Mr F
> в идеале аллоцируй сразу макс число текстур всех нужных размеров на старте игры
В системной памяти то? Да, наверное имеет смысл взять и все стандартные размеры подготовить от 512х512 до 2048х2048, и через них уже производить обновления текстур на GPU.

SoulSharer
> Ведь рендер будет всеравно ждать тоже самое время (
ясен пень - нет.
ты должен запускать поток за некоторое время ДО того когда он понадобится.
говоришь - 2D адвенчура. значит есть направление движения персонажа хотя бы - значит можно начинать загружать то, что находится за экраном, но куда движется персонаж.
UpdateTexture вызываешь, когда загружающий поток закончил работу.

SoulSharer
> сомнительная идея
обоснуй.
я делал - у меня работало. быстрее, чем всю текстуру.

SoulSharer
> В системной памяти то?
во всех, тебе же для UpdateTexture нужны пары системная-видео.

Проблема не в подгрузке уровня/сцены. А в непредсказуемости требуемых анимаций.

SoulSharer
> Другими словами есть много анимаций у персонажа (2D адвенчура), которые должны
> проигрываться в любое время по запросу скрипта.

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

SoulSharer
Чтобы я поковырял:
1. НЕ создавать тексы каждый кадр.
2. Делать preload, правильно сказали. Если есть возможность, показывать мир на 1-2 кадра позже, пока там что-то грузится, разжимается.
3. Если есть много мелких/средних тестур, запихать их в один большой файл. Seek-ом бегать по ним.
4. Подумать про компрессию. Если не DXT, то хоть визуально посмотреть на свой арт. Может где-то RLE, может в палитру можно запихать,
может переходы между соседними пикселями 2-4 бита и т.д.

> Поэтому было принято решение реализовать кэш, который будет грузить с HDD передавая текстуру в GPU.
SoulSharer, какой-то странный кэш.

1.5mb с PNG компрессией
SoulSharer, не надо грузить PNG. Во-первых, это просто плохо, во-вторых, в видео-памяти пнг жрёт в разы больше места, чем сжатые DDS-текстуры.

> Проблема не в подгрузке уровня/сцены. А в непредсказуемости требуемых анимаций.
SoulSharer, грузи их все заранее, в чём проблема-то? DDS позволяет сжать текстуры в 4-8 раз. Т.е. даже в 512 Мб видео-памяти влезет порядка 500 текстур 1024*1024.

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

Читайте также: