Трехмерная графика для геймера. Часть 3

on апреля 17, 2025 - 15:40

Часть 1

Часть 2

Внутри ускорителя

Из каких же компонентов состоит современный графический ускори­тель? Перво-наперво, из самого ви­деочипа (GPU, графического про­цессора); обычно он сдвинут чуть вниз и вправо от центра карты и ук­рыт массивным радиатором (а ча­ще — и радиатором и вентилято­ром). Для последних поколений мощных карт хорошая система ох­лаждения — обязательное требова­ние, так как они рассеивают просто неимоверные количества тепла; очень важно также проследить, чтобы в корпусе установленной ви­деокарте не мешали другие платы расширения, чтобы хватало свобод­ного места — оно критично для хо­рошего охлаждения. Но вернемся к чипу: он, фактически, является главным компонентом видеокарты. От типа и рабочих частот GPU на­прямую зависит производитель­ность видеокарты в целом. Именно GPU выполняет все операции по визуализации 30-графики: подго­товку и трансформацию треуголь­ников, отсечение их невидимых ча­стей, освещение, заполнение сцены текстурами, реализацию пиксель­ных эффектов.. В общем, графиче­ский процессор — сердце и «мозг» видеокарты.

Два главных производителя чи­пов для видеокарт — компании ATi и nVidia. Есть свои решения у Matrox, SiS, VIA (ныне владеющей S3) да Imagination Tech (торговая марка Куго), однако по сравнению с лидерами рынка по сумме показа­телей они не выдерживают конку­ренции. Любопытно, но если взгля­нуть на цифры по рынку видеочи­пов, то можно обнаружить заметно меньшую долю рынка у ATi и nVidia по сравнению с маститой Intel. Хотя последняя и не поставляет видео­чипов для отдельных видеокарт, ог­ромное количество корпоративных компьютеров собираются на мате­ринских платах со встроенными ви­деоускорителями Intel (по части производительности, разумеется, отстающих от «внешних» видеокарт в десятки и сотни раз). Отсюда и столь заметная доля рынка.

Кроме GPU-мозга видеокарте нужна память для хранения разно­образных текстур и координат, со­здания буфера кадра (грубо говоря, хранения сформированного для пе­редачи на монитор изображения), а также прочей промежуточной ин­формации. Казалось бы, в чем про­блема? У нынешних компьютеров памяти много (256 Mb-1 Gb). Буфер кадра, например, для разрешения 1024x768 в 32-битном цвете зани­мает лишь чуть более 3 мегабайт, текстуры для сцены редко превы­шают 64-128 'Mb, дополнительная информация тоже вряд ли будет слишком объемной. Весь вопрос заключается лишь в скорости — при использовании «обычной» па­мяти и постоянной прокачке огром­ных объемов информации по шине AGP (с введением PCI-Express эта проблема исчезает, но первая не­приятность все равно остается), GPU просто не будет хватать ин­формации для работы — поэтому на видеокарте было решено уста­навливать не слишком объемную, но очень быструю память с мини­мальными задержками и макси­мальными частотами. К примеру, на современных видеокартах GDDR-3 не новость, а обычные компьютеры только-только начина­ют осваивать DDR-2. Текстуры пе­редаются из обычной системной памяти в быструю видеопамять, а уж она бесперебойно снабжает GPU всем необходимым. Несмотря на то, что объем памяти на видео­картах стремительно растет (верх­ние модели уже имеют 256 Mb на борту), большинство современных игр не использует текстуры в сверх­больших разрешениях, для которых бы требовалось более 64-128 Mb видеопамяти. Ввиду работы на вы­соких частотах, модули памяти так­же подвержены достаточно сильно­му нагреву и требуют хотя бы пас­сивного охлаждения (радиатор). Тем не менее, наиболее прогрес­сивная GDDR-3 не требует столь тщательного охлаждения благодаря новым технологиям и, в особеннос­ти, BGA-yпаковке (на вид квадрат­ные, вместо традиционных прямо­угольников TSOP-упаковки преды­дущего поколения). Частоты, на ко­торых работает видеопамять, так­же очень важны для повышения производительности видеокарты в целом. Однако, разумеется, глав­ную роль здесь будет играть ско­рость GPU, а видеопамять просто не должна задерживать процесс до­ставки процессору необходимой информации.

Что еще, кроме памяти и GPU, находится на видеокарте7 Разуме­ется, сотни и тысячи «сопровожда­ющих» элементов, а также еще как минимум один важный чип, без ко­торого вы ничего на экране мони­тора не увидите; RAMDAC (Random Access Memory Digital Analog Converter — цифро-аналоговый преобразователь содержимого ОЗУ). RAMDAC преобразовывает отрисованное акселератором и со­храненное в кадровом буфере изо­бражение в аналоговый сигнал для передачи его на монитор. Монитор к видеокарте может подключаться либо при помощи стандартного 15- контактного разъема D-Sub (обыч­но его окрашивают синим цветом для легкости ориентирования), ли­бо более нового цифрового разъе­ма DVI (Digital Visual Interface — ци­фровой визуальный интерфейс). Почти все нынешние видеокарты оснащены не одним, а двумя RAM­DAC — второй чип может работать как на второй монитор (реже), так и на телевизор (гораздо чаще). Спору нет, очень удобно работать за мо­нитором, а фильмы смотреть с компьютера на большом телевизоре. От качества RAMDAC (а также в некоторой степени от кабеля мони­тор-видеокарта) зависит качество отображаемой на мониторе картин­ки.

Некоторые графические карты к тому же снабжаются чипом, отве­чающим за работу с видео (VIVO — Video In/Video Out, т.е. видеовход/видеовыход). С его помощью можно производить оцифровку ви­деоматериалов (разумеется, в не­профессиональном качестве) и бо­лее качественный видеовывод. Су­ществуют также варианты карт с несколькими RAMDAC для вывода изображения на несколько монито­ров, разъемами для дочерних ин­терфейсов, блоком ТВ-тюнера и прочими, порой совершенно лишни­ми «наворотами».

Любопытно, что для обеспечения мощных AGP-видеокарт необходи­мым питанием на них устанавлива­ют разъемы для дополнительного 12 В питания (такие же, как на же­стком диске, CD-ROM и др.). Стан­дарт PCI-Express, по большому сче­ту, такого недостатка лишен, пото­му как способен доставлять видео­карте гораздо больше энергии по сравнению со стандартным AGP. К слову об интерфейсах: в настоящее время подавляющее большинство видеокарт «общается» с другими уз­лами компьютера при помощи ши­ны AGP (Accelerated Graphics Port), являющейся, по сути, ускоренным вариантом стандартной шины PCI (Peripheral Component Interconnect). Появившийся в 1996 году стандарт AGP переживает третью реинкар­нацию (AGP 3.0 — «8х») и медленно доживает свой век, уступая место высокоскоростному PCI-Express. В отличие от 33 MHz стандартного PCI (и 2,5 GHz PCI-Express), AGP 4х работает на частоте 266 MHz и обеспечивает пиковую пропускную способность порядка 1 ГБайт/сек. AGP 8х соответственно, 2 ГБайт/сек. Необходимо отметить, что шину с такой пропускной спо­собностью на данный момент не способны нагрузить даже самые мощные акселераторы, а потому пиковая пропускная способность интерфейса PCI-Express х16 (6,4 ГБайт/сек) кажется заделом на далекое-предалекое будущее. Тем не менее, последние линейки видео­карт и ATi (Radeon Х700), и nVidia (GeForce 6600) пока выпущены ис­ключительно в PCX-варианте (PCX = PCi-eXpress). В ближайшее время начнется постепенная миграция на PCX-решения, пока же позиции AGP еще сильны.

За кулисами трехмерной сцены

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

Уже Voodoo2 умел накладывать две текстуры за один проход. А это означало возможность получения более реалистичных эффектов. За­частую при помощи мультитексту­рирования создавались эффекты освещения (в основном этот метод подходил для ландшафтов): нало­женная сверху черная текстура с каким-либо значением прозрачнос­ти исполняла роль статичной «тени». Кроме того, при помощи мультитек­стурирования можно организовать «рельефное текстурирование». В та­ком случае вторая текстура, т.н. «карта рельефа», указывает не цвет каждого пикселя, а его «высоту». Затем, при реализации затенения по Фонгу, вектор нормали немного изменяет свое направление в зави­симости от карты рельефа (ее мож­но называть еще картой высот) — соответственно, яркость пикселя будет немного другой, благодаря чему наш мозг быстро распознает выпуклость или впадину на изобра­жении. В полной мере метод рель­ефного текстурирования проявил себя в движке Doom III.

С выходом GeForce 256 (первого GPU) на графический ускоритель можно было переложить расчеты геометрии и освещения, тем самым радикально снизив нагрузку на про­цессор и позволив относительно безболезненно увеличивать коли­чество полигонов в поле зрения ка­меры. БлокТ&L (Transform&Lighting — трансформации и освещения), называемый иногда еще TCL-блоком (Тransformation-clipping-lighting), получал от приложения пара­метры и координаты источников света, а затем на их основании са­мостоятельно рассчитывал освеще­ние каждого полигона. Кроме того, он имел в своем активе специаль­ные максимально оптимизирован­ные функции для быстрой реализа­ции матричных преобразований (трансформации) и отсечения неви­димых частей (перекрывающихся поверхностей) полигонов. Хотя блок T&L и был мощным, но особой гибкостью не страдал: для реализа­ции новых функций приходилось ждать новых видеокарт. Именно поэтому в настоящее время он тихо умер, а его функции (и, при надоб­ности, его эмуляция) теперь возло­жены на плечи вершинных шейде­ров. Как раз из-за ограниченности установленных разработчиком функций и появились шейдеры, поз­волившие разработчикам очень гибко программировать «железо» акселератора под свои специфиче­ские нужды.

В последнее время это словечко («шейдер») у всех на слуху. Что же это за шейдер такой и с чем его едят? Грубо говоря, шейдер — это написанная на специальном языке (или ассемблере) и исполняемая непосредственно GPU программа, позволяющая оперировать освеще­нием четверок пикселей (квадов) как самих по себе (пиксельные шейдеры), так и связанных с поли­гонами вершин (вершинные шейде­ры).

Вершинные шейдеры могут эму­лироваться программно при помо­щи CPU, пиксельные — нет. Пиксельные шейдеры позволяют до­стичь удивительной реалистичнос­ти изображения благодаря практи­чески неограниченным возможнос­тям управления освещением на са­мом низком уровне. Традиционным примером использования пиксель­ных шейдеров являются сложные отражающие поверхности (вода в Morrowind) и волосы. В каждой но­вой (2.0, 3.0) версии шейдеров рас­тут их функциональность и произво­дительность: те же самые операции на шейдерах более новой версии можно реализовать проще и быст­рее, а нередко и вовсе добиться ра­нее недостижимых эффектов. Не­смотря на долгие и упорные попыт­ки nVidia приучить разработчиков к более удобному высокоуровневому (и «заточенному» под семейство GeForce, разумеется) языку программирования шейдеров Cg («С для графики»), они упорно продол­жают пользоваться стандартным HLSL (High Level Shader Language — высокоуровневый шейдерный язык), который лучше «переварива­ют» карты ATi.

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

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

Современные технологии (фильт­рация, сглаживание) призваны бо­роться с этими неприятностями. Познакомимся с ними поближе. Итак, что делает графическая кар­та? Грубо говоря, она «натягивает» текстуры на полигоны, позволяя этим полигонам выглядеть реалис­тично.

Представьте, например, что пе­ред вами в игре стоит шкаф. Мо­дель его проста — прямоугольный параллелепипед (трехмерный пря­моугольник, короче), обтянутый со­ответствующей текстурой. Что бу­дет, когда мы переместимся, ска­жем, назад? Само собой, процес­сор рассчитает смену положения игрока в игровом мире, сообщит всю необходимую информацию GPU, и тот нарисует параллелепи­пед меньших размеров. Но как быть с текстурой? На модель будет наложена текстура более низкого разрешения — согласитесь, ведь при отдалении мы хуже различаем мелкие детали. Логично предполо­жить, что при приближении к объек­ту разрешение текстур, накладываемых на объекты изменяющегося размера, стоит увеличивать. Вот это уменьшение (удаление от «точ­ки зрения») и увеличение (прибли­жение) размеров текстуры и назы­вается MIP-mapping'oM.

Вроде все верно и правильно придумано, согласны? Но, как обычно, возникают проблемы. Первая — масштабирование. Текстуры нельзя увеличивать до бесконечно­сти без потерь в качестве — отсю­да и «квадраты» (эффект избыточ­ного увеличения) в случае макси­мального приближения к объекту. Кроме того, на длинных сплошных моделях (например, пола, стен, по­толка) будут хорошо заметны рез­кие «прыжки» между MIP-уровнями, т.е. текстурами с различным разре­шением.

Вообразите, что вблизи идут тек­стуры высокого разрешения, кото­рые чуть поодаль резко сменяются текстурами более низкого разреше­ния и т.д. Иногда эти переходы между уровнями сильно заметны, иногда — не очень, но лучше бы, конечно, их не было вовсе. Для борьбы с неприятным побочным эффектом MIP-mapping'a использу­ется билинейная/трилинейная фильтрация.

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

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

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

Последний штрих для придания картинке реалистичности и завер­шенности — сглаживание. Эффект «лесенки» наклонных линий, вы, ко­нечно, неоднократно замечали.

Как бороться? Несмотря на тучу технологий и оптимизаций от ATi/nVidia с разными красивыми маркетинговыми названиями, об­щие принципы сглаживания, или «антиальязинга» (АА, anti-aliasing — «противоступенчатость»), остались неизменными.

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

К примеру, если «пиксель» со­ставляет половина черных и поло­вина белых субпикселей, то цвет пикселя устанавливается серым. «Стоп-стоп! — воскликнет читатель, честно пытающийся разобраться во всех графических хитросплетениях. — Мы же только недавно говорили о том, что пиксель — мельчайший элемент изображения. Какие тогда к чертям субпиксели?» Все верно, физически субпикселей (еще их на­зывают «сэмплами») не существует. Но их можно получить несколькими методами: например, рассчитать все изображение на экране в удво­енном разрешении (этот метод на­зывается «суперсэмплинг», или ме­тод грубой силы) или рассчитать границы отдельных, подверженных неприятному эффекту «лестницы», объектов с применением различ­ных дополнительных ухищрений (более интеллектуальный метод — «мультисэмплинг»). Если первый метод, в силу своей чрезвычайной ресурсоемкости (для сглаживания картинки с разрешением 800x600 нужно рассчитывать, фактически, изображение в 1600x1200) практи­чески не применяется, то второй метод на современных картах поз­воляет достичь отличного качества при достаточной скорости прори­совки.

Вот такие технологии и методы позволяют картинке в нынешних иг­рах выглядеть эффектно. Сколько для этого нужно вычислительной мощности — лучше даже и не ду­мать. Удивителен другой факт: продук­ты, предназначенные исключитель­но для игр, стоят от 100 до 500 дол­ларов и выше, причем заметно со­вершенствуются каждый год. Это ли не свидетельство исключитель­ного влияния игр на сердца, умы и кошельки? Не становитесь рабами железок и помните — это вы игра­ете в игры, а не игры манипулируют вами, вашим временем и средства­ми. Или все-таки наоборот?

В ближайшие годы, уверен, каче­ство трехмерной графики, обсчиты­ваемой ускорителями в реальном времени, заметно возрастет и до­стигнет уровня 3D-фильма Final Fantasy: Spirits Within, а в дальней­шем, через 5-10 лет, мы с трудом сможем отличить (если вообще сможем) созданную компьютером картинку от настоящей. Уверен, с нынешними темпами развития за этим дело не станет.

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

Рекомендую начать с сайтов http://www.ixbt.com, http://www.3dnews.ru, http://www.overclockers.ru, http://www.nvworld.ru, http://www.gu- ide3d.ru (русскоязычные) и http:// www.ati.com,http://www.nvidia.com, http://www.tweak3d.net, http://www. tomshardware.com, http://www.guru- 3d.com (англоязычные).

Шустрых вам игрушек и крутых карточек!!!

Николай "Nickky" Щетько, me@nickky.com

Краткий словарь 3D-терминов

MIP-текстурирование (лат. Multum in Parvum — «многое в едином») — метод на­ложения текстур с учетом удаленности их от точки обзора. При этом более удаленные тек­стуры берутся с меньшим разрешением, а при­ближенные — с большим. Соответственно, для каждой текстуры должно быть предусмотрено несколько вариантов в различных разрешениях, т.н. МIР уровней. Для устранения эффекта резкого перехода между MIP-уровнями ис­пользуются различные виды фильтрации.

MIP-уровень — текстура с определенным разрешением, используемая в МIР-текстурировании. При таком текстурировании для каж­дой текстуры должно быть предусмотрено не­сколько MIP-уровней с различными разреше­ниями.

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

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

Вертексный конвейер (англ. — vertex pipe) —часть видеоакселератора, «специали­зирующаяся» на вершинных, или вертексных. операциях. Занимается всеми геометрически­ми операциями, реализуемыми, по большей ча­сти, с помощью вертексных шейдеров. Конвей­еры работают параллельно, т в. скорость рабо­ты с геометрией возрастает прямо пропорцио­нально числу конвейеров.

Спрайт —двумерная картинка с изображени­ем кого/чего бы то ни было. Ранее анимация реализовывалась при помощи сотен и тысяч спрайтов, на каждом из которых была изобра­жена некоторая фаза движения объекта. Быс­трой сменой картинок-спрайтов достигался эффект движения.

Квад (англ. Quad – «четверка») — квадрат из четырех пикселей (2x2). Пиксели в совре­менных ускорителях обрабатываются не по одиночке а квадами, что дает определенный выигрыш в производительности и удобстве уп­равления ими.

Мультитекстурирование — наложение на один и тот же полигон нескольких текстур для получения специфических эффектов.

Пиксельный конвейер (англ. — pixel pipe) — часть видеоакселератора, «специализирующаяся» на операциях с пикселями. Занимается закраской, «смешением» значе­ний цвета для квадов, пиксельными шейдера­ми и прочими операциями пиксельного уров­ня. Конвейеры работают параллельно, т.е. скорость работы с текстурами и пикселями возрастает прямо пропорционально числу конвейеров.

[Полноэкранное] Сглаживание (англ. АА (anti-aliasing), FSAA (Full-Screen Anti- Aliasing)) ликвидация эффекта «лесенки» на наклонных линиях. В общем случае проис­ходит путем расчета изображения целиком или отдельными частями в более высоком раз­решении и последующем усреднении цветов соответствующих пикселей на основании из­быточной информации.

Трилинейная фильтрация – методика ус­реднения цветов соседних пикселей на стыке текстур для ликвидации эффекта резкого перехода между MIP-уровнями.

Подробности № 59

Яндекс.Метрика