Энциклопедия третьего измерения, часть 1
Все мы пользуемся продуктами высоких технологий. Прогресс — вещь замечательная. Не будь прогресса, не было бы новых интересных компьютерных игр, не смогли бы вы с легкостью ваять уровни в 2D- и 3D-редакторах. Такие полезные устройства, как ноутбуки и КПК, так и остались бы уделом научной фантастики. Но не только благо несет техни ческий прогресс. Появляется много новых понятий и терминов. Порой не успеваешь следить за всеми техническими новинками. И в какой-то момент понимаешь, что отстал от прогресса. Даже если ты — гуру, что-то можно и упустить. А каково новичку, который, как в прорубь, нырнул в мир высоких технологий и буквально задохнулся от обилия непонятных, но очень умных словечек и терминов? Все мы учимся. Если в очередном пресс-релизе встречается какое-то непонятное слово, первая мысль — докопаться до его сути. Но это только полбеды. Люди, которые так и не поспели к празднику научно-технической революции, теряются в этом информационном водовороте и пытаются на ходу понять все, ни во что особенно не вникая. Это плохо. У человека вырабатывается ущербная система знаний, которую потом очень сложно переделать. В самом центре технологической каши — миллионы людей, которые плохо понимают, что же все это такое. Вроде бы они знают, что такое, например, антиалиасинг , но вот когда их спросишь об этом поподробнее, они запнутся. Ну да, это такая фишка, которая улучшает качество изображения, — скажут многие. В принципе, правильно. Ну а точнее — что же это все-таки такое? “А фиг его знает”. Товарищи, братья, ну а что такое полигон? “Ну, это та ерунда, из которой состоят все объекты в 3D”. Хм, не очень утешительное заявление. Думаете, к вам все это не относится? А вы вспомните, откуда узнали о том же полигоне, о 3D-графике вообще. Был момент, когда вы всего этого не знали. Стали играть в игры, разбираться в системе, сосед на пальцах объяснил, что к чему. Скорее всего, объяснил не совсем корректно, потому что и сам толком не понимает. Вот и получается, что у огромного числа компьютерщиков нет устоявшихся знаний. Все представляется в общих чертах, а целостной картины нет. И такой человек, прочитав, скажем, обзор каких-нибудь новых материнских плат в “Железном цехе” , недоуменно пожмет плечами: “А зачем это мне?” Конечно, незачем, если каждый новый термин раздражает. Просто по-человечески раздражает, а информация не хочет укладываться в голову, как следует не переваривается. Надо с этим что-то делать. Вот и назрела необходимость этакой “Энциклопедии третьего измерения” для геймеров. Она поможет разобраться в тех обрывках информации, которые вы когда-то получили от незадачливого соседа или из не вселяющей доверия конференции в Сети. Мы не будем давать вам информацию тем сухим и скучным языком, которого придерживаются многие информационные ресурсы. И уж тем более не будем загружать вас сложными формулами — вам они ни к чему. Прочтя все статьи цикла, вы приобретете прочные знания, которые всегда пригодятся. И тогда вы не будете в страхе шарахаться от разнообразных обзоров и тестов производительности, а зайдя на какой-нибудь Ixbt.Com , почувствуете себя своим среди своих. Виртуальная реальностьКак так получается, что на экране оживает почти настоящий, реальный мир, да еще и в 3D? Люди, особенно в возрасте, которые в первый раз встречаются с интерактивным 3D, обычно испытывают шок. Увиденное не вписывается ни в какие их представления о современных достижениях науки и техники. И хотя им показываешь “Властелина колец” и говоришь, что многие сцены фильма сделаны на компьютере, — их это не особо впечатляет. По своей наивности они думают, что все по-прежнему делается рисованной мультипликацией. Но увидят они какой-нибудь столетний Doom — и поражаются. Так как же создается это третье измерение? Есть два основных подхода. Можно сделать псевдотрехмерные сэмплы, а потом обработать их по принципам двухмерной графики, лишь изредка касаясь простейших законов третьего измерения. Так, например, работает знаменитый движок Infinity , известный нам еще по первому BG. А можно создать модель трехмерного мира, а потом спроецировать часть его на плоскость экрана. Так делают все современные трехмерные игры. Однако трехмерный мир надо как-то смоделировать. Пользоваться при этом наработками из растрового 2D — дохлый номер. Графика будет тяжеловесной и тормозной. Нужен другой способ… Постойте, а какая у нас самая прогрессивная технология в 2D? Конечно же, векторная графика. И весит мало, и обсчитывается сравнительно быстро. Есть у нее и свои недостатки, но достоинств больше. Почти полное переложение основ векторной графики в 3D — это технология NURBS. Но о ней у нас будет разговор особый. А пока самый распространенный способ моделирования 3D — частичное переложение основ векторной графики. Его суть в следующем: любая трехмерная модель (из которых в конечном счете и состоит виртуальный мир) представляется в виде некоторого числа пересекающихся плоскостей. Излишки плоскостей обрезаются. В итоге остаются двухмерные многоугольники, помещенные в трехмерную систему координат. Такой многоугольник называется полигоном. Байки вокруг полигона Как раз с полигоном в околоигровом мире сложилась некая путаница. Классики учат, что полигон — это любой выпуклый многоугольник, а коллеги из железячного отдела с пеной у рта доказывают, что полигон суть треугольник. Непримиримых противников надо как можно быстрее развести по углам ринга, снять с них боксерские перчатки и напоить кока-колой. Ведь и то, и другое верно. Но в железячной практике мы чаще всего считаем не полигоны, а именно треугольники. Почему? Да потому, что перед рендерингом все сложные многоугольники разбиваются на треугольники (то, что это можно сделать, вы доказывали в классе, кажется, десятом на уроке геометрии), и акселератор работает в конечном счете именно с треугольниками. Сейчас разработчики фразами типа “5000 полигонов на одну модель” вызывают у нас обильное слюноотделение и нездоровую чесотку в области кошелька. А вы думаете, 5000 полигонов на модель — это много? Ничуть. Скорее мало. Вдумайтесь: ведь это всего лишь плоские треугольники. Не случайно разработчики указывают эту цифру именно в треугольниках — так больше получается. Сомнительно, чтобы из плоских треугольников можно было слепить что-то красивое. Для создания реалистичного лица понадобится как минимум несколько миллионов треугольников. И сложные алгоритмы для управления ими.
Вы поверите, если я скажу, что это — симпатичный кролик? Симпатичным его в таком виде сочтет лишь профессиональный программист. В этом красавце 18 тысяч полигонов! Впечатляет? Нет? Все верно: не в количестве дело. Тот же самый кролик, только с каркасным сглаживанием.
Между тем модельки в новых компьютерных играх смотрятся неплохо. Не верится, что в них всего лишь несколько тысяч треугольников. Тогда бы они выглядели, как рубленные папой Карло в пьяном угаре тесаком. Все это так. Поэтому для пущей красоты разработчики применяют разнообразные технологии, например каркасное сглаживание. Простейшие из них реализует сам акселератор в паре с “дровами”. Углы полигонов сглаживаются и немного размываются. В итоге моделька смотрится не угловатой, а округлой. Но и такой подход не идеален. В старых играх была проблема, когда модель, скажем, деревянного ящика довольно странно выглядела с закругленными углами. Нельзя же сглаживать все без разбора. Поэтому разработчики “железа” и трехмерных API постановили: углы в 90 градусов оставить в покое. Вот мы и раскрыли первый секрет разработчиков игр: не в количестве дело. Будь в модели хоть сто тысяч полигонов, ее можно сделать так, что папа Карло ужаснется. И наоборот: умелый дизайнер из 500 полигонов может создать такую модельку, которой позавидуют иные тамбовские наездницы. Право, не стоит обращать внимание только на количество полигонов. Это не показатель! Художник по костюмам? Нет, по материалам! Модель может быть окрашена в какой-нибудь цвет. Но цвет — не единственная визуальная характеристика полигона. Его внешний вид определяет свойство — материал. Описание материала модели включает в себя цвет модели, свет рассеянный, отраженный, параметр отражения, альфа-канал (об этом звере поговорим отдельно) и еще кучу всевозможных характеристик. С этой тучей характеристик можно делать все что угодно. Умелый программист или дизайнер только с их помощью наведет красоту неземную. Есть у нас, к примеру, камешек из малахита. А мы мало того, что описываем его текущий вид, так еще и показываем, как будет от него отражаться свет при разных вариантах освещения, какой у него отлив да перелив — целая физика получается.
Иногда высокое качество персонажей достигается за счет огромного числа полигонов. А иногда и за счет грамотной работы с материалами, светом и тенями.
Стоп-стоп, позвольте… А как мы этому малахитовому камешку соответствующий узор присвоим? Для этого существует еще один важный параметр материала — текстура. Это двухмерное изображение, которое как бы оборачивается вокруг трехмерной модели. При этом можно точно указать, как текстура на модели ляжет и к какой точке на модели, например, лицо вашего начальника определится… Здесь тоже простор для творчества. Текстуры поддаются сглаживанию, фильтрации, экзотической обработке (подробно об этом во второй статье цикла ). Текстуры на модели натянуты, но их не видно. Вообщ е ничего не видно. Поэтому громко хлопаем в ладоши и кричим: “Да будет свет!” Трехмерный мир надо освещать источниками света. Они бывают точечные, прожекторообразные, рассеянные и еще
В последнее время разработчики игр все чаще обращаются к технологиям, которые раньше считались сложными и ресурсоемкими. NURBS — одна из таких технологий.
много какие. Свет может быть цветным, отраженным, объемно-отраженным. Чтобы свет реалистично ложился на модели, создаются карты освещенности. Три заветных измерения Трехмерный мир готов. Но пока только матерый программист может восторгаться его шестнадцатеричными красотами. А как перевести его из цифровых глубин оперативной памяти на экран? С помощью проецирования. Но оказывается, что все не так просто. Проекции бывают разные: параллельные, ортогональные, косоугольно-лихозакрученные и всякие другие. Для реалистичного трехмерного мира самая подходящая проекция — перспективная. Именно так мы видим мир — в перспективе. Закон перспективы прост: чем дальше объект от наблюдателя, тем меньше у него видимые размеры. Оказывается, перспективы тоже бывают разные. При разном фокусном расстоянии и разном угле обзора мы увидим на экране совершенно разные картинки. И этим можно воспользоваться. Была такая гоночная аркада несколько лет назад — Ghost Recon ; так там для создания ощущения бешеной скорости разработчики уменьшили угол обзора, а остальные характеристики оставили прежними. Порой игрок чувствовал, что его как бы всасывает вглубь экрана. Экранная сцена Двухмерный слепок мгновения готов, и ему пора на экран. Но еще много надо сделать, прежде чем его увидит игрок. Надо “причесать” картинку. Для этого у современных акселераторов и графических библиотек в распоряжении целые россыпи модных приемов. В большинстве игр движку остается наложить двухмерные элементы пользовательского интерфейса, и видеокарта отправит полученное изображение… нет, не на монитор, если он, конечно, не LCD. Большинство современных мониторов аналоговые, поэтому надо перевести набор пикселов во что-то более понятное, например в последовательность аналоговых сигналов. Занимается этим важным делом модуль видеокарты под названием RAMDAC. *** Почему на протяжении всей статьи мы лишь чуть-чуть касались разных тем, а самое вкусное оставляли на потом? Потому что цель этой статьи — создать у вас общее представление о мире 3D. В следующих статьях мы детально разберем каждый из упомянутых в этой статье терминов. А после публикации последней статьи цикла — при условии, что вы их все прочтете, конечно, — у вас сложится целостное представление, какие преобразования происходят с изображением, прежде чем оно появится на мониторе перед взором геймера.