![](images/kyro/kyro_logo.gif)
В КАЧЕСТВЕ ПРЕДИСЛОВИЯ
Как и год назад на рынке 3D вновь разгораются очередные "баталии" между лидерами индустрии потребительской графики — "профессионалы", как всегда, остаются в стороне. Как и три года назад "битва" происходит между все теми же гигантами 3dfx и NVIDIA — мы помним своих героев. На каком то этапе присоединяются еще два участника, претендующих на свой "кусок пирога": ATI и Matrox. Эта ситуация представляет собой поезд, отъезжающий со станции: кто занял места в вагонах, кто успел при движении уцепиться за поручень или запрыгнуть на подножку, а кто и совсем не успел — наверняка каждый уже распределил все роли. Однако, как и в жизни, тут есть "пассажиры", которые всегда едут в вагоне, но про них просто "забыли" и не замечают, хотя сели все на одной и той же станции. По каким причинам не замечают таких пассажиров в реальной жизни: их множество, но нас интересует один конкретный — VideoLogic (ныне — Imagination Technologies). Как 3dfx и NVIDIA, эта компания начинала свой путь на рынке потребительской 3D-графики приблизительно в тоже самое время (конец 1995 — начало 1996). Каждая компания имеет собственный путь развития и VideoLogic здесь не исключение. Вкратце пройдемся по основным этапам истории развития продуктов этой компании и детально (на сколько это возможно) рассмотрим последнее слово компании — KYRO.
ПРОЦЕССОРНАЯ ЭВОЛЮЦИЯ: НЕМНОГО ИСТОРИИ
Собственно говоря, сама компания (тогда еще VideoLogic) изначально ориентировалась на разработки специально для игровых консолей и аркадных автоматов, но потом решила попробовать свои силы и в сфере РС — напоминает ситуацию с 3Dfx, неправда ли? Итак, первый продукт, адаптированный под РС-платформу, полученный в результате альянса NEC/VideoLogic назывался PowerVR PCX1. Этот чипсет базируется на технологии обработки бесконечных плоскостей (Infinity Planes), использующей некоторые особенности технологии Talisman, включая внутренний 24/32bit z-буфер и аппаратную поддержку цветового псевдосмешения. Технология бесконечных плоскостей, равно как и квадратичные патчи (Quadratic Patches, сплайны второго порядка) использующиеся в первом продукте NVidia — NV1, вопреки всем ожиданиям для ПК представляли только чисто теоретический интерес и получили воплощение лишь в консолях. Механизм Talisman составляет сцену, включающую образ с несколькими окнами активных приложений. Затем отдельные изображения "сшиваются", образовывая единую композицию. Вместо того, чтобы регенерировать весь кадр, изменяющийся при анимации, процессор использует его повторно. Если изменения от кадра к кадру невелики, рендеринг занимает доли секунды. Также использован дополнительный механизм (chunking) сегментации для экономного использования графической памяти, при котором изображение делится на фрагменты, сжимаемые и обрабатываемые по отдельности, что позволяет снизить требования к размеру памяти в 60 раз и осуществлять многократный рендеринг переотражений и теней в реальном времени. Однако в РСХ1 были положены лишь некоторые моменты данной технологии.
РСХ1 оптимизирован для работы в Direct3D и OpenGL через MCD, однако еще использует и собственный высокоуровневый объектно-ориентированный API — PowerSGL (как 3Dfx использует GLide). Этот интерфейс (своего рода "конек" логики) дает возможность прямого доступа ко всем аппаратным возможностям чипсета, что многократно повышает эффективность его использования. РСХ1 производит эффективную обработку полигонов, бесконечных плоскостей, смешивание многоугольников и выпуклых поверхностей. Реальные тени могут ассоциироваться с любыми объектами, имеющими разнообразную поверхность, и обновляться в каждом новом кадре. Скрытые и явные поверхности обрабатываются попиксельно, поэтому перспективная коррекция текстур не искажается. При поворотах затенение не изменяется, а прозрачность может быть применена ко всем объектам, многоугольникам или индивидуальным пикселям для создания таких эффектов, как прозрачная вода, чистое стекло, огонь, блестящая линза или реакция на излучение. Реалистичный логарифмический цветной туман также обрабатывается попиксельно.
Аппаратная конва PCX1 тоже достаточно оригинальна. Чипсет включает в себя два процессора, собранных в одном корпусе: процессор синтеза изображений ISP (Image Synthesis Processor), и процессор затенения и текстурирования TSP (Texture and Shading Processor). Микросхемы с модульной архитектурой (соединение нескольких различных по функциональным назначениям блоков-процессоров в одну микросхему) обеспечивают минимизацию использования памяти, отличаясь высокой степенью масштабируемости. Интерфейс чипсета дает возможность использовать 1, 2 или 4 ISP-процессора одновременно со средним объемом обрабатываемых пикселов 100-1000 при пиковом быстродействии до 257KTps (mip mapped, textured, smooth shaded) при одном ISP и 1028KTps (mip mapped, textured, smooth shaded) — при четырех. Так была заложена концепция SMP в потребительской 3D-графике, однако с одной оговоркой: реализация SMP в данном случае внутренняя, поскольку процессоры синтеза образа интегрированы в одну микросхему. Процессор ISP, содержащий 32 элемента, тактируется синхросигналом 66MHz и работает с точностью 32bit. Блок удаления скрытых поверхностей не нуждается во внешнем z-буфере, поскольку использует более оригинальный внутренний механизм отсеивания невидимых полигонов, речь о котором подробнее пойдет дальше. Процессор содержит 12КВ внутреннего кэша (однако есть возможность наращивания до 2МВ внешнего кэша), имеет расширяемую шину для многопроцессорной конфигурации и выполняет генерации реалистичных теней.
Процессор TSP также тактируется 66MHz-синхросигналом, выполняет вышеуказанные методы текстурирования, работает с размерами текстур от 32х32 до 256х256. Внешний SDRAM-интерфейс позволяет использовать от 4 до 16МВ текстурной памяти со скоростью обмена данными до 264MBps и 4КВ внутреннего кэша. Специализированные функции позволяют производить горизонтальное и вертикальное последовательное или одновременное вращение текстуры. Архитектура конвейера обработки оптимизирована для LPBO-операций (Low Page Break Overhead), представляющих собой механизм разбивки на части при переполнении страницы памяти, и содержит накопительный буфер, используемый для хранения глобальных 16-ти полупрозрачных слоев, создающих эффект блекнущей поверхности, передавая 16 уровней прозрачности на каждый пиксель текстуры. LPBO использует страничную адресацию памяти с целью быстрого доступа и экономии места, и если сцена не влезает в страницу, то она "разбивается" на части.
Помимо ISP и TSP, логический набор включает в себя еще и микросхему контроллера памяти — MC (Memory Controller), который поддерживает серии процессоров MIPS4300, MIPS4400 и более поздние. МС содержит внутренний тактовый генератор на 66MHz для синхронизации SDRAM-интерфейса, синхронизирующий системный контроллер шины PCI (вплоть до 66MHz) и устройство определения режима master/slave. Собственно говоря, МС и есть системный маршрутизатор данных, полностью совместимый с шиной PCI 2.1, использующий функцию захвата и глобального управления шиной. Я думаю, что у того, кто еще помнит те времена, в памяти еще надолго останется "первая ласточка" этой серии — VideoLogic Apocalypse 3D.
"Второе поколение" — логика PCX2 (кстати, имеющая уже кодовое название "Highlander") — объединяет в себе средства обработки 2D и 3D-графики, средства MPEG2 и аудиосредства. Как и PCX1, "Горец" использует аппаратный z-буфер не требующий внешней памяти, поддерживает архитектуру бесконечных плоскостей, основываясь все на той же Infinity Planes — компания понадеялась на то, что разработчики игр все же оценят по достоинству эту технологию, однако в очередной раз ошиблись.
Исключением стала лишь компания Kalisto, которая выпустила специально оптимизированную игру Nightmare Creatures сначала для консоли, а потом портировав ее на РС, сохранив при этом оригинальность идеи — использование Infinity Planes (на рынке специализированную версию этой игры достаточно трудно найти, однако D3D-верся свободно доступна). Кроме этой игры были еще до десятка различных игровых приложений, оптимизированных под PowerSGL, однако технологию Infinity Planes больше не вспоминали. Настоящим фурором стала поддержка API PowerSGL в игре Unreal. Напомню, что версия 1.00 этой игры изначально поддерживает Software Rendering, 3dfx GLide и VideoLogic PowerSGL. Именно тогда пользователи по-настоящему оценили возможности интерфейса, на который долгое время закрывали глаза: 32bit глубина цвета и особенности API PowerSGL обеспечивали настолько красочную картинку, что GLide просто мерк на этом фоне. Прямая поддержка PowerSGL сохранилась вплоть до Unreal Tournament, однако вопреки наличию драйверов в системном каталоге игры и установок в INI-файле, PowerSGL в списке поддерживаемых сертифицированных API отсутствует — факт необъяснимый, однако, как ни печально, имеющий место. Обратной стороной медали являлась чрезвычайно низкая производительность PCX2. Вся беда РСХ2, впрочем, как и РСХ1, была в его "жуткой" процессоронезависимости и, как следствие, чрезвычайно низкой масштабируемости — например, "Горца" может полностью загрузить какой-нибудь Pentium-166. С одной стороны это был значительный показатель сильнейшей оптимизации программно-аппаратной концепции — вспомните, что чипсет разрабатывался именно для консолей и игровых автоматов. С другой же стороны, чтобы ухватить "кусок пирога" и на рынке РС, требовалось в значительной степени увеличивать частоту функционирования логического обрамления и памяти — в те времена она еще не являлась узким местом акселераторов. Впрочем, сама архитектура х86 по-видимому тоже является камнем преткновения.
В РСХ2 модификации подвергся процессор TSP, который теперь поддерживает некоторые новые алгоритмы, среди которых экспоненциальный туман (Exponentional Fogging) с программируемым цветом. Кроме этого несколько повысились частоты функционирования ядра и памяти, а доработка контроллера памяти включает улучшение интерфейса "шинной стыковки" — появилась возможность совмещать интерфейсы, как это реализовано в Voodoo Rush. Ярчайшими представителями воплощения РСХ2 "в жизнь" являлись изделия VideoLogic Apocalypse 5D (тут и проявила себя "шинная адаптация" — в качестве GUI-процессора на этой карте выступает ET6000 от Tseng), специальная версия VideoLogic Apocalypse 3Dх и, конечно же незабываемый Matrox m3D. Однако индустрия РС не оценила все возможности ни старого ни нового чипсета — концепция воплощения SMP так и осталась не более, чем просто возможным интерфейсным расширением, технология бесконечных плоскостей "умерла", а PowerSGL уже не прельщал даже энтузиастов. Возможно, в силу этих и еще других причин компания "ушла на дно"…
После продолжительного молчания VideoLogic все в том же альянсе с NEC предложили новую разработку — PowerVR Series2 (http://ixbt.stack.net/video/pvr250_preview.html), единственным воплощением которого стала видеокарта Neon-250. По-видимому, понимая критичность ситуации, компания отказалась от использования технологии бесконечных плоскостей, погребенной безалаберными и незадачливыми программистами — так всегда заканчиваются передовые идеи и начинания. Однако обратная совместимость с родным PowerSGL осталась — VideoLogic не вдохнула в PowerSGL новую жизнь, а скорее просто дала еще один, возможно, что последний шанс. Компания не сообщала о каких-либо модификациях или изменениях в интерфейсе, однако его поддержка однозначно определяется наличием в спецификации. Теперь же альянс полностью делает упор на технологию TILES (дословно переводится как черепица или кафельная плитка), призванной полностью отказаться от внешнего Z-буфера и в значительной степени сократить требования к пропускной способности памяти. Таким образом, впервые появляется возможность сосредоточится на повышении эффективности использования памяти и реализовать полноэкранное сглаживание (FSAA в виде OGSS).
И вот, наконец, долгожданный миг для тех, кто не забывал об этом "тайном пассажире" и внимательно следил за его "эволюцией". Теперь уже Imagination Technologies совместно с новым партнером STMicroelectronics (ранее известной как SGS-Thomson, STM) предложили очередной свой продукт. Теперь это третье поколение, получившее весьма оригинальное имя — KYRO. Что же скрывается под этим именем? Что стало предметом такого продолжительного молчания компании? Итак, внимательно присмотримся к этой "темной лошадке".
БЕГЛЫЙ ВЗГЛЯД
KYRO (полное название — PowerVR Series3) — полностью 128bit 2D/3D акселератор "третьего поколения" семейства PowerVR, включающий в себя 2D/3D-ядро, 24bit palette RAMDAC, тактовый генератор синхросигналов, шину видеоввода и интерфейс для подключения цифровых мониторов. Корпус 400pin PBGA имеет габаритные размеры 27х27 mm, полностью отвечая требованиям BGA27, диктуемым в рамках JEDEC M0151. Разработка этого чипа делалась с упором на получение высокой производительности в Direct3D-приложениях, качественного воспроизведения и декодирования потокового видео. В принципе, общий интерфейс по сравнению с PVRS2 не притерпел серьезных изменений, поэтому вот вкратце, что из себя представляет новый чип:
![](images/kyro/kyro_scheme.jpg)
3D часть включает в себя такие аппаратные возможности, как:
- Гибко адаптирующийся DirectX7 формат вертексов, однако нет упоминания о поддержки DirectX8, (http://ixbt.stack.net/video/d3d8-early-faq.html). Поддержка DirectX8 на уровне драйверов гарантируется после официального выхода DirectX8 API;
- Полная поддержка OpenGL ICD;
- 8-слойное мультитекстурирование с уникальными особенностями, речь о которых пойдет ниже;
- Механизм полной подготовки треугольников и параметров текстурирования/затенения: удаление скрытых поверхностей, затенение и текстурирование, где все параметры сцены хранятся в локальной памяти, что снижает нагрузку на процессор и интерфейсную шину. Все эти операции выполняются на уровне "силикона" — внутри самого чипа;
- Механизм DLR (Display List Renderer) позволяет разбивать всю сцену на отдельные участки (тайлы или регионы, TILES), определяя перечень и последовательность производимых над этими регионами операций (тайловые приоритеты);
- RGB-затенение по методу Гуро и наложение эффекта зеркального отражения;
- Текстурную фильтрацию, включающую полную поддержку алгоритмов билинейной, трилинейной и анизотропной фильтраций;
- Цветовое псевдосмешение и текстурное альфа-смешение;
- Табличный и вертексный туманы;
- Текстурная компрессия;
- Рельефное текстурирование: Environmental Bump Mapping (EMBM), Embossed Bump Mapping и Perturbed UV Bump Mapping (aka Dot Product);
- Полноэкранное сглаживание (FSAA методом OGSS) по схеме х2 и х4 (http://ixbt.stack.net/video/fsaa-an-1.html).
128bit GUI акселерация (2D-часть) включает:
- трех-операндные ROPs;
- Аппаратное отсечение (Clipping);
- Цветовое расширение;
- Операции над битовыми блоками (BitBLT): прозрачность и растяжение;
- Оптимизацию конвейера, обеспечивающую защиту от "выпадения" операций с 24bit глубиной экрана;
- Все 2D операции выполняются аппаратно, включая моно цветовое расширение, прорисовка точек и линий.
Интерфейсная часть полностью поддерживает:
- Режимы AGP 1x, 2x и 4x с применением SBA для выполнения операций AGP-текстурирования. Поддержка режима AGP 4x обеспечивает 1.056GBps пиковый канал с возможностью хранения в накопительном буфере ("отстойнике") до 32 задержанных запросов. Кроме этого обеспечено полное соответствие с требованиями к системе, выдвигаемыми в рамках ACPI, согласно PCI PM;
- DMA Bus Mastering для разгрузки центрального процессора;
- Интерфейс цифрового выдеовывода: 12bit мультиплексированный цифровой интерфейс (цифровой порт 12bit DVA_D), интерфейс подключения стандартных LCD-устройств и цифровых TV-кодировщиков (интерфейс типа Conexant Bt868/869, Chrontel CH7003/7004 или цифровой трансмиттер, использующий интерфейс Silicon Image PanelLink Sil154), 24bit LCD режимы доступны вплоть до 1280х1024 при 60Hz кадровой синхронизации;
- Режимы цифрового порта Master/Slave. В режиме "Master" чип генерирует синхросигналы ЦАП (DAC clock), горизонтальной (HSYNC) и вертикальной (VSYNC) развертки. В режиме "Slave" поток получаемых данных синхронизируется если указанные ранее синхросигналы генерируются внешними цепями;
- Видеопорт для видеозахвата, TV-тюнера и видеоконференций (протокол Н.324). Совместимость с портом VBI поддерживает захват данных для пакетов Intercast, Closed Caption и TeleText;
- Все подмножества форматов PAL/NTSC видеовывода. Когда подключен ТВ-выход, цифровая панель автоматически отключается, но CRT-монитор в этот момент можно использовать в качестве "зеркала" с одинаковым разрешением.
- Требования спецификации РС'99;
- Прошивка BIOS полностью совместима с IBM VGA и соответствует требованиям, выдвигаемыми в рамках VBE 3.0, DPMS и DDC2Bi.
Возможности воспроизведения поточного видео и MPEG2 декодирование поддерживают:
- Полную аппаратную поддержку DVD;
- Механизм компенсации движения;
- Поддержку оверлеев 4:2:0;
- Цветовое смешение;
- Аппаратную интерполяцию по осям X и Y.
128bit интерфейс памяти поддерживает:
- Интерфейс SDRAM и SGRAM;
- Частоту синхронизации интерфейса "чип/память" 125MHz с пиковой полосой пропускания 2GBps;
- Общий объем поддерживаемой локальной памяти от 16 до 64 МВ;
- Гибкую конфигурацию микросхем памяти:
Объем микросхемы и тип памяти Число микросхем памяти Общий объем 16Mbit SDRAM (x16) 8 16MB 32Mbit SGRAM (x32) 4 16MB 32Mbit SGRAM (x32) 8 32MB 64Mbit SDRAM (x32) 4 32MB 64Mbit SDRAM (x32) 8 64MB 64Mbit SDRAM (x16) 8 64MB
Интегрированный 270MHz palette DAC содержит:
- Тактовый синтезатор частот для синхронизации внутренних цепей и реализации петли ФАПЧ;
- 32х32 аппаратный курсор;
- Возможность установки 1920х1280 в TrueColor при 75Hz кадровой синхронизации.
Драйверная поддержка предусматривает:
Win'95/DX7 | Win'98/DX7 | WinNT4.0/DX3 | Win2000/DX7 | DOS | |
---|---|---|---|---|---|
Display Drivers | Да | Да | Да | Да | Да |
DirectDraw HAL | Да (без VPE) | Да | Да | Да | |
Direct3D HAL | Да | Да | Да | ||
OpenGL ICD | Да | Да | Да | Да | |
VideoCapture/WDM | Да | Да | |||
DVD Playback | Да | Да | Да |
Как видно, просто выполняется "джентельменский минимум", который должен иметь каждый современный акселератор, плюс, естественно, некоторые свои особенности, речь о которых подробнее пойдет далее.
ОСНОВЫ ТАЙЛОВОЙ АРХИТЕКТУРЫ
Как известно, суть 3D-графики состоит в моделировании реальной сцены и "проецировании" результата на 2D-экран монитора. Вся сцена состоит из предметов, которые в свою очередь разбиваются на треугольники или полигоны, каждый из которых определяется собственными вертексами. Каждый вертекс имеет собственные свойства, в состав которых входят позиция в пространстве (по трем осям) и цвет. Каждый полигон, в отличие от вертексов, дополнительно имеет еще и глобальное свойство, называемое текстурой.
Для того, чтобы добиться эффекта перемещения предметов в сцене необходимо, чтобы картинка постоянно менялась, отображая конечный результат на экране (Viewport). В самом простом случае вся процедура создания каждой новой сцены сопровождается тремя основными ступенями: преобразование координат (трансформация) и установка освещения, удаление полигонов не входящих в конечную сцену, текстурирование и затенение.
![](images/kyro/tbr1.gif)
Трансформация координат подразумевает изменение перспективы отображаемой сцены относительно точки наблюдения. Каждое изменение может воздействовать на положение каждого или всех вертексов внутри сцены. Установка освещения подразумевает необходимые вычисления в изменении освещения объектов сцены, что приводит к изменению цвета каждого вертекса.
Удаление полигонов не входящих в конечную сцену (или частей объектов) делает невидимыми те из них, которые не будут видимы пользователю.
И, наконец, операции текстурирования и затенения определяют цвет каждого пикселя в сцене, принимая во внимание основной цвет полигона и накладываемой на него текстуры. Применительно к технологии текстурирования, каждый пиксель требует несколько текселей (подходящие пиксели от текстурной карты).
Общая (традиционная) концепция 3D рендеринга сводится к тому, что каждый полигон проходит обработку через 3D-конвейер в очереди. Этот прямой режим 3D-обработки (Immediate Mode) подразумевает, что аппаратные средства не знают какая часть сцены завершена до тех пор, пока самый последний полигон этой сцены не будет обработан. Используя технологию Z-буферизирования, система, базирующаяся на общей концепции, может хранить информацию о дальности нахождения того или иного пикселя от точки наблюдения в специально отведенном участке памяти — Z-буфере. После операции текстурирования и затенения каждый пиксель каждого полигона сравнивается со значением глубины сцены, хранящейся в Z-буфере для определения какой из пикселей в сцене лежит глубже, и если это значение не соответствует вновь полученному пикселю (скажем, получившемуся в результате смешения с предыдущим), то значение глубины обновляются. В течении этого процесса многие пиксели подвергаются текстурированию, затенению и прорисовке для того, чтобы в последствии перерисоваться в сцене. Так, разрядность Z-буфера зависит от требуемой точности цветопередачи и может иметь значения, соответствующие глубине цвета устанавливаемого экранного разрешения (16, 24 или 32 bpp).
![](images/kyro/tbr2.gif)
Концепция, предлагаемая технологией PowerVR, алгоритмически отличается от рассмотренной выше схемы, предоставляя возможность исключить излишние расчеты и сократить до минимума необходимые обращения к памяти, многократно повысив эффективность работы графического процессора.
Как замечалось ранее, PowerVR базируется на механизме DLR, который объединяет группы полигонов вместе в Display List (некое подобие упорядоченного "списка" по свойствам) перед началом операций аппаратной обработки. В этом и заключается фундаментальное отличие от общей концепции — разбивка сцены на маленькие регионы (тайлы), каждый из которых обрабатывается отдельно, руководствуясь четырьмя основными моментами. Рассмотрим их.
Поскольку каждый регион представляется маленьким подмножеством полной сцены, PowerVR может осуществлять ключевые операции внутри чипа без частых, как это реализовано в общепринятой схеме, обращений к памяти. Удаление скрытых поверхностей (Z-буферизация), равно как и операции обработки пикселей и смешение, реализуемые в обычной схеме, в PowerVR исполняются в специально отведенном месте внутри самого чипа, именуемом тайловым кадровым буфером (Frame Buffer Tile), который является ничем иным, как внутрикристальным кэшем. Это говорит о том, что большинство обращений к памяти, принятые в общей концепции 3D-рендеринга, в новой схеме не нужны. Все процессы внутри чипа выполняются при 24bit глубине представления цвета и пиксельной точности на полной частоте обращений, без задержек, которые требуются для доступа во внешние Z-буфер или фрейм-буфер и тормозят систему с традиционной архитектурой.
![](images/kyro/tbr3.gif)
Следующим моментом является операция отсроченного текстурирования (Deferred Texturing) — в системах, базирующихся на технологии PowerVR, удаление скрытых поверхностей заканчивает первую фазу конвейеризации перед текстурированием и затенением. Данный механизм дает преимущество только в случае, если видимые пиксели полностью "прорисованы" в памяти (наложена текстура и затенение), исключая такие моменты, как основные операции с текстурами и их доставка из памяти. Иными словами, "холостые" (промежуточные) пикселы просто игнорируются, а текстурируются только финальные (выводимые на экран) — при этом отпадает необходимость постоянных "внешних" обращений к памяти, что снимает нагрузку с шины памяти.
Третьей ступенью является достижение требуемой точности и качества изображения. Поскольку такие операции, как Z-буферизация и пиксельное смешение полностью выполняются внутри самого чипа встала задача сосредоточить внимание на повышении точности и качества без падения производительности. Как уже было ранее отмечено, PowerVR имеет способность выполнять операции цветового смешения пикселей с 32bit точностью — независимо от количества прозрачных слоев или глубины фрейм-буфера в результате получается высококачественная картинка без существенного падения производительности. Детально различия в реализации технологии 32bit цветового смешения между традиционной схемой и PowerVR будут рассмотрены ниже.
![](images/kyro/tbr4.gif)
И, наконец, масштабируемость может существенно (можно сказать, что линейно) увеличить производительность, поскольку данная технология "рассекает" сцену на тайлы, которые обрабатываются независимо друга, что дает возможность очень и очень эффективно распараллелить процесс обработки за счет простого увеличения элементов графического процессора, работающих с тайлами.
ПОЧЕМУ ИМЕННО ТАЙЛЫ?
Ответ на этот вопрос кроется в таком интересным моменте, как эффективная пропускная способность памяти. Теперь уже ясно, что нагрузка на память при использовании тайловой архитектуры снижается в значительной степени. Сейчас подсистема памяти является узким местом в графике, которое сильно сдерживает общую производительность. Технологические и маркетинговые предложения только обостряют ситуацию:
- Увеличение объема памяти позволяет снять часть нагрузки, которая ложится на интерфейсную шину. Так, пропускную способность памяти можно поднять двумя способами: увеличением ширины шины и частоты ее функционирования. Если проследить историю развития в этом направлении, то можно заметить, что за несколько лет произошла миграция от 32bit одинарной "плотности" (Single Data Rate) до 128bit двойной "плотности" (Double Data Rate). Однако с этим встают проблемы другого рода. Например, нельзя увеличивать одновременно частоту и ширину шины, поскольку очень сильно возрастает шумовой фон и общий уровень электромагнитной интерференции (ЭМИ). Также увеличение емкости памяти может быть не востребованной, кроме того этот момент отрицательно сказывается на конечной стоимости изделия. И, в конечном итоге, количество используемых микросхем памяти увеличивает количество интерфейсных выводов у графического чипа, что отрицательно сказывается на влиянии ЭМИ, помехозащищенности и цене.
- Для систем нижнего ценового диапазона, где объем памяти является "больным" местом, использование унифицированной памяти (Unified Memory) является разумным выходом. Однако, эта операция требует использования совместных с процессором ресурсов (как то Shared Memory), что в немалой степени нагружает системную шину.
- Новое веяние в потребительской 3D-графики состоит в интеграции блока преобразования координат и установки освещения (T&L) внутрь графического процессора и добавило проблем, поскольку блок преобразований, интегрированный в графический контроллер, требует часть полосы пропускания локальной видеопамяти (и довольно значительной).
- Новые "веяния", такие как увеличение разрешающей способности экрана, поддержка телевизионного качества высокой четкости (HDTV) дополнительно увеличивают нагрузку на пропускную способность памяти.
Как известно, текстурирование — самая ресурсоемкая операция в плане использования пропускной способности канала памяти. Отсроченное текстурирование, которое применяется PowerVR только к пикселам, находящимся в видимой области, использует только небольшую часть пропускной способности, требуемую для традиционного процесса текстурирования. Оставшуюся значительную часть ресурсов можно использовать для повышения реализма 3D моделей, например, создание реалистичной окружающей среды с гораздо улучшенной свободой перемещения по открытым пространствам. В традиционной архитектуре рендеринга подобное усиление реализма неизбежно влечет за собой увеличение сложности сцены (Scene Complexity) и количества использующихся полигонов и, как следствие, увеличение коэффициента глубины сложности (Depth Complexity, иначе называемом еще Overdraw — коэффициент, показывающий среднее число перекрытий в сцене или сколько раз пиксель перерисовывается пока не будет получен результирующий, который и выводится на экран). Еще недавно этот параметр в играх колебался от 1.2 до 1.5, однако в настоящее время он составляет 2-3 и более. Увеличение же этого коэффициента до средней отметки в 4-5 позволит игровым приложениям выглядеть более реалистично, но для этого необходимо значительно увеличить аппаратную производительность графического контролера. Так, например, использование аппаратного T&L может поднять планку сложности, генерируя огромное количество полигонов, и тем самым снимая ограничение самого приложения в параметре Overdraw. В традиционной архитектуре рендеринга глубина сложности характеризует число впустую прорисованных пикселей с текстурой (Pixel Fall), которые в последующем будут перерисованы. В PowerVR этот параметр всегда равен нулю, благодаря применению отсроченного текстурирования.
Использование полосы пропускания памяти в традиционной архитектуре сводится к распределению на нужды фрейм-буфера, Z-буфера и текстур. Увеличению разрешающей способности, цветового насыщения, глубины точности и текстурного пространства не удовлетворяют нынешние возможности подсистемы памяти, а тем более в будущем. Например, устройство, поддерживающее разрешение до 1920х1440 требует 1920х1440х2х4 байт для двойного буферизирования фрейм-буфера, 1920х1440х4 байт для Z-буфера и еще текстурная память — итого, около 32МВ памяти плюс память под текстуры. В случае использования тайлов память используется только для текстурного кэша — экономия и эффективность использования более чем очевидны.
Рассмотрим как сильно загружается канал памяти при увеличении разрешающей способности и других особенностях применительно к традиционной архитектуре в сравнении с тайловой.
![](images/kyro/comparision.gif)
Здесь использовались такие общие параметры, как глубина сцены — 4, 8-сэмпловая анизотропная текстурная фильтрация, двойное текстурирование на один пиксель, частота вертикальной синхронизации — 72Hz, кэширование текстурных сэмплов для уменьшения коэффициента передаваемых по шине памяти текстур до 1.5. Видно, что технология PowerVR загружает полосу памяти в разы меньше, чем традиционная архитектура.
![](images/kyro/compar_calc.gif)
Теперь перечислим некоторые ключевые моменты, которые позволяют рассматривать тайловую архитектуру, как реальную альтернативу традиционным методам 3D-рендеринга.
Удаление скрытых поверхностей. В традиционной схеме глубина Z-буфера "намертво" связана с глубиной установленного цвета дисплея — если установлена 16bit цветопередача, то Z-буфер будет работать только с такой глубиной цвета, что отрицательно сказывается на качестве изображения. В PowerVR же отсечение скрытых поверхностей (culling) происходит непосредственно в чипе, всегда сопровождаясь полной 32bit точностью независимо от установленной глубины цветопередачи экрана.
Операции шаблонирования. В большинстве своем все традиционные системы для этого используют только специальный буфер шаблонов, когда происходит 32bit рендеринг. Вопреки этому, PowerVR буфер шаблонов находится в "силиконе" и операции шаблонирования выполняются согласно устанавливаемого режима.
Операции смешения. В традиционной архитектуре полученные полигоны после пересылки записываются в память по окончании обработки. Если же последующий полигон смешивается с тем, который уже обработан (например, для создания эффекта взрыва) предыдущие должны считаться обратно, смешаться и результирующее значение перезаписывается обратно в память. Если не говорить о очень большой нагрузке на шину памяти, это очень сильно влияет на качество отображаемой картинки в худшую сторону, особенно когда при 16bit рендеринге каждый полигон "внутренне" обрабатывается с 32bit точностью, а потом происходит 16bit дизеринг (растрирование). Затем полученные данные записываются во фрейм-буфер, а затем считываются обратно для того, чтобы применить это в последующих операциях смешения. Подобная деградация изображения происходит, когда, скажем, с копии видеокассеты делается еще одна копия. Механизм PowerVR ITC (Internal True Color), который детально рассмотрим ниже, производит операции смешения каждого пикселя для каждого тайла в полных 32bpp еще до того, как может возникнуть одинарная ошибка диффузии дизеринга при точности 16bpp при записи во фрейм-буфер. Напротив, качество изображения, получаемого при использовании технологии PowerVR при точности 16bpp значительно превосходит многие системы, которые работают с 32bpp глубиной цвета.
Эффективное использование памяти. Поскольку тайловая архитектура в этом вопросе сильно отличается от традиционной, то можно довольно эффективно использовать унифицированный кадровый буфер (UMA), где общая полоса пропускания шины памяти делится с процессором — идеальная схема для маловыводных и энергетически малопотребляемых применений.
Маштабирование. Тайловая архитектура идеально подходит для распараллеливания процессов обработки и создания SMP. Ситуацию "усугубляет" еще тот факт, что Z-буфер, смешение и буфер шаблонов реализованы аппаратно, непосредственно в чипе, поэтому все операции делаются на уровне "силикона" без какого-либо ожидания поступления данных из памяти. Это позволяет в некоторой степени не рассматривать память, как узкое место применительно к системам, базирующимся на тайлах.
ITC: "ВНУТРЕННИЙ РЕАЛЬНЫЙ ЦВЕТ"
Сейчас многие игроки не запускают, ставшую довольно популярной, игру Quake3 в 32bit режиме, прикрываясь тем, что в 16bit она выглядит не хуже. Однако в действительности проблема заключается в значительном падении производительности и на высоких разрешениях ставит обладателя монитора с большой диагональю перед вопросом: "Что лучше принести в жертву — разрешающую способность или глубину цвета?". Ответ неоднозначен и, по-видимому, требует компромисса...
Но не с PowerVR. Когда выполняются операции множественного смешения в 3D-сцене, точность цветопередачи в результирующем "смешанном" пикселе напрямую зависит от точности фрейм-буфера. При использовании 16bit кадрового буфера наблюдается так называемый бандинг (Banding) — эффект совместного накопления ошибок при произведении операций смешения. Проще говоря — это возникновение эффекта полосатости изображения в результате ошибок при операциях смешения. Дизеринг в состоянии решить эту проблему, однако может возникать эффект зернистости (Grainy) при отображении сцены (на экране этот эффект проявляется в виде светлых или даже очень ярких пятен). Технология PowerVR позволяет полностью удалить все эффекты искажения картинки.
Пиксельное смешение, например в Direct3D, является результатом использования режимов смешения источника (SOURCE) и предназначения (DESTINATION). Так, смешение примитива с задним фоном достигается путем использования установки режима D3DRENDERSTATE_ALPHABLENDENABLE. Результирующий цвет после операции смешения между пикселами примитива (SOURCE) и пикселами кадрового буфера (DESTINATION) характеризуется как COLOURFinal = COLOURSource * SCRBLEND + COLOURDestination * DESTBLEND.
На протяжении традиционного процесса рендеринга данные удерживаются в конвейере с точностью 32bit, и тем не менее некоторые пиксели полигона после окончания рендеринга сразу посылаются для смешения с данными фрейм-буфера. Если при этом буфер кадров имеет глубину 16bit, то понятно, что данные "усекаются". В дополнение к этому, если предназначение смешения использует 16bit данные, то они считываются из фрейм-буфера и используются. Эти потери данных вполне приемлемы, если используются несколько слоев или операций смешения.
![](images/kyro/trad_fb_acc.gif)
Данная схема традиционного доступа к кадровому буферу показывает процесс полного трехслойного смешения при использовании традиционного 16bit фрейм-буфера. Каждый результат операции смешения "усекается" до используемой точности фрейм-буфера и, как следствие, теряется часть точности на каждой стадии смешения. В зависимости от использования количества и типов режимов смешения (мультипликативное смешение вводит больше ошибок, чем другие типы) аккумулятивные (накапливаемые) ошибки могут привести к бандингу, так как цвет слоев должен быть более чистым, чем видимый.
![](images/kyro/16bit-band.gif)
Дизеринг же довольно часто используют, как средство, скрывающие возникающие визуальные артефакты. Данный метод позволяет аппроксимировать используемый цвет рядом с другими использующимися цветами, чтобы равномерно распределить ошибки между ними и "сгладить" картинку. Растрирование часто проявляет себя как эффект шероховатости (точнее — "пятнистости") из-за того, что формируется из пикселей различной цветовой интенсивностью, вместо того, чтобы использовать одну интенсивность для всего цветового пространства. Не смотря на то, что сам дизеринг неплохо смотрится при приемлемом разрешении на значительном расстоянии от экрана, вблизи этот эффект дает не очень качественную картинку.
![](images/kyro/16bit_dithering.gif)
Эффекты многократного смешения (мультитекстурирование, взрывы, карты освещения и т.д.) становятся все более популярны в новых играх, и геймеры стараются все чаще использовать 32bit кадровый буфер для улучшения качества изображения. Как ни печально, это приводит к значительному понижению производительности, зато картинка выглядит очень хорошо — и опять компромиссы.
![](images/kyro/32bit.gif)
Технология PowerVR ITC подразумевает выполнение абсолютно всех пиксельных операций именно внутри чипа (как говорилось ранее — на уровне силикона), что дает возможность рендеринга исключительно в труколор с получением высококачественного изображения независимо от количества используемых слоев или точности кадрового буфера.
Данная технология позволяет делать усечение растрированных данных всего один раз на финальной стадии перед отправкой в кадровый буфер. А поскольку все операции производятся с 32bit точностью, то конечный результат выглядит аналогично традиционному рендерингу при использовании 32bit фрейм-буфера. Этот прием позволяет использовать 16bit кадровый буфер, сохраняя при этом отличное качество, однако при желании можно установить и 32bit глубину цвета.
![](images/kyro/powervr_fb_acc.gif)
Эта схема доступа к фрейм-буферу PowerVR показывает процесс полного трехслойного смешения при использовании 16bit буфера кадров. Как говорилось ранее, потери качества изображения ничтожно малы.
![](images/kyro/16bit_itc.gif)
Итак еще раз вкратце рассмотрим два основных преимущества выполнения всего процесса рендеринга внутри чипа. Это, во-первых, улучшение качества, которое дает заметный выигрыш в этом плане по сравнению с традиционными схемами, используя фирменную технологию ITC. Во-вторых, это улучшение производительности, что, однако, является относительным понятием. Поскольку тайловые операции, выполняемые в "силиконе", требуют всего-навсего одно обращение к фрейм-буферу, то понятно, что огромная часть полосы пропускания памяти при этом экономится и остальную часть ресурсов можно отдать под требования современных игровых приложений, использующих софистику и большое количество полигонов.
РЕЛЬЕФНОЕ ТЕКСТУРИРОВАНИЕ
Плоские текстуры — еще один недостаток в некоторых играх, навевающий скуку. Трава, кирпичная стена, вода, вооружение, всевозможнейшие покрытия и т.д. — какая разница какой уровень их детализации, если эффект зернистости (Grainy) все равно "возьмет свое". Этот момент заставляет разработчиков искать новые пути решения. Рельефное текстурирование (Bump Mapping) — это технология "отзеркаливания" текстуры посредством наложения карты освещенности. KYRO может аппаратно выполнять эту операцию и делает настолько детализированной и реалистичной сцену, насколько это возможно.
Оригинальное название (Perturbed UV Bump Mapping — рельефное текстурирование на основе UV выпуклостей) говорит о некоторой индивидуальности данной технологии, потому как сама концепция рельефного текстурирования (http://ixbt.stack.net/video/d3d8-early-faq.html) подразумевает несколько подходов. В обиходе это часто называют Perturbed Environment Bump Mapping, однако принято понятие Dot Product, потому как часто этот эффект моделируется на основе отражения окружающей среды. Основное отличие состоит в способности применять это к каждому пикселю, что говорит о возможности заметного улучшения детализации больших полигонов.
Ключевой особенностью использования данной технологии является само понимание какие визуальные эффекты с ее помощью можно реализовать. Существует множество вариантов объединения значений и слоев для создания этого эффекта. Bump Mapping основывается на использовании формата карты неровности текстуры. Выпуклая текстура (Bump Texture) — это специальная текстура, которая отображает текстурные координаты, применяемые для карты отражения. Используя трехслойное мультитекстурирование, к базовой текстуре применяется рельефная карта, которая изменяет карту отражения воздействуя на исходную текстуру.
![](images/kyro/directx_bm.gif)
Существует несколько рельефных форматов. KYRO поддерживает BUMP UV88 и BUMP UVL556. Первый подразумевает, что пертрубации U и V кодируются по 8 бит каждая, в то время как второй формат кодирует по 5 бит каждую и еще дополнительно 6 бит для значения LUMINANCE.
Perturbed UV Bump Mapping работает, основываясь на идее представления карты освещения, примененной к плоской поверхности. Это выглядит как яркое пятно в центре с плавными переходами до черноты по краям. Для пикселов, прямо отражающихся в это пятно, значения U и V передаются для центра изображения. Полученная рельефная поверхность отличается от основной значениями U/V пертрубаций.
![](images/kyro/perturb_uv_lm.gif)
Также существуют и другие способы создания рельефного тексурирования, реализуемые аппаратно и различающиеся величиной падения общей производительности и качеством получаемого изображения. Нет смысла говорить о них, поскольку они не реализованы аппаратно в KYRO. Ограничимся только их перечислением: DOT3 Bump Mapping и Perturbed Normal Bump Mapping. Зато поддерживаемый метод Perturbed UV Bump Mapping содержит в себе очень много параметров, которые еще можно комбинировать, добиваясь таким образом всевозможных эффектов. Например, ниже показаны несколько различных эффектов, созданные комбинированием и варьированием режимов смешения, интенсивности, карты отражения и рельефных карт.
![](images/kyro/effects.gif)
Итак, совместное использование различных эффектов в одной сцене может давать поразительные результаты. Например, объединение эффектов резины (для покрышки), металла (для обода) и блеска (для булыжника) может значительно повысить реалистичность изображения.
![](images/kyro/bm_results.gif)
Конечно, данный метод рельефного текстурирования не в состоянии реализовать такие эффекты, как реальное отражение в водной ряби, но может быть применен к любого рода поверхности.
ВОСЬМИСЛОЙНОЕ МУЛЬТИТЕКСТУРИРОВАНИЕ
В погоне за увеличением реалистичности изображения в современных играх разработчики приложений вводят многократные текстурные слои, которые применяются для улучшения детализации заднего плана, реалистичности освещенных моделей и создания более правдоподобной окружающей среды. Но проблема состоит в том как реализовать все эти прелести, не потеряв при этом значительную часть производительности, сохранив ее на достаточно высоком уровне. Итак рассмотрим решение этого вопроса со стороны PowerVR в сравнении с традиционными подходами аппаратного рендеринга.
Само понятие мультитекстурирование, как известно, определяет совместную комбинацию нескольких самых различных текстур при помощи определенного набора операций для получения уникального результата. Например, карта освещения может быть применена к текстуре (базовой карте), чтобы сделать ее более реалистичной. Кроме карты освещения можно применять великое множество карт: затенения, рельефа, исключения, тумана, и т.д.
![](images/kyro/multitextur.gif)
Традиционные аппаратные средства (Voodoo3, GeForce 256 и т.д.) часто включают два параллельных текстурных конвейера, которые предусмотрены их архитектурой, для наложения двух пикселей за один такт. Это ограничение дает возможность производить только две стадии текстурирования. Иными словами, только две текстуры могут быть объединены вместе, чтобы создать текстуру, которая впоследствии накладывается на примитив. В результате ограничений, накладываемых необходимостью хранить данные для поддержки более, чем двух текстурных слоев, традиционные системы рендеринга должны содержать дополнительные конвейеры, число которых будет прямо пропорционально увеличению текстурных слоев. Такого рода решения требуют модернизации в схемотехнике внутренних логических вентилей, что, в свою очередь, непропорционально увеличивает сложность и стоимость конечного продукта.
![](images/kyro/tradit_mt.gif)
В случае, если аппаратная часть не поддерживает требуемое количество стадий текстурирования, тогда только один выход — реализация многопроходного текстурирования (Multi-Pass Texturing), которое может "запутать" пересылку точных примитивов, смешав их с задним планом. Понятно, что кроме этого теряется значительная часть производительности. Кроме того, этот метод обладает рядом недостатков по сравнению с реальным мультитекстурированием.
Архитектура PowerVR в состоянии поддерживать бесконечное количество текстурных слоев, однако восьмислойное ограничение диктуется со стороны Direct3D API. Из-за исключительной организации чипа, каждый регион содержит в себе мультитекстурированный примитив, хранящий информацию о прошедших им текстурных стадиях в специально отведенной области памяти, называемой локальным тайловым буфером (Local Tile Buffer), что устраняет необходимость в независимых конвейерах. В свою очередь, каждая текстурная стадия повторяется до тех пор, пока не будет достигнут конечный результат.
![](images/kyro/powervr_mt.gif)
Какая же польза от такой схемы мультитекстурирования? Так, в любой сцене, при использовании традиционных аппаратных средств, если желаемое число текстурных слоев превышает количество поддерживаемых аппаратно, то, понятно, что включается многопроходное текстурирование. Например, если для рендеринга какого-либо примитива необходимо применить пятислойное текстурирование, а аппаратура поддерживает только два, то остальные три будут выполняться при помощи многопроходного текстурирования. В тайловой же архитектуре, даже при наличии ограничения в восемь текстурных слоев при мультитекстурировании, для подобной операции этого хватит, что называется, с головой. Еще раз кратко пройдемся по основным моментам преимущества PowerVR восьмислойного текстурирования по сравнению с Multi-Pass Texturing.
Увеличение производительности при уменьшении количества задействованных данных. Многопроходные примитивы требуют, чтобы данные полигона были посланы в аппаратный блок несколько раз. Мультитекстурированные примитивы только увеличивают запросы данных сверх тех, которые посылаются. Не трудно догадаться, что количество обрабатываемых данных — очень важный момент, поскольку это дополнительная нагрузка на процессор, память и шину. А когда полоса пропускания еще и ограничена, тогда разница в производительности (читай — увеличение/падение) прямо пропорциональна разнице в размере обрабатываемых данных.
Увеличение производительности при уменьшении количества доступов к Z- и фрейм-буферу. Как говорилось ранее, многопроходное текстурирование "запутывает" смешение текущего примитива с предыдущим, содержащимся в буфере кадров и Z-буфере. Поэтому необходим новый цикл чтения-записи этих буферов, что уменьшает производительность и снижает величину заполнения (Fill Rate).
Улучшение качества при использовании ITC. Как известно, разрядность кадрового буфера оказывает непосредственное влияние на все многопроходные операции смешения. Когда используется 16bit фрейм-буфер, точность цветопередачи ухудшается с каждым проходом смешения. Используя архитектуру KYRO, на протяжении всего конвейера идет работа только с 32bit точностью и только финальное 32bit значение конвертируется (в данном случае "усекается") до 16bit, при необходимости.
Специальные эффекты для создания прозрачности. Если прозрачная текстура является частью стадии мультитекстурирования и требуется целевое смешение, то становится невозможным эмуляция результирующей текстуры многопроходным методом, если только формат кадрового буфера не содержит альфа-канал (типа 8888).
Увеличение производительности за счет не использования дополнительного слоя при реализации тумана. При многопроходном мультитекстурировании вертексный туман может быть использован по нормали в мультитекстурированных вертексных данных (значения прозрачности зеркальной поверхности), где это необходимо использовать другому прозрачному слою. Значения тумана используются в каждом примитиве, где полигон состоит из многопроходных примитивов. Результатом является реализации неправильного тумана, выходом является создание реализация тумана как независимого слоя.
POWERVR… POWERSGL… POWERED BY IMAGINATION… KYRO POWERRR
Компания, однако, не закрывает глаза на такие очевидные "полезности", как блок T&L, что не замедлит сказаться в будущих разработках — уже к концу года она намеривается интегрировать "геометрию" в силикон. Таким образом может получиться довольно сильный продукт, который перевернет общую концепцию архитектуры 3D-чипов. В скором времени, надеюсь мы увидим и даже сможем приобрести эти продукты, если они получат у нас распространение. К сожалению о результатах производительности сейчас объективно сказать очень сложно, но… не отходите далеко!
Вообще, тайловую архитектуру нельзя рассматривать, как панацею от всех "болезней" традиционной архитектуры рендеринга — довольно большая часть других узких мест осталась "за кадром"… Но тот факт, что другие компании уже начали разработку новых чипов, базирующихся на тайловой архитектуре говорит о ее прогрессивности, как архитектуры массового применения в ближайшем будущем. Совершенно точно ясно одно: даже при небольших частотах функционирования графического ядра и памяти (110-125 MHz) производительность KYRO находится на уровне современных монстров 3D-графики, что недвусмысленно намекает именно на коренной архитектурный перелом — область, где частоты перестают играть решающую роль (не забывайте, что интерфейс памяти KYRO рассчитан только на SDR SDRAM/SGRAM). Использование такой недорогой памяти в совокупности с используемыми прогрессивной архитектурой рендеринга и нововведениями позволяют занять конечному продукту более чем достойное место в золотой нише "цена/производительность/качество".
Надо отдать должное компании, которая не пошла по общепринятому принципу построения графических контроллеров, а самостоятельно нашла совершенно иной, может даже футуристический, путь для преодоления установленных барьеров и добиться высокого качества конечного изображения — продукт, в корне изменяющий устоявшуюся традиционную концепцию построения графических чипов. Возможно, что ограниченность х86 архитектуры и отсутствие какой-либо оптимизации со стороны приложений не в состоянии раскрыть весь потенциал этого продукта. Кроме этого, ожидаемые уже в следующем поколении чипов интеграция блока T&L и повышение частоты синхронизации окончательно укрепят позиции компании в списке лидеров не только в плане использования современных веяний, но и, наверняка, в плане производительности. И хоть Imagination нельзя однозначно назвать пионером в "тайловой" области, однако уже сейчас можно с уверенностью заметить, что KYRO — это не просто "пассажир", достойный самого пристального внимания, но еще и "опасный враг", которого надо сильно бояться…
СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ
- KYRO: Integrated 2D/3D Graphics Accelerator — product Overview.
- KYRO: Internal True Color.
- KYRO: Tile Base Rendering — The Future Of 3D Graphics.
- KYRO: 8-Layer Multi-Texturing.
- KYRO: Bump Mapping.