Ага, вот эти ребята!


Imagination Technologies — одни из тех немногих, доказавших, что в этом мире точно можно существовать сразу в двух сущностях: в тени и в прибыли. Если уж кто и знает, как оптимизировать рендеринг 3D-сцены, так Kristof Beets всегда знает больше. В «былые годы» мужчина был лицом PowerVR (подразделение Imagination Technologies, занимающееся разработкой 3D-графических чипов) и вещал нам о том, как он совместно с ещё парой человеков придумали новый способ рендеринга. В рекламных брошюрах, которыми пестрил каждый обзор видеоплат на базе их чипов, всегда можно было найти очень грубое объяснение традиционного метода рендеринга и его блестящую эволюцию — тайловый рендеринг, который так прогремел в 2001 году, что… вы не слышали? А было громко!

3D-Пайплайн как он был


Сегодня на операционном столе у нас… кто бы вы думали?



PowerVR Series 3! О да, его-то мы и вскроем как следует, но сначала немного истории. На момент выхода на рынок ему пришлось соревноваться с такими гигантами, как ATI R100 и NVIDIA Жираф 3. То были серьёзные решения, но PowerVR и не собирались участвовать в гонке за мегагерцами. По заявлению PowerVR, те двое рисуют 3D-графику устоявшимся бесперспективным традиционным методом или же это можно было называть immediate-mode rendering. Чтобы понять, как это, нам придётся потревожить такое понятие как Графический конвеер (далее — 3D-пайплайн).
3D-пайплайн?
Точно! Но подождите, на него ещё нужно попасть…

А для начала нам нужно построить 3D-сцену в каком-то приложении. Вспомните уроки черчения: как вы рисуете, например куб? Вот и в 3D-моделлировании (3-Dimensional Modelling) вы тоже рисуете в проекции на плоскости (которую определяете сами), каждая точка которой может быть описана как: xyzнает где. Но изначально перед вами необъятный космос (space), а вам нужно задать в нём хотя бы одну вот эту вот плоскость. И тут-то на помощь и приходит такая простая фигура как треугольник,- он отлично с этим справится. Дальнейший сценарий самый разнообразный, например, на этой плоскости мы можем разместить что-нибудь или мы можем присоседить к нашей плоскости другую плоскость…

Итак, классические фигуры (примитивы) для построения любых других геометрических фигур (полигонов) в концепции 3D-моделирования — это треугольники. Почему:
  • Треугольник плоский. Вы можете быть уверены, что все три его вершины находятся в одной плоскости.
  • Все остальные полигоны можно построить из них. Причём даже очень быстро методом triangle strips.
    Сейчас сразу найдутся умники, которые спросят: «А как же из треугольников сделать круги?» Да, с этим будут проблемы… Хорошо, а как из линий? ;) Да точно так же.


Кстати на самом деле приложение передаёт видеокарте вовсе не готовую 3D-модель сцены, а всего лишь координаты вершин полигонов в нашем космосе.

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

В итоге в буфере конечного кадра (фреймбуфер) формируется один полный кадр и выводится. В идеале таких вот кадров нужно успевать хотя бы 25 в секунду (это и назвали FPS — Frames per Second), иначе человеческий глаз заметит, что изображение на экране показывается прерывисто.

Хочется попутно развинтить очередной миф: Если забыть про VSync, то скорость игры от fps не зависит. Скорость игры зависит от того, успевает ли HDD, CPU и RAM. А вот плавность изображения — да, вот за это ответственна видяха с её FPS. Вспомните тот же Unreal на ранних 3D-видеокартах, например, когда вы понимали, что вас убили ещё до того, как вы это увидели.
До недавнего времени де-факто стандарт был FPS = 60, что даёт очень плавную картинку, по сравнению с FPS = 25. Сегодня при наличии монитора с частотой обновления больше 60Гц вы можете попробовать посмотреть современные игры, в которых также есть поддержка вывода FPS > 60. Говорят, ничего так ;)


Классический 3D-пайплайн глазами PowerVR

Ну так вот, вернёмся к нашей скотине immediate-mode rendering (далее — IMR). На протяжении всех своих лет существования на рынке pc-видеоплат PowerVR давали нам такую вырезку из классического 3D-пайплайна, который применяется в IMR-видеокартах:

image

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

Что предлагает PowerVR

А PowerVR уже который год предлагают нам: "Think before you start to render!".
Казалось бы, ведь это так просто! Нам всего лишь необходимо поменять местами первые две стадии на рисуночке.

image

Но за всем этим кроется одна большая проблема: в то время весь 3D-пайплайн был аппаратно зашит в чипы (от геометрии до вывода во фреймбуфер). Посему PowerVR в своих чипах круто изменили 3D-пайплайн, заодно придумав собственный метод рендеринга: Tile Based Deferred Rendering!!! Ключевое слово Deferred, потому что были, например, видеокарты Intel GMA, которые использовали Coined Zone Rendering, который по сути тоже Tile-Based.

Intel uses a similar concept in their integrated graphics solutions. However, their method, coined zone rendering, does not perform full hidden surface removal (HSR) and deferred texturing, therefore wasting fillrate and texture bandwidth on pixels that are not visible in the final image.

en.wikipedia.org/wiki/PowerVR

А на самом деле...


… конечно, всё было не совсем так. А именно:

  1. Поначалу (1995 — 2000 гг.) у карт с IMR всё складывалось неплохо и карты с TBDR не имели особого преимущества, оставаясь в тени. Но и в 2001 году карты PowerVR, на самом деле, особо не выехали. Потому что вендорами IMR-чипов были своевременно проведены независимые расследования и, в результате, без интриг и скандалов, до вендоров быстро дошло, что типичный 3D-мир становится всё комплекснее и многослойнее. Всем стало ясно, что теперь боттлнеком является видеопамять с её пропускной способностью, и, что нужно оптимизировать работу с этой вот памятью и обязательно с z-buffer'ом.
    Так практически одновременно в 2001 году увидели свет такие разные технологии, как HyperZ у ATI и Lightspeed Memory Architecture у NVIDIA. И, если первая на заре своего появления отсеивала overdraw уже только непосредственно перед растеризацией, то вот вторая делала это ещё на уровне геометрии!

  2. Помимо того, конечно, PowerVR немного лукавили. На приводимой ими схеме классического 3D-пайплайна IMR (см. Классический 3D-пайплайн глазами PowerVR) явно не хватало шейдеров, которые уже были в зачаточной стадии даже на жирафе 2 (это называлось NSR). Ну а у каждого уважающего себя чипа 2001 года (ATI R100, NVIDIA Жираф 3) уже были полноценные пиксельные или даже вершинные шейдеры, открывающие «полигоны возможностей» управления 3D-пайплайном.
    Однако же заметьте, что TBDR всё же был придуман задолго до шейдеров!


По указанным выше причинам PowerVR снова оказались в тени и дальнейшая судьба их сложилась в другом сегменте (привет владельцам IPhone). Но на что же на самом деле был способен чип PowerVR Series 3, карты на котором так и не доехали до нас?


Краем глаза


Когда речь заходит о таких раритетах, как карты на PowerVR, приходится довольствоваться тем, что урвал. То есть, здесь не будет таких раскрученных ребят, как Videologic Vivid! или Hercules 3D Prophet, но будет, например, вот такая штуковина:

image

На фото AGP-видеокарта SUMA Platinum K2 на том самом последнем вышедшем чипе от PowerVR в сегменте PC — PowerVR Series 3. Все подобные карты были сделаны по одному референсному дизайну, но вот на этом корейце нет надписи PowerVR, от чего несведующие могли пройти мимо. Кулер тут от Асус, потому что на всех этих платах были очень шумные низкопрофильные кулеры, которые вскоре приказывали долго жить. Вдобавок, теперь и все детали у карты на месте :) Карте я прошил самый последний биос.





Кажется, будто бы карта недалеко ушла (если вообще ушла) от вуду 5500: всё те же 350Мтекселов, 64метра SDR-памяти, 2 пиксельных конвеера, DX6 (и, как следствие, полное отсутствие шейдеров), всё тот же AGP2x с сайдбандом (и без плюшек)… но это только кажется.

Ближе к сердцу


image

Сам чип PowerVR Series 3 — 2000 года рождения. Это было уже третье (ревизии опустим) явление народу, которое впервые чем-то увенчалось. Видимо, чип был настолько успешен, что сумел ещё раз наследить в истории аж в 2004 году: некая компания Pixel Perfect сделала на нём карту (причём опять-таки по референсному дизайну и опять-таки с кулером, которого уже нет и, да, эту тоже пришлось чинить). Так вот её вскрытие показало, что чип-то вовсе не PowerVR Series 3.

image

Значит, присядьте, тут необходимо поведать о теперь уже действительно легендарном бермудском треугольнике: Imagination Technologies — PowerVR — STMicroelectronics. Этот треугольник точно был, но из наших его никто не встречал, а теперь его точно нет. Легенда же гласит, что в те годы PowerVR был вовсе не подразделением Imagination Technologies, а просто брендом (им же и принадлежавшим) для кучи технологий. Ну а небезызвестная STMicroelectronics купила у Imagination Technologies лицензию и клепала на своих мощностях чипы с этими вот новшествами. Потому что не было у Imagination Technologies своих мощностей. Трудно даже утверждать, кто из этих двух на самом деле придумал название KYRO (зато можно утверждать, что это производное от Cairo (Каир)). Ну а конкретно этот вот чип STG4500-X (в простонародии KYRO II) и есть PowerVR Series 3.
Ну, то есть, как вы правильно поняли, была ещё как минимум одна инкарнация PowerVR Series 3STG4000-X (или KYRO I), который по-сути был абсолютно идентичен KYRO II, только работал на пониженной частоте…

… Но внутренности KYRO II уже на столе и стынут:

  • У чипа всего два пиксельных конвеера, но работают они всегда, поэтому неважно, включен ли мультитекстуринг в игре или нет. Таким образом Мпиксели здесь равны Мтекселям (да, как в вуду ;) ).

  • Но куда интереснее то, как эти конвееры работают. И вот тут мы подошли к тому, с чего начали — к интересному, к тайловой архитектуре.
    Точного объяснения, как же на самом деле работает Tile Based Deferred Rendering (далее — TBDR), я не встречал нигде. Встречаются несколько различных вариантов, из которых можно получить такое общее представление:

    … Снижение FPS чаще всего становится результатом переполнения шины видеопамяти. Но каким же образом мы можем избежать переполнения? Основная идея TBDR — избавить от ненужной работы и без того заезженный 3D-пайплайн, что серьёзно снизит требования к пропускной способности видеопамяти. Каким образом? Чем тупо рисовать каждый полигон по очереди (как поступают IMR-карты), KYRO, следуя концепции TBDR, сначала составляет список всех полигонов в кадре (display lists). Затем KYRO проверяет, какой полигон какой закрывает и, наконец, затеняет, текстурирует и рисует только действительно видимые части полигонов. Логично и просто.

    Для любителей погрузиться...
    Kristof Beets так объяснял TBDR:

    Прежде, чем начать работать с кадром, видеоплаты на основе PowerVR KYRO разбивают свой фреймбуфер на маленькие прямоугольники (тайлы), размером 16х32px или 32х16px или даже 32x32px и т.п. в зависимости от версии чипа. Также в архитектуре чипа PowerVR KYRO предусмотрен специальный tile-buffer для работы с этими тайлами. Tile-buffer представляет из себя матрицу, каждая ячейка которой соответствует одному тайлу из фреймбуфера. Ну а 3D-пайплайн выглядит так:

    1. Tile Binning (Sorting).
      Приложение генерирует кадр с полигонами в оперативной памяти и отдаёт этот кадр на съедение видеоплате. В кадре с полигонами, который нам отдаёт приложение (далее — буфер сцены) содержатся вершины, значение глубины (Z) и другая сопутствующая информация о каждом полигоне. Каждому полигону KYRO присваивает уникальный номер.

      image

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

      image

    2. The Hidden Surface Removal Algorithm
      Вот тут начинается самое интересное. Упрощённо говоря, у каждого полигона есть значение глубины, которое указывает, насколько глубоко в сцене находится полигон (значение Z). Если несколько полигонов попадают на одно и то же место, виден будет только тот, значение глубины которого меньше (прозрачность сейчас не берём). Ну, то есть, для каждого пикселя в тайле чип выясняет, какой же полигон из всех, что на этот пиксель попали, окажется на самом деле виден.
      Например, смотрится ячейка tile-buffer'а для тайла №43. Как вы помните, в этой ячейке содержатся номера полигонов, попавших в тайл №43. Каждый из этих полигонов по очереди достаётся из буфера сцены. Значение Z и номер первого полигона запоминается (где именно, не уточняется) для каждого пикселя тайла, на который он попал. Берётся второй полигон из tile-buffer'а, точно также прогоняется по тайлу и, если где-то в пикселях тайла обнаруживается перекрытие, запоминается уже тот, который к нам ближе (решается по значению Z). В итоге выясняется, кто же на каких пикселях тайла сверху.

      image

      С прозрачностью несколько сложнее, но принцип тот же. Можно будет составить и запомнить (где-то_в_очередном_буфере) список прозрачных полигонов для каждого тайла и потом им воспользоваться. Или можно, например, пересортировать tile buffer нужным образом. А ещё можно почитать как PowerVR сортировал прозрачные пиксели на самом деле.

    3. Собственно Rendering
      Ну, теперь каждый пиксель наполняем красками. Схема называется Display List Rendering:

      image

      На этом этапе чип KYRO окрашивает для каждого тайла все пиксели, причём за один проход он успевает сделать одну линию пикселей, если верить презентации PowerVR.
      В результате таких вот нехитрых манипуляций получается 1 полноценный троллейбус кадр (которых в секунду неплохо бы сделать штук 60)




  • Вдобавок, PowerVR анонсируют возможность наложить сразу до 8 текстур на пиксель, объясняя это тем, что всё равно ведь всё невидимое отсеивается. Для 2001 года, конечно, нонсенс, так как не было ни единой игры, это дело умеющей, но зато в тестах можно было наконец увидеть честный EMBM. Действительно, какая разница, сколько текстур наложено, если видно будет только последний слой? Лукавят, конечно, но, возможно, что, благодаря TBDR, чип будет успевать всё просчитывать за приемлемое время?

  • В случае с анизотропной фильтрацией и OGSS super-sampling anti-aliasing 4x, которые чип также умеет, PowerVR выдвигает тот же аргумент. Красиво звучит, конечно, но ведь вычисления-то никуда не денешь. Если бы всё было так здорово, можно было бы сразу и 16xAF делать за те же деньги, нет?

  • Как, вам и этого мало? В таком случае, покопайтесь во внутренностях ещё немного и вы с интересом обнаружите, что KYRO II на самом деле поддерживает AGP4x и, при большом желании, вы можете поступить как те фанатичные личности, кому нужны обязательно шашечки, чтобы ехать. Кстати существует легенда, что и с вуду5 делали примерно точно так же.


Но вот вы ищите, ищите и… не находите. Всё так, увы и ах, Hardware Transform and Lighting (далее — HW T&L) здесь тоже нет. И вот почему (вырезка FAQ из интернет-архива powervr.com):
KYRO and T&L

“No hardware T&L? You must be joking!”

Indeed KYRO and KYRO II hardware do not support hardware T&L. While this choice might surprise there are good reasons behind this decision.

The truth is that most games available at the moment are fill-rate limited. As frame rate and resolution increase the graphic hardware reaches a point where it cannot transfer data as fast as the CPU would like to. This is the famous memory bandwidth problem. While the graphic hardware struggles, the CPU is idle waiting for the next frame to finish rendering. Why waste this precious CPU time when it could be used to handle transformations? As an example, consider a game at 1280x1024x32 resolution running at 60 frames per second. We’ll assume a depth complexity of 3 for this game, although this figure could easily be higher as games get more complicated. The fill-rate requirement for this game is 1280x1024x4x60x3 = 943 Mpixels/sec. This figure is at least twice the real fill-rate of other hardware, which means the game is fill-rated limited. Quake 3 Arena is fill-rate limited in this situation.

KYRO II was designed to be a mainstream part and including a T&L unit would not only cost more but also it would not improve performance in most cases (depending on CPUs and games). There will be a time when hardware T&L will significantly improve performance but it is still not now. If a game is already fill-rate limited, adding hardware T&L to it will not make it run faster!

Ну, то есть, если нвидия решила ускорить геометрическую часть 3D-пайплайна, то PowerVR ускорили остальное.

Реализация


Смею вас обрадовать: KYRO обучен Windows XP! (2001 год же, как никак, пора бы уже и Longhorn'у быть). Так что я в страхе бежал из лампового Миллениума! За что получил полноценную возможность OSD-мониторинга в играх через свеженький MSI Afterburner, а также человеческий интерфейс и стабильность ОС. Правда, из синего экрана больше не выйти, это, конечно, минус…

Тем не менее, встроенных в винду дров для KYRO не оказалось. Но зато у самих PowerVR было целых двое: последние и последние-бета (прям как у 3dfx, да...). Вот так выглядят последние:

  • На главной вкладке есть разгон :)



  • OpenGL с кренделями



    Кто не понел, F1




  • Direct3D с плюшками



    F1





По обилию плюшек и кренделей становится очевидно, что у TBDR не всё гладко с играми. Но разработчики дров уже позаботились о самых популярных. Да, именно так, в драйверах вы обязательно найдёте файл, предупреждающий виндоус, что приложению porsche.exe понадобится плюшка (и крендель!), а не то:



В последних-бета дровах таких приложений (и игр) было свыше 100…
… Но, к сожалению, в чудесном Arabian Nights правее сабли, кажется, должно быть меню:



Тут уже KYRO плюшками не задобришь; и ведь таких игр, возможно, было очень много? А всё почему: на заре подъёма DirectX как стандарта де-факто многие разрабы реализовывали самые сумасшедшие техники 3D-рендеринга самостоятельно. Ну и что, ведь это работало? Да, на IMR-картах, 3D-пайплайн которых не претерпевал изменения с самого своего рождения до 2000 года. А вот KYRO с его TBDR всё-таки лучше использовать в играх хотя бы эпохи DirectX6.

Помимо этого что ли лыжи не едут… Учитывая, что обе мои карты после ремонта, одна с прошитым биосом, а вторая с кастомным биосом 2004 года, вероятнее всё же второе. И тем не менее на обоих картах одинаковые проблемы: выставляешь одно разрешение, получаешь другое (причём какое именно — зависит от версии дров). Так, 1280x1024 выставить в 3D мне не удалось ни при каких условиях ни на одной из карт.

Прикладной уровень




ВНИМАНИЕ, Конфиг:

MB: Gigabyte 6vtxe (Apollo Pro133T chipset)
CPU: Pentium 3-S 1.4Ghz/512Kb/133FSB
RAM: 3x256Mb PC133
HDD: healthy UDMA-5 WD с приличным кэшем 2Мб и 5400RPM
WinXP SP3
Video: PowerVR KYRO II AGP

ВАЖНО:
  • Смотреть будем на Deus Ex, справедливости ради (ну чтобы можно было сравнить с предыдущими обозрёнными). Однако знайте, что, ввиду особенностей архитектуры чипа (TBDR), результаты, например, в Quake 3 будут совсем иными в плане производительности. Это в большей степени связано с особенностью игр и их движков: где-то огромный overdraw (2-3) и мультитекстуринг x4, а где-то просто огромная куча полигонов, но почти нет overdraw.
  • Настройки графики в игре: максимум красок, всякие там трилинейки и волюмтрик лайтнинги!
  • Настройки дров… чтож, будем экспериментировать!
  • Карту разгонять нет смысла, эти карты практически не разгоняются (опять же в силу своей архитектуры).


Итак, поехали уже быстрей по технологиям…

API

  • Direct3D. Как следует из спецификации, карта поддерживает DirectX7. На самом же деле, карта поддерживает только DirectX6, но, чтобы как-то оправдаться, разработчики дров запилили эмуляцию HW T&L (как в 3dfx, да...). И вот эта самая эмуляция появится только в последних-бета драйверах.



    Работает она точно также, как и у вуду5, поэтому подробно останавливаться на этом моменте я, пожалуй, не стану. Иногда помогает:



  • OpenGL. Тут всё предельно просто и надёжно: ICD. По сравнению с версиями для предыдущих чипов это — гигантский прорыв! Правда, вы можете случайно увидеть такое:



    Но в последних-бета дровах это поправили.

  • PowerSGL Direct. Если кто помнит такой,- был актуален для ранних чипов PowerVR, потому что:

    Infinite planes effects were not part of Open APIs and full capabilities of PowerVR can be exploited only through proprietary SGL. The API also supported data instancing to save memory by avoiding duplicates of materials, transformations and objects.

    vintage3d.org/pcx1.php

    С выходом KYRO явно потерял актуальность, вероятнее всего потому, что пресловутые Infinite planes не прижились, а реализация data instancing к этому времени появилась в OGL и/или в D3D.

    И всё же в дровах присутствует файл SGL2.dll (и с каждой версий допиливается!). Судя по тегам в файле, это PowerSGL Direct2 (кто думает, что осилит в чём разница: SDK для первого). Но, поскольку все известные мне игры под PowerSGL исконно ищут файл SGL.dll, логично было бы налить и отойти переименовать и посмотреть, что будет. На примере Unreal (версия с поддержкой SGL):



    Я даже честно пытался подсунуть играм SGL.dll (и сопутствующее файло) из дров для PowerVR Series 2 — приблизительно тот же результат. Выходит, PowerSGL Direct всё-таки выкинули, но зачем тогда допиливать PowerSGL Direct2? Как бы там ни было, хотите поиграть в красивый Tomb Raider — покупайте PCX2


Цветастость

Помимо полноценной поддержки 32-битного цвета и даже возможности работать в 24-битном…



… у KYRO есть одна классная архитектурная особенность: весь 3D-пайплайн всё время работает в 32-битном цвете. ВСЕГДА. Это означает две вещи:
  1. При переходе на 16-битный цвет быстрее не станет.
  2. Качество картинки в 16-битном цвете даже выше, чем у хвалёных 3dfx с их 22-битами. А всё потому, что по канонам TBDR преобразование кадра из 32-битного в 16-битный делается только один раз — на выходе. Тогда как у IMR в 16-битном режиме при каждом новом наложении, например, текстуры на текстуру происходит конвертация текстуры из 32 бит в 16 бит.

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





Разница в скорости (внизу белым текстом FPS), заметьте отсутствует, что редкость.

Самое интересное. Производительность

После всей этой лекции у простого человека возникает простой вопрос: «неужели всё это могло быть быстрее Жирафов с Радеонами?» На самом деле, если не вдаваться в подробности, всё зависило от случая :) Процитирую себя:
Ввиду особенностей архитектуры чипа (TBDR), результаты, например, в Quake 3 будут совсем иными в плане производительности. Это в большей степени связано с особенностью игр и их движков: где-то огромный overdraw (2-3) и мультитекстурингx4, а где-то просто огромная куча полигонов, но почти нет overdraw.


Full-Scene Anti-aliasing (FSAA)

Убирает лесенки на наклонных линиях. В этом чипе реализовано три типа FSAA методом OGSS:



Но и тут всё непросто. Как я ответственно заявил выше, 1280x1024px выставить на KYRO II не представляется возможным (по факту получается сильно больше). Сначала я решил, что, в таком случае, можно и довольствоваться разрешением 1280x960, благо 64 пикселя по высоте — не самая большая потеря.
Однако и тут меня ожидал сюрприз. Оказывается, в больших разрешениях по горизонтали (когда горизонтальное больше 1024px) опция FSAA 2x1 и 2x2 (это когда картинка увеличивается по горизонтали вдвое) не будет работать. Потому что чип не умеет работать с горизонтальными разрешениями больше 2048px.

Так что для начала посмотрим как вообще работает FSAA в разрешении 1024x768. На картинке смотреть на алиасинг (лесенку) у вертикальных ножек стульев на столе и на алиасинг горизонтальных линий у ламп (или у стола):









Возможно, некоторые особо внимательные личности заметили, что Горизонтальный FSAA убирает лесенки по вертикали, а не по горизонтали. И наоборот. Как мне ниже рассказали (благодарю, MrShoor): горизонтальный FSAA увеличивает разрешение изображения по горизонтали, а, значит, уберёт вертикальные лесенки.

Что можно заметить, так это то, что (что?) вопреки многим слухам FSAA нифига не бесплатная и с увеличением степени заметно снижается FPS. То есть, тут всё как всегда: Хотите? Платите! Это во-первых.

А во-вторых, на самом деле, качество этой самой FSAA, скажу я вам… как через грязное стекло. Это на шотах ещё ничего, а вы натяните на весь экран, сразу поймёте (сегодня у каждого броузера есть каретка). Вдобавок, как вы поняли, вы можете сглаживать или одну какую-то сторону или обе; по 2 сэмплам в обе стороны (как у 3dfx) гладить нельзя. Нет, всё-таки правду глаголят, OGSS далеко до RGSS, что применялась в вуду5.

Anisotropic Filtering (AF)

Это развитие трилинейки. Степень не выбирается, она просто есть :) Чтобы понять, что делает, смотрим на повторяющийся узор на левой стене и на то, как он хорошо виден с увеличением расстояния от камеры игрока (да, пример темноватый, придётся смотреть без освещения):





Кто хочет понять, как она (AF) это делает, читает здесь.

FSAA + AF

Ну и, конечно, нам с вами нужно понять, как же карта будет успевать за всем этим. А вот:

1024x768. Тут ещё можно делать полноценную FSAA, так сказать. Попробуем.









1280x960. Здесь уже мы можем делать FSAA только по вертикали.









Итого получается, что KYRO II не переносит AF + FSAA — смотреть слайдшоу никому не интересно. Ну а раз за качество FSAA можно поставить оценку «плохо», то предлагается на радостях повысить разрешение и забыть о ней навсегда. В высоком разрешении можно включить AF, но будет медленно. Так что, дамы и господа, в Deus Ex (и подобных играх) KYRO II как бы так ненавязчиво предлагал вам довольствоваться трилинейкой и ждать выхода следующего чипа с блоком HW T&L. Но его никто не дождался. Так закончился TBDR на PC.

Ну так вот, знаете...


Если отбросить саму архитектуру KYRO — для рядового школьника это была самая обыкновенная видеокарта, у которой не было каких-то там непонятных аппроксимаций, 22-битного цвета, запрещённых api и прочей лабуды, ради которой сегодня повод собрать старый компьютер. В KYRO всё было:
  1. Предельно просто: честный 32-битный цвет, полная поддержка DX6, эмуляция DX7.
  2. Предельно быстро: разгонять было нечего
  3. И предельно дёшево :)


За те деньги, что тогда просили за карты на KYRO II это была конфетка. Да, с кисло-сладкой начинкой, но всё же это было лучше, чем огромный ассортимент, представленный сейчас двумя известными фирмами.
Будет не лишним отметить, что судьба PowerVR в сегменте PC во многом похожа на судьбу 3dfx (можно даже вспомнить предсмертную покупку Gigapixel). Такие же сногсшибательные новаторства, те же проблемы и, как следствие, те же задержки выхода. В итоге уход с рынка и смерть очередного закрытого api (PowerSGL).

В общем и целом в итоге всё сводится к тому, что точно можно сказать две вещи:
  1. Всё новое — плохо закопанное старое.

    Казалось бы, что касается ранних подходов в вопросе оптимизаций видеочипов путём разработки собственного закрытого низкоуровневого api и заточке игр под эти api (если не поняли, перечитайте ещё разок) — сегодня это всё уже пыльная история (которую, кстати, поди раскопай!). А вот нифига! Вы посмотрите, какой там уже внушительный список игр!
  2. Будущее не предопределено!

    Во многом благодаря PowerVR в обозримом будущем мы смогли наблюдать интереснейшие вещи. Так, уже в 2007 году в свет вышел любимый Сталкер: Тень Чернобыля, движок которого использует технику под названием Deferred Shading. Нетрудно догадаться, что в основе лежат те же принципы экономии пропускной способности видеопамяти, что и у PowerVR. Но только программным путём с помощью шейдеров для IMR.


Благодарности


  • Кланяюсь двум инженерам из одной Питерской конторы, которые помогли деталями и даже их припаяли за меня! Без них обзоров вуду5 и кайро просто не было бы!

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

  • Открывателям горизонтов и срывателям покровов — комьюнити VOGONS. За кучу уникальных исследований и наработок!


...TBC...

Использованная литература
Кратко о PowerVR на VOGONS
Подробный обзор KYRO
Подробный обзор KYRO II

Устаревшая и свежая теории тайлового рендеринга PowerVR (причём ни в одной нет всей правды!)
Пруф заявлений от PowerVR (из архива).

Подробный туториал по графическому 3D-пайплайну.
Блог Kristof Beets'а, посвящённый архитектуре современных чипов PowerVR.
vintage3d.org — очень хороший сайт с обзорами очень раннего 3D

Комментарии (11)


  1. beeruser
    25.08.2015 02:06

    >>тайловый рендеринг, который так прогремел в 2001 году

    Вообще-то появился он в 1996г в ускорителе PowerVR-PCX1 от (тогда ещё) VideoLogic.
    У меня был вот такой девайс:
    ru.vgamuseum.ru/gpu/powervr/videologic-apocalypse-3d-powervr-pcx1


    1. Goblinit
      25.08.2015 02:08

      Вообще-то я этого и не отрицал. Вы точно дочитали до конца?


      1. beeruser
        25.08.2015 02:28
        +1

        Проглядел. Он у вас упомянут в середине.
        Я на нём (или это был PCX2?) Quake3 запускал через корявый враппер над OpenGL, который вызывал miniGL, который в свою очередь вызывал SGL.


        1. Goblinit
          25.08.2015 02:41

          Да, кажется, всё так и было. Подробные исследования кстати здесь.


          1. beeruser
            25.08.2015 03:09

            Там ещё нужно было альфаблендинг поправить, поэтому я свой враппер делал. Не припомню чтобы у меня куски уровня пропадали, да и fps играбельный был.


            1. Goblinit
              25.08.2015 03:26

              Судя по тому, что в том посте написано, вы не один такой были :)


  1. MrShoor
    26.08.2015 21:12
    +1

    Возможно, некоторые особо внимательные личности заметили, что Горизонтальный FSAA убирает лесенки по вертикали, а не по горизонтали. И наоборот.
    Все тут норм. Горизонтальный FSAA увеличивает разрешение изображения по горизонтали, а значит уберет вертикальные лесенки.
    Ну да, молодцы, но я точно не перепутал шоты, хотя FPS и доказывает обратное (на 1024x2 по горизонтали должно тратится больше FPS).
    Не должно. При увеличении картинки по любому из разрешений в 2 раза площадь тоже увеличивается в 2 раза. Должно быть примерно одинаковое количество fps.
    //зануда mode off

    А так спасибо за статью. Интересно было почитать, оказывается «тайловый» рендер был в железе еще в те в бородатые времена.


    1. Goblinit
      26.08.2015 21:14

      Чёрт, и вам спасибо. Вот честно, так лень было перечитывать тех. доки по FSAA, а вы два слова сказали и всё стало очевидно!

      Я вам больше скажу, тайловый рендеринг и сейчас процветает. Вы посмотрите Использованную литературу — там есть ссылки.


    1. MrShoor
      26.08.2015 21:40
      +1

      Во многом благодаря PowerVR в обозримом будущем мы смогли наблюдать интереснейшие вещи. Так, уже в 2007 году в свет вышел любимый Сталкер: Тень Чернобыля, движок которого использует технику под названием Deffered Shading. Нетрудно догадаться, что в основе лежат те же принципы экономии пропускной способности видеопамяти, что и у PowerVR
      Defered Shading на самом деле упирается как раз в пропускную способность видеопамяти. Если при обычном Forward рендеринге мы пишем только в color buffer и depth buffer и получаем сразу картинку, то в DS нам нужно отрисовать в diffuse, normal, depth. Потом еще срезолвить, а это значит прочитать из этих diffuse, normal, depth, и отрисорвать в color.
      Плюсы у DS в том, что мы отделяем геометрическую сложность сцены от освещенния. Иными словами если у нас тяжелое освещение — то при DS мы покрасим только те пиксели, которые реально видно на экране. При forward освещении мы будем освещать те пиксели, которые могут быть overdraw-нуты следующим объектом.
      DS был популярный, когда тяжелый свет (много источников, тяжелая модель освещения) GPU не успевал считать. Но сегодня производительность процессора растет быстрее пропускной способности памяти:
      GeForce 980: пропускная способность: 224 GB/s, теоретическая производительность: 4612 GFlops
      GeForce 8800 Ultra: пропускная способность: 103.7 GB/s, теоретическая производительность: 576 GFlops
      И смещение снова начинается в сторону Forward освещения. (это и Forward+ предложеный AMD, и Clustered Shading от Humus-а)


      1. Goblinit
        26.08.2015 22:25

        Вы знаете, я посмотрел про Forward и Clustered Shading. Чего-то там везде тайлы упоминаются, что наводит пещерного человека на мысль… сегодня что ли уже все поголовно тайловый рендеринг так или иначе используют?


        1. MrShoor
          26.08.2015 23:08
          +1

          Там тайлы создаются для источников света. Если в сцене 100500 источников света, дабы не лопатить все в for(i;i<100500;i++) надо как-то выбрать только те источники, которые действительно достают до данного пикселя. Для этого сначала информация о источниках складывается в тайлы, а после при непосредственном рендере побирается нужный тайл, и обрабатываются только те источники света, которые привязаны к этому тайлу.
          TBDR сейчас на мобилках вовсю используется: embedded-computing.com/articles/understand-the-mobile-graphics-processing-unit
          А еще в DX12 что-то типа этого притащили: msdn.microsoft.com/en-us/library/windows/desktop/dn903929(v=vs.85).aspx
          но в DX12 это скорее попытка OIT положить на графический конвеер потому что memory bandwidth оно не уменьшает.
          На десктопах TBDR скорее всего не взлетит (по крайней мере в ближайшем будущем), из-за обилия треугольников, всяких там тесселяций…