Тотальное 3D. Технологии рельефного текстурирования
Компьютерная графика непрерывно развивается. Еще десять лет назад люди с замиранием сердца произносили магическое « 3Dfx Voodoo », « затенение по Гуро », « сглаживание текстур ». Тогда это были сверхсовременные технологии. Сегодня мы с тем же восторгом говорим « DirectX 10 », « HDR », « шейдерная модель ». Именно эти понятия ассоциируются с технологиями завтрашнего дня.
Быстрее всего среди современных 3D-технологий развивается направление, обеспечивающее максимальный объем картинки на экране, — это так называемое рельефное текстурирование. К сожалению, большинство геймеров либо вообще не представляют, что это такое, либо представляют, но очень-очень условно. Сегодня мы детально рассмотрим такие понятия, как Bump Mapping , Normal Mapping и Parallax Mapping , а также поговорим о технологии Displacement Mapping , про которую зачастую не знают даже разработчики компьютерных игр.
Предыстория
Первым трехмерным играм (речь именно о полигональных движках, а не о псевдотрехмерной пиксельной графике) катастрофически не хватало производительности центрального и графического процессоров. Кремниевые кони прошлого рвали узду, закусывали удила, но не могли нормально справиться с просчетом трехмерных сцен в режиме реального времени. Стоит ли говорить, что виртуальные миры хоть и были полностью трехмерными, но детализацией не отличались.
Разработчики, может, и рады были бы состряпать из полигонов трехмерные гайки, картины на стены, люстры и факелы, но вот только куда до таких излишеств, когда процессор и с проработкой основной геометрии не справляется? А ведь глубина пространства, его объем, во многом зависят именно от мелочей. Поступали просто: все мелкие элементы — тени, блики, шероховатости, износ и повреждения — рисовали кисточкой на текстурах. Получалось, конечно, плоско, но хоть как-то. Как говорится, не до жиру — быть бы хоть чуть-чуть объемным.
Но железная индустрия развивалась, мощности процессоров росли, компьютерные игры на месте тоже не стояли. Как только заветные мегагерцы выросли до приемлемых величин, а в системных блоках большинства геймеров поселились трехмерные ускорители, разработчики начали задумываться: с чего это вдруг особенности поверхности намертво зашиты в текстуру? Ведь металл, камень, пластик, да и любая другая поверхность в зависимости от освещения выглядят по-разному. Грязь, например, плохо отражает падающий свет, а потертости, наоборот, лучше. А ведь есть еще и тени, которые пока просчитываются самым примитивным образом…
И были придуманы шейдеры — процедуры, определяющие способ визуализации поверхности объекта в зависимости от различных входных данных. Свет, маски прозрачности (задающие области применения шейдеров), карты отражения и карты рельефа — подо все были созданы свои шейдеры. Особое внимание разработчики стали уделять именно картам рельефа. Ведь раньше тень на текстуре зачастую рисовали кисточкой. А что это за тень, если она не меняет своего положения в зависимости от источника света? Карта рельефа сразу позволила рассчитывать тени в реальном времени. Да и детализация объектов заметно возросла: вроде бы полигонов столько же, а объемность пространства увеличилась на порядок.
Bump Mapping
Первым методом создания рельефности объекта стал Bump Mapping , в просторечии просто «бамп». Смысл технологии в том, что неровности объекта задаются одной-единственной картинкой (она называется бамп-картой), состоящей из градаций серого цвета (от 0 до 255). Чем белее пиксель (ближе к коду 255), тем больше он «приподнят» над поверхностью, более темному пикселю (ближе к 0) соответствует более «углубленное» положение.
Для своего времени бамп был очень хорош, но требования геймеров к изображению неумолимо росли. И вот уже технология, которая учитывает только направление света и степень приподнятости/углубленности пикселей, не может обеспечить нужного качества картинки. Да еще и «пластиковость», присущая бампу, давала о себе знать. Как, скажите, делать игру про Вторую мировую, если все помещения выглядят словно их отлили из цельного куска пластмассы?
Отчасти поэтому, а отчасти и потому, что карты Bump Mapping почти всегда приходится создавать вручную (качественного алгоритма автоматизации данной работы как не было, так и нет), разработчики все реже используют его в своих разработках.
Normal Mapping
На смену бампу пришло второе поколение алгоритмов рельефного текстурирования. Оно получило название Normal Mapping (иногда, хотя и довольно редко, его называют «нормалом» или «нормалями»). Главное отличие Normal Mapping от бампа — более высокая точность вычисления, которая достигается за счет добавления в карту данных об ориентации нормалей (перпендикуляров) поверхности. Еще одна важная особенность: Normal Mapping карты можно генерировать в автоматическом режиме, а не рисовать длинными зимними вечерами в Photoshop.
Смысл нормаля довольно прост: на основе текстуры высокополигональной модели строится так называемая карта разности, которая, будучи наложенной на низкополигональный объект, делает его необычайно похожей на многополигональный. Вроде бы треугольников мало, а картинка выглядит так, словно их многие миллионы. В карте нормалей цвет каждого пикселя задает ориентацию нормали в данной точке поверхности. Пространственным координатам (X, Y, Z) соответствует тройка цветов (R, G, B).
Значения R, G, B варьируются в пределах от 0 до 255, причем 127 соответствует нулю. То есть голубой цвет (127, 127, 255) описывает просто гладкую поверхность, а они на низкополигональной и высокополигональной модельке одинаковы. Это объясняет, почему карты нормалей имеют в основном голубой цвет, а детали выделяются другими цветами. Обратите внимание, в карте нормалей альфа-канал изображения содержит стандартную карту Bump Mapping. В компьютерных играх карты нормалей совершили настоящий переворот.
Технология нормалей произвела революцию, пожалуй, даже большую, чем в свое время бамп. Теперь все объекты не только выглядят объемными, но и, как бы это сказать, настоящими, а не так, словно они сделаны из пластика. Сейчас сложно найти экшен или даже стратегию, движок которой не использовал бы карты нормалей. Это стандарт де-факто.
И хотя преимущество Normal Mapping очевидно, приходит время, когда и он перестает устраивать девелоперов. И им на помощь готовы придти технологии завтрашнего дня…
На DVD
На нашем DVD в разделе «Игрострой» находится большое число пояснительных скриншотов, видео и примеров, которые позволят вам составить полное представление о современных технологиях рельефного текстурирования.
Parallax Mapping
Главный недостаток бампа и нормалей в том, что рельефные детали, описываемые соответствующими картами, на самом деле плоские. Они не меняют своих очертаний, под каким бы углом игрок на них ни посмотрел. Когда персонаж стоит на месте, все здорово, картинка выглядит объемной, но стоит ему немного пошевелиться, сместиться буквально на полметра в сторону, и иллюзия глубины рассеивается — глаз человека ловит несоответствие освещения и изменившейся перспективы.
С пришествием новых шейдерных моделей и графических ускорителей стало возможным усложнить сами шейдеры и улучшить графическое представление рельефных поверхностей. Одна из новых технологий называется Parallax Mapping (в Unreal Engine 3.0 он именуется Virtual Displacement Mapping ). Ее главное новшество — она заставляет мелкие детали выглядеть по-настоящему объемными. Параллакс имитирует объемность за счет пространственного искажения рельефа относительно камеры (то есть главной оси взгляда).
Relief Mapping
Но даже параллакс не идеален, ведь он не изменяет очертания мелких объектов, а только лишь всего рельефа целиком. Поэтому объект с детальной поверхностью имеет довольно грубые контуры и отбрасывает не очень реалистичную тень.
Проблему сумел решить бразильский аспирант Мануэль Оливейр и его коллеги (www.inf.ufrgs.br/~oliveira). Новую разработку назвали Relief Mapping или Per-Pixel Displacement Mapping , она включает в себя целых три алгоритма визуализации поверхности.
Простой Relief Mapping. Это самый простой из новых алгоритмов Relief Mapping. Он разработан как оптимальная замена Normal / Parallax Mapping. Как и предшественники, Relief Mapping не меняет очертаний самого объекта, зато делает детали на 100% объемными, способными отбрасывать тень друг на друга. Наиболее эффективное применение данного шейдера (а Relief Mapping, по сути своей, именно шейдер) — поверхности, которые не позволяют напрямую увидеть их контуры. Например, стены зданий и коридоров, поверхности скал и открытых площадок: вы же не можете погрузиться в трещину скалы, чтобы понять, что она на самом деле плоская, а не объемная. Это стало очевидно и для коллеги Оливейра по имени Фабио Поликарпо — именно он создал графические модификации для DOOM 3 и Quake 4 , заменяющие там Normal Mapping на Relief Mapping.
Relief Mapping, меняющий очертания объекта. Второй алгоритм Relief Mapping рванул как атомная бомба: это самый реалистичный эффект рельефной поверхности, рассчитанный в реальном времени. Причем полностью меняющий очертания самого объекта, поэтому его еще называют True Per-Pixel Displacement Mapping. Абсолютно недостижимый ранее фокус, реализованный теперь с помощью высокоуровневого языка шейдеров DirectX 9.0c.
Уже сейчас ясно, что Displacement Mapping выведет графику компьютерных игр на новый уровень всего через два-три года. Главная проблема всех игр — пресловутая угловатость, которая всегда бросается в глаза, будет полностью побеждена.
Многослойный Relief Mapping. Третий, самый невероятный алгоритм — Quad Depth Relief Mapping (также называемый Multilayer Relief Mapping ) — делает то, что кажется вообще невозможным. Представьте себе простой прямоугольный полигон, на него накладывается несколько особых текстур рельефа, обрабатываемых специальным шейдером. При этом почти со всех сторон (кроме вида, когда полигон проецируется в линию) вместо полигона вы видите совершенно правильный объемный объект!
Вот только системные требования новой технологии пока еще довольно высоки. У нас в редакции на Pentium 4 3,2 ГГц с 1 Гб DDR-2 и GeForce 6600GT PCI-E простенькие демки выдавали около 75 кадров в секунду, но вот если речь идет о полноценной игре… Современные компьютеры пока не готовы к пришествию Relief Mapping, однако через один-два года ситуация должна измениться.
Ведь для разработчиков игр карты рельефа — это не какое-то туманное будущее, а суровая реальность. Уже сейчас весь арсенал Relief Mapping доступен в виде плагинов для 3DS Max 6—9 (за исключением плагина многослойной рельефности, который создан пока только для Max 6—8).
* * *
Будущее однозначно принадлежит новым технологиям рельефного текстурирования. Увеличивать в разы число полигонов, чтобы добиться должного уровня реалистичности, слишком ресурсоемко, а вот добавить несколько новых шейдеров могут практически все разработчики, была бы программная база. С теми технологиями, которые есть в загашнике у геймдева, мы будем очень скоро со снисходительной улыбкой смотреть на графику современных игр: « Десять баллов? Полно те, это же примитив ».
На этом наш экскурс в мир полного 3D не заканчивается. В самом ближайшем будущем мы вместе с вами изучим и другие, не менее новаторские разработки.