Буферы изображений на GPU: типы, природа и характеристики

Буферы изображений на GPU

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

A GPU / ГРАФИЧЕСКИЙ ПРОЦЕССОР генерирует огромное количество информации в секунду в виде множества изображений, которые быстро передаются на нашу сетчатку с телевизора, размер этих изображений и информация, которая сохраняется и обрабатывается, огромны. Буферы изображений из-за того, что они хранятся во VRAM, являются одной из причин, по которой требуется память с высокой пропускной способностью.

Что такое буфер изображений?

Búferes de Imagen

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

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

Búferes de Imagen

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

Что такое драйвер дисплея?

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

В таких системах, как NVIDIA G-синхронизация, AMD FreeSync / Adaptive Sync и т.п., контроллер дисплея не только отправляет данные на монитор или телевизор, но также контролирует, когда начинается и заканчивается каждый кадр.

Буферы изображений и традиционный 3D-рендеринг

Хотя наши экраны в 2D, уже более двадцати лет на них рендерится 3D-сцены в реальном времени. Для этого необходимо разделить задний буфер на два дифференцированных буфера:

  • Цветовой буфер: где указывается значение цветовых и альфа-компонентов каждого пикселя.
  • Буфер глубины: где указывается значение глубины каждого пикселя.

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

Буфер глубины

Буфер изображений Z-Buffer

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

  • После растрового этапа и до этапа текстурирования.
  • После этапа текстурирования.

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

Трассировка лучей Transparencias

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

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

Буферизация изображений и отложенный рендеринг

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

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

множественные луки

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

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

Буферы изображений как карта теней

Z-буфер Mapas Sombras

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

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

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