Главная Зерно Пингвин Колибри Сириус Ромашка


Разное

Принципы работы видеокарт

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

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

История развития

Первая видеокарта для компьютеров архитектуры IBM PC была представлена миру в 1981 году и получила название MDA (Monochrome Display Adapter). Это чудо инженерной мысли вообще не поддерживало графический режим и работало только с текстовыми данными. Видеоадаптер выводил на дисплей до 25 строк, каждая из которых вмещала 80 символов. При этом тексту можно было назначить один из пяти атрибутов: обычный, подчеркнутый, яркий, мигающий или инверсный. Задавать шрифт было нельзя, цвет букв также не поддавался изменению — эти параметры зависели исключительно от модели монитора.

Монохромная палитра, текстовый режим... примитив? Только не для 1981 года.

Следующим этапом в развитии графических плат стало появление IBM CGA (Color Graphics Adapter). Видеоадаптер поддерживал четыре палитры по четыре цвета. Кроме того, он умел работать в графическом режиме, то есть на монитор отныне выводился не только текст, но и пиксельные картинки. При работе с графикой максимальное поддерживаемое разрешение составляло 320х200 точек, а для монохромной палитры это значение возрастало до 640х200. В графическом режиме использовалось не более 4 цветов одновременно. Следом за CGA последовала его усовершенствованная версия — EGA (Enhanced Graphics Adapter). Этот адаптер поддерживал 64-цветную палитру и мог обеспечить одновременно 16 цветов при разрешении 640x350.

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

На смену EGA пришел адаптер VGA (Video Graphics Array), обеспечивающий 16 цветов при разрешении 640х480 или 256 цветов в режиме 320х200. Ну, а в 1987 году настала эпоха SVGA. Примечательно, что термином SVGA обозначались все режимы, превышающие VGA. У производителей попросту не было четкого стандарта, которому бы соответствовала их продукция. Путаница была устранена только через три года, когда организация VESA (Video Enhanced Standards Association) ввела документ, описывающий режимы SVGA. Он несколько раз дополнялся, а в конечной его версии, датированной 1995 годом, описаны основные режимы работы, вплоть до разрешения 1600х1200 пикселей и цветопередачи True Color (16,7 млн цветов).

3dfx Voodoo 2 — 3D-ускоритель, ставший в свое время настоящей иконой для ценителей трехмерных игр.

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

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

На рубеже 1994-95 годов разработчики стали активно задумываться о том, как ускорить игровые 3D-движки. В результате на сцену вышли так называемые 3D-ускорители. Эти устройства могли работать только в тандеме с видеоадаптером, уже установленным в ПК. При запуске трехмерных приложений 3D-ускорители обрабатывали объемные моделей, преобразуя их в двумерный вид. Результаты отправлялись видеокарте, которая при необходимости дополняла кадр различными объектами (например, интерфейсом) и передавала его на монитор. Со временем видеоадаптеры и 3D-ускорители слились воедино, и вот тогда-то видеокарты наконец обрели свой нынешний вид.

Словарь терминов

Пиксель (Pixel) — самый маленький графический элемент, точка.

Полигон (Polygone) — пространственный многоугольник, грань. В компьютерной графике чаще всего используется его простейший вариант — треугольник.

Текстура (Texture) — плоское изображение, предназначенное для нанесения на грань.

Тексель (Texel) — мельчайший графический элемент (точка) текстуры.

Фильтрация текстур (Texture Filtering) — метод уменьшения искажений при наложении текстур. Различают билинейную, трилинейную и анизотропную фильтрацию.

Буфер кадра (Frame Buffer) — область видеокарты, специально отведенная под временное хранение данных о пикселях, требуемых для отображения одного кадра (полного изображения) на экране монитора.

В трех измерениях

Итак, по какому принципу работает видеокарта при построении кадра трехмерного приложения? В большинстве случаев любой трехмерный объект в компьютерном моделировании представляет собой совокупность множества треугольников — граней, или «полигонов». Виртуальные деревья, автомобили, зомби и автоматы Калашникова — все это лишь грамотно связанные друг с другом грани с натянутыми на них текстурами. Таким образом, при построении изображения центральный процессор загружает в память видеокарты координаты вершин отображаемого объекта, а также текстуры, которыми нужно будет покрыть каркас получившейся трехмерной модели. Далее в дело вступает непосредственно видеоадаптер.

Трехмерная модель — всего лишь множество соединенных друг с другом граней, закрашенных однородным цветом.

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

Первым делом вершины попадают в вершинный процессор, который занимается их трансформацией и освещением (Transforming & Lighting). В данном случае трансформация — это преобразование координат вершин (вращение, перенос и масштабирование объектов), а освещение — это определение цвета каждой вершины с учетом всех источников света конкретной сцены. Затем следует проецирование — преобразование координат искомого 3D мира в двумерную систему координат экрана. С появлением аппаратной поддержки T&L увеличилась скорость отображения игровой графики, а также возросло ее качество.

Следом наступает стадия растеризации — серии операций, которые проводятся непосредственно с пикселями изображения. Этапы: удаление скрытых поверхностей, к примеру, обратных сторон объектов; Z-буферизация (запись значений глубины) — для каждой точки изображения определяется, насколько далеко она отстоит от плоскости экрана; и, разумеется, текстурирование (закраска).

Процесс закраски происходит следующим образом: видеокарта выбирает для каждого пикселя определенные тексели из текстуры. После усреднения цветов нескольких текселей на выходе получается итоговый цвет пикселя, который записывается в буфер кадра (видеопамять). Именно на этой ступени происходит фильтрация текстур, а также проводятся операции сглаживания. Напомним, что процессы текстурирования, фильтрации и сглаживания были подробно разобраны нами в статье «Ближе к идеалу» из мартовского номера «Лучших компьютерных игр» за 2008 год.

Полигональная модель до и после нанесения текстур.

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

Графические интерфейсы

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

D-Sub, он же VGA — устаревший аналоговый разъем, изначально предназначенный для вывода информации на ЭЛТ-мониторы. На многих ЖК-дисплеях присутствует VGA-вход, но пользоваться им стоит только в случае крайней необходимости. Связано это с тем, что видеокарте приходится преобразовывать цифровой сигнал в аналоговый, а ЖК-монитор вынужден выполнять обратное преобразование. Естественно, это не лучшим образом сказывается на качестве изображения.

DVI — цифровой разъем, предназначенный для подключения ЖК-дисплеев. Существуют переходники с DVI на VGA, позволяющие подсоединить ЭЛТ-монитор к DVI-выходу видеокарты. Поддерживается алгоритм защиты HDCP.

HDMI — цифровой разъем, способный передавать одновременно видеосигнал и многоканальный звук. Существуют переходники с HDMI на DVI, однако при их использовании теряется возможность передачи звука. На видеокартах серии Radeon HD и некоторых других моделях можно использовать специальный переходник с DVI на HDMI, который не приводит к потере звука. Поддерживается алгоритм защиты HDCP.

DisplayPort — новый цифровой разъем, способный передавать одновременно видеосигнал и многоканальный звук. Существуют переходники с DisplayPort на DVI, VGA и HDMI, правда, в первых двух случаях происходит потеря звукового сигнала. Поддерживаются алгоритмы защиты HDCP и DPCP.

Программный вопрос

API DirectX используется сегодня практически в каждой игре.

Связать API с видеокартой — сложная задача, которая возлагается на плечи создателей драйверов.

Попробуем разобраться, как видеокарта взаимодействует с играми. Ради этого нам вновь придется обратиться к истории. Графические платы стандартов MDA, CGA, EGA и VGA вообще не требовали драйверов — необходимое для работы устройств ПО было зашито в BIOS. Поскольку в рамках одного стандарта все видеокарты обладали одинаковой архитектурой и взаимодействовали с системой схожим образом, то разработчики приложений писали свои творения под определенный стандарт, а не видеокарту. Иначе говоря, все графические адаптеры со стороны программы выглядели одинаково.

Однако, когда настала эпоха SVGA, программисты столкнулись с рядом серьезных проблем. Например, не было четкого описания, как графическая плата должна работать в разрешении 640х480 при 256 цветах — разные видеокарты использовали этот режим по-своему. Разработчикам оставалось лишь адаптировать свои приложения для работы с каждой моделью видеокарты. Естественно, это было неудобно и отнюдь не способствовало прогрессу в сфере графических технологий. Появление стандартов VESA частично исправило ситуацию: режимы работы SVGA получили официальные спецификации, и все новые видеоадаптеры их учитывали.

Тот хаос, что создали первые SVGA-карты, подтолкнул программистов Microsoft к концепции общего интерфейса прикладного программирования — API. Впервые подобные интерфейсы для видеокарт были реализованы в Windows 95. Они стали промежуточным слоем между драйвером графической платы и самими приложениями. Другими словами, API — это программные стандарты, которые надлежит использовать разработчикам ПО, чтобы их приложения работали в определенной программной среде. При разработке игры код пишется под конкретный API, а производитель видеокарты гарантирует, что этот API совместим с драйвером графической платы.

Игры на графическом движке Doom 3 эксплуатируют возможности OpenGL.

На сегодняшний день для создания игр используется два интерфейса прикладного программирования. Первый из них — это вездесущий Microsoft DirectX, который мы регулярно обновляем, дабы новые игры запускались без проблем. В состав DirectX входит целый набор различных API: для музыки, звуков, устройств ввода и прочее. За графику отвечает только Direct3D. DirectX чертовски популярен, поэтому в настоящее время именно Microsoft задает тон игровой индустрии, регулярно добавляя в свой API новые возможности.

Еще один распространенный интерфейс программирования — OpenGL (Open Graphics Library). Сегодня он не так востребован, как прежде. Как отмечают разработчики игр, вплоть до выхода DirectX 9 пользоваться OpenGL было удобнее, но в данный момент API от Microsoft предоставляет больше возможностей. Тем не менее OpenGL используется в таких играх, как Doom 3, Prey, Quake 4, Enemy Territory: Quake Wars. К тому же следующий проект небезызвестной id Software — игра Rage — будет написан исключительно под OpenGL.

Для обеспечения максимальной совместимости игр с графической подсистемой компьютера в них часто встраивают несколько путей кода — для разных API. Например, многие современные игры поддерживают одновременно DirectX 9.0c и DirectX 10. Очевидно, что, работая с более старым API, игра лишается многих визуальных эффектов.

Забытая технология

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

Модели техники в Red Alert 2 созданы с помощью вокселей.

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

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

Увы, воксели отъедают массу ресурсов процессора и оперативной памяти, поскольку производители видеокарт отдали предпочтение полигональной модели и современные видеоадаптеры не могут обрабатывать воксели на аппаратном уровне.

В качестве примеров игр, использующих воксели, можно привести таких ветеранов, как Blood, Comanche, Red Alert 2, Периметр и Outcast.

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

Простор для творчества

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

Первой видеокартой с поддержкой шейдеров стала GeForce 3. Вместе с ней компания NVIDIA представила стандарт Shader Model 1.0 (SM 1.0), описывающий структуру шейдерных команд. Microsoft поддержала инициативу NVIDIA и обеспечила поддержку SM 1.0 в API DirectX 8. Правда, изначально язык программирования шейдеров был очень сложен и мало чем отличался от низкоуровневого Assembler. Писать программы на этом языке — настоящая пытка, так что SM 1.0 разработчики игр использовали очень осторожно. К тому же максимальная длина шейдеров первой версии была очень мала, равно как и набор доступных команд. Однако при всех неудобствах шейдеры стали действительно революционным явлением.

Вот он, прорыв в современной 3D-графике. В 2005 году о таком качестве картинки даже не мечтали.

В Shader Model 1.0 шейдеры были разделены на два типа: вершинные (или вертексные) и пиксельные (или фрагментарные). Первые отвечают за трансформацию и освещение вершин и могут выступать в качестве замены блоку Transforming&Lightning. Но если T&L в состоянии выполнять лишь фиксированный набор команд, то возможности шейдеров куда богаче и разнообразнее. Итоговые результаты здесь во многом зависят от фантазии программистов, а не только от архитектуры видеоадаптера. Использование вершинных шейдеров помогает существенно снизить нагрузку на центральный процессор, переложив ее на плечи видеокарты.

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

Выход следующей версии шейдеров — Shader Model 2.0 — существенно облегчил жизнь программистам. Во-первых, на свет наконец появился высокоуровневый язык программирования шейдеров — HLSL. По структуре команд и синтаксису он очень похож на Си. С помощью компилятора команды автоматически преобразовываются в низкоуровневый код, доступный для восприятия видеоадаптером. Итоговый результат варьируется в зависимости от того, какая видеокарта установлена в системе. Также в SM 2.0 увеличилась максимальная длина программ, появилась возможность использования условных переходов и циклов для вершинных шейдеров, а их пиксельные собратья научились оперировать числами с плавающей запятой.

С выходом DirectX 9.0c появилась и Shader Model 3.0, ставшая эволюцией предыдущей модели. У программистов теперь практически не было ограничений на длину и сложность шейдеров. SM 3.0 существует вот уже несколько лет, однако отказываться от нее пока что не планируется — ее поддерживают даже самые технологичные из современных игр.

А вот Shader Model 4.0, появившаяся вместе с DirectX 10,помимо очередных количественных улучшений, принесла с собой еще и новый тип шейдеров. Отвечают они за обработку целых массивов вершин и зовутся геометрическими. Важных свойств у этих шейдеров два. Во-первых, с их помощью геометрические объекты создаются непосредственно в графическом конвейере, без участия центрального процессора. Например, из одной-единственной вершины можно сделать куб или пирамиду. Другое важное свойство — возможность использования потокового вывода. Благодаря этому уже обработанные геометрические массивы могут отправляться в буфер вершин и повторно использоваться в графическом конвейере. Все это снижает нагрузку на процессор и увеличивает число возможных эффектов. Однако грамотно использовать возможности Shader Model 4.0 программисты, похоже, еще не научились.

Повсеместные явления

Depth of field, вообще-то, ухудшает картинку, зато увеличивает реализм.

Огонь, взрывы и искажения пространства — результат работы шейдеров.

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

Bump mapping — это самая простая технология симуляции неровностей. Работает она по следующему принципу: в память графического ускорителя помимо вершин плоскости и видимой текстуры загружается также карта высот. По сути, это черно-белая текстура, в которой интенсивность цвета текселя показывает, насколько должна быть изменена высота этой точки относительно плоскости объекта, на который накладывается карта высот. Сама карта высот не отображается на экране, но информация, содержащаяся в ней, используется пиксельными шейдерами для определения конечной яркости той или иной точки дисплея. При этом учитывается угол падения лучей, так что bump mapping прекрасно работает с динамическими источниками освещения. Как правило, этот метод используется для создания «псевдо-шершавых» поверхностей.

Дорожное покрытие на самом деле плоское, а иллюзия неровностей создается с помощью normal mapping.

Технология normal mapping чуть более совершенна. Она предусматривает применение карт нормалей — цветных текстур, в которых каждая из трех составляющих цвета (красная, синяя и зеленая) показывает пространственные координаты нормалей (перпендикуляров к плоскости). Оперируя этими данными, можно сымитировать не только асфальт или кожу, но и гораздо более сложные вещи. Взять, к примеру, Doom 3. По контуру монстров видно, что им катастрофически не хватает полигонов. Однако сами по себе они выглядят более чем реалистично. Так вот это и есть работа normal mapping. Все мельчайшие детали внешности врагов в игре имитируются пиксельными шейдерами, а в реальной геометрической модели они отсутствуют.

Parallax mapping — это эволюционное развитие предыдущей технологии. В нем также используются карты нормалей, однако этот метод вносит отличия в сам процесс нанесения текстуры: ее координаты изменяются в зависимости от точки зрения наблюдателя. Алгоритмы эти достаточно сложны, но и результат себя оправдывает. Например, в F.E.A.R. дырки от пуль в стенах реализованы с помощью parallax mapping. Каменная кладка стен из Oblivion также создана с применением этой технологии.

Очень активно пиксельные шейдеры используются для реализации эффектов постобработки, коих великое множество. Они применяются в самом конце графического конвейера, когда кадр уже фактически готов к выводу на экран. В качестве примера постобработки приведем размытие в движении (motion blur), которое используется в каждом втором боевике или симуляторе. Другой пример — изменение глубины резкости (depth of field), при котором объекты, находящиеся вне фокуса зрения, намеренно размываются. Подобные явления мы часто наблюдаем при прицеливании и в роликах на движке игры. Ну и, конечно же, различные изменения цветовой гаммы с целью стилизации, скажем, под выцветшую картинку тоже относятся к эффектам постобработки.

В новейшей графической демонстрации от NVIDIA активно применяются геометрические шейдеры.

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

Благодаря displacement mapping водная гладь оживает.

Вершинные шейдеры вносят не менее серьезный вклад в повышение реализма трехмерной сцены. Однако эти улучшения, как правило, связаны с различной анимацией, будь то продвинутая лицевая мимика персонажей, развевающаяся на ветру ткань или труп злодея, падающий на землю в соответствии с особенностями человеческой анатомии. Впрочем, одной лишь анимацией все не ограничивается. К примеру, есть один интересный эффект, завязанный на вершинных шейдерах. Называется он toon shading. С его помощью имитируется «мультяшность», то есть все объекты становятся плоскими и как бы рисованными. Нечто подобное можно наблюдать в игре Bad Day L.A.

Из разнообразных инструментов, используемых программистами при работе с вершинными шейдерами, мы выделим displacement mapping. Сегодня эта технология часто используется при создании волн и имитации ткани. Метод очень похож на bump mapping — в память также подгружается карта высот, — однако в данном случае происходит реальное изменение геометрии. Плоскость, состоящая из пары треугольников, разбивается видеоадаптером на сотни полигонов, вершины которых меняют пространственные координаты в соответствие с картой высот. Сложность сцены увеличивается, однако нагрузка на центральный процессор и шину памяти при использовании displacement mapping остается минимальной.

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

Все как в жизни

Человеческий глаз — потрясающее устройство, способное различать широкую гамму оттенков. Даже самые совершенные мониторы современности не в состоянии передать то обилие цветов, что воспринимает наше зрение в реальном мире. Приведем пару фактов. Максимальная яркость стандартных мониторов находится у отметки в 300 кд/м2, а минимальная составляет около 1-2 кд/м2. Исходя из этой цифры, мы можем высчитать, что динамический диапазон этих устройств, то есть отношение самой большой интенсивности свечения к самой малой, не превышает значения 300:1. Противопоставим этому человеческий глаз, способный различать цвета в диапазоне контрастности 800:1. Правда, здесь стоит сделать одну оговорку: то, какие именно значения будут попадать в эти рамки, зависит от окружения. В солнечный день глаз адаптируется под цвета с высокой яркостью, а в кромешной тьме будет лучше различать темные оттенки.

The Elder Scrolls IV: Oblivion была одной из первых игр, где эффекты HDR предстали во всей красе.

Для отображения картинки мониторы используют 24-битную RGB-палитру. Любой оттенок получается в результате смешения красного, зеленого и синего цветов, интенсивность каждого из которых задается 8-битным числом. Получающийся итоговый цвет обладает целочисленным значением яркости, находящемся в диапазоне от 0 до 255 условных единиц. Выходит следующая ситуация: в реальности мы видим картину с 800 градациями яркости, а монитор в состоянии отобразить лишь 256. Видеокарта по умолчанию также использует RGB-палитру, и при расчетах ей приходится оперировать все теми же 256 значениями яркости. Отсюда вывод: правильно рассчитать сцену, в которой одновременно находятся очень яркие и очень темные объекты, не представляется возможным. В любом случае будут наблюдаться серьезные искажения в цветопередаче.

Изменить мониторы мы пока не в состоянии, но зато можем отказаться от классической RGB-модели при расчете цветов. Вместо этого яркость задается значениями, линейно пропорциональными реальным величинам. Именно эта идея легла в основу технологии High Dynamic Range Rendering(HDRR), позволяющей строить сцену с использованием расширенного динамического диапазона цветов — HDR. С ее помощью в недрах видеоадаптера создается кадр со значениями цветов, теоретически соответствующих тем, что мы воспринимаем своим зрением. Однако мониторы по-прежнему работают в 24-битном режиме RGB. По этой причине видеокарта вынуждена преобразовывать HDR-изображение в привычный для дисплеев вид. Процесс этот именуется tone mapping (тональная компрессия).

Без HDR это была бы совсем другая картина.

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

В современных играх при использовании HDR каждая цветовая составляющая кодируется 16-битным (FP16) или 32-битным (FP32) числом в формате с плавающей запятой. FP32 пока практически не используется, так как возможностей 16-битной кодировки хватает с лихвой. Переход к 32 битам на канал приводит к существенному падению производительности, но ощутимого улучшения картинки не происходит.

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

Полноценной поддержкой HDRR обладают все видеокарты, начиная с моделей серий GeForce 6000 и Radeon X1000. Правда, графические адаптеры GeForce шестой и седьмой серии не способны одновременно использовать HDR и сглаживание изображения.

Альтернативное использование

Проект Folding@Home: помоги создать лекарство... или биологическое оружие?

Современные видеокарты — это устройства с колоссальной вычислительной мощью. Судите сами: производительность флагманских видеоадаптеров вот-вот должна перевалить за отметку в один TFLOPS, то есть триллион операций с плавающей запятой в секунду. А шейдерные процессоры как нельзя лучше подходят для расчетов, поддающихся распараллеливанию. Вполне логично, что видеокарты все чаще пытаются использовать не только для построения трехмерных сцен, но и для ряда других вещей.

Один из примеров альтернативного использования — проект Folding@Home, созданный с целью изучения аномалий в процессе сворачивания белков и связанных с этим заболеваний. Подобные исследования связаны с огромным количеством вычислений. Поэтому авторы создали систему, с помощью которой любой пользователь может помочь проекту. Для этого надо скачать и рассчитать на своем компьютере определенную часть данных. При этом для расчетов рекомендуется использовать видеокарту, ведь графическое ядро справляется с задачей в десятки раз быстрее центрального процессора. В данный момент программное обеспечение Folding@Home не поддерживает видеокарты GeForce или Radeon, но вскоре ситуация должна измениться.

Источник: http://www.lki.ru

Просмотров: 6809


29 . 03 . 2024