Что такое текстуры, думаю, знают все. Мне остается только добавить, что Главный Компьютерный Смысл применения текстурирования — экономия процессорного времени. Все очень просто: когда мы хотим нарисовать деревянный ящик, ничто не мешает нам запустить 3D-моделер и слить пару тысяч разноцветных полигонов в красочном экстазе. При наличии определенного таланта у вас получится очень правдоподобный ящичек, состоящий из множества мельчайших полигонов. Представьте, сколько времени уйдет, чтобы повернуть такой "бокс" градусов на 90. Используя текстуры, мы рисуем всего 6x2=12 треугольников, а затем раскрашиваем каждую сторону согласно информации, хранящейся в заранее нарисованной картинке. После этого любой Voodoo Graphics с криком "кийя!" крутанет, переместит да еще и отмасштабирует ящик как угодно. Получается увеличение производительности путем уменьшения реалистичности. Однако степень "отстойности" будет сильно зависеть от того, как приготовлены текстуры. Как добиться максимальной реалистичности картинки, мы с вами сейчас и поговорим.
Теория Прежде чем приступать к планомерному изложению материала,
Редактор материалов в 3DStudio MAX - вещь очень мощная, полезная, отличается умом и сообразительностью. хотелось бы оговориться. Данная статья не преследует цели научить вас работать в тех или иных программах, в которых можно обрабатывать текстуры (они перечислены, но не более того). Данный материал — теоретический базис, который нужно усвоить каждому начинающему игроделу. Основные понятия, их определения, расшифровка некоторых терминов, которые, что называется, у всех на устах, но никто толком не знает, что "это" означает. Что же касается практики... В ближайших номерах "Мании" мы напрямую коснемся проблемы работы с текстурами — вы сможете прочитать статьи, представляющие собой "голую практику". Сначала в рамках рубрики "МатрицаПлюс" будет опубликована статья "Основы создания скинов для Counter-Strike и Half-Life", в которой детальным образом (начиная с азов и заканчивая профессиональными тонкостями) разобрано создание текстур для трехмерных моделей (материал значительно более "глубокий", чем публиковавшиеся в прошлом году статьи по выделке шкур для Quake и Unreal). Как сделать текстуру, как придать ей реалистичность, как конвертировать картинку для помещения в игру. Затем, в рамках "Самопала", вы сможете ознакомиться со статьей по спецэффектам, где также изложены некоторые моменты, касающиеся создания текстур. Ну а пока — теория...
Размер текстуры Когда вы загружаете уровень трехмерной игры, текстуры, покоящиеся в установочной папке, спешно перебираются в память вашей видеокарты, преобразуясь и распаковываясь из всевозможных форматов хранения в родной формат программного API. Там они выстраиваются в линию и ждут, когда надо будет на что-нибудь натянуться. На этом моменте хотелось бы остановиться поподробнее. Как вы понимаете, память видеокарты не резиновая, и когда она кончается, в расход идет системная память (у AGP-видеокарт). Получается, что для одного конкретного уровня может быть ограниченный по размеру объем текстур. Но и это еще не все. С размером доступной видеопамяти очень сильно связано такое понятие, как разрешение текстуры. Разрешение в самом общем понимании — это размеры кусочка картинки по ширине и высоте. Так уж сложилось, что кусочки эти не прямоугольные, и даже не треугольные, а идеально квадратные, причем с длиной стороны в какой-либо степени двойки. И никак иначе. Блокнотик в клеточку: Теоретически размер текстуры может быть любой, но именно использование чисел 32, 64, 128 и других степеней двойки позволяет им располагаться очень плотно друг к другу, не оставляя зазоров и пустых мест в памяти, размер которой, как вы знаете, также считается как "два в степени икс". Заметьте, что практически все компьютерные величины считаются подобным образом. Но главный смысл разрешения в том, что один полигон, будучи покрыт текстурой бОльших размеров, будет выглядеть гораздо реалистичнее. Поэтому, используя огромные текстуры, выполненные в 32-битном цвете, вы добьетесь потрясающего вида сцены, загубите видеопамять и увеличите размер своего дистрибутива в два... нет, в три, а с долей фантазии и четыре раза. Да здравствует прогресс! Что же делать в ситуации, когда быть похожим на PSX не хочется, но и размер конечного дистрибутива не на последнем месте? Что особенно важно для любительских игр, которые можно распространять через Интернет? Знатоки WinZip’а и графических форматов уже кричат: "архивировать!" Не надо, не надо, я прекрасно все слышу. Использование форматов сжатия графики вроде JPEG здорово помогает при хранении текстур на диске. Но это решение только половины проблемы, потому что в видеопамяти текстуры все равно занимают свой полный размер. Его вы можете оценить по тому же графическому файлу в формате BMP.
Программа Corel TEXTURE: Не умеете создавать текстуры? Научим! Умных инженеров из компании S3 Inc. этот факт категорически не устраивал, поэтому они взяли и разработали технологию сжатия текстур прямо в видеопамяти, которую назвали S3TC, что из иероглифов можно расшифровать как S3 Texture Compression. Поначалу эту радость использовали только "Варварские" карты, но затем ее лицензировали все основные производители видеочипов. Поэтому теперь сжатием текстур и пофигистским отношением к количеству видеопамяти могут баловаться обладатели GeForce’ов, Voodoo 4-5 и ATI Radeon’ов. Справедливости ради можно упомянуть об аналогичной технологии FXT1 от 3Dfx Interactive. Однако боюсь, что оная находится сейчас там же, где и ее родители. Реализация сжатия происходит на аппаратном уровне, если установлены правильные драйверы. А также зашиты соответствующие опции в DirectX и OpenGL. Наконец-то можно испустить вздох облегчения по поводу объемов и перейти к следующей теме.
Фильтрация С развитием железно-ускорительной техники окончательно оформилась технология фильтрации текстур. В свое время одно это обеспечило компании 3Dfx армию фанатов. Размытые текстуры — самый яркий отличительный признак "ускоренной" графики. Но и тут есть свои особенности. "Неускоренная" текстура, которыми нас потчует софтверный режим, на экране получается совсем не таких размеров, как она была нарисована. Вдобавок она перекособочена и повернута, чтобы удовлетворять правилам перспективы. А если нам приспичит посмотреть на трехмерный объект вплотную, каждая точка текстуры должна будет растянуться в несколько десятков раз. При этом геймер будет щедро одарен безумством кубизма гипертрофированных пикселей. Использование аппаратной фильтрации устраняет неприятные последствия этого эффекта, как аспирин — похмельную голову. При растяжении точек текстуры пространство между ними заполняется градиентом, то есть плавным переходом цвета от одной точки к другой. В результате перед нами предстает вполне миловидная картинка. Для того чтобы вычислить цвет конкретно взятой точки, берутся координаты места текстуры, в которое попадает эта точка. Если они не являются целыми числами, цвет точки вычисляется путем линейной интерполяции цветов четырех пикселей в текстуре, которые окружают полученную точку, находясь в "целых" координатах. Немного поскрежетав
Photoshop. Adobe Photoshop. Самый популярный сегодня растровый графический редактор. извилинами и перечитав предыдущее предложение тройку-другую раз, вы поймете, что я хотел до вас донести. Итого, мы должны произвести две интерполяции — по горизонтали и по вертикали. Весь процесс называется билинейной фильтрацией. Если мы используем 8- или 16-битный цвет, возможных значений цветов точки будет меньше, и их придется округлять, в результате чего получаются "ступеньки". В 24- и 32-битном цвете можно добиться максимальной плавности перехода. Именно поэтому картинка в современных акселераторах, правильно выполняющих фильтрацию, получается такой красивой и реалистичной. Блокнотик в клеточку: Шумы и артефакты, выползающие на текстурах, часто появляются из-за ошибок в алгоритмах интерполяции и округленных вычислений. Так и складывается плохая репутация видеокарт, пока очередная версия драйверов не попробует это все исправить. Кстати, самая правильная фильтрация — программная. Не смейтесь! В Direct3D возможно использование режима, когда картинка, полученная программным способом, практически не будет отличаться от аппаратной. Вот это и есть настоящая эмуляция. Кстати, использование акселератора не обязательно означает наличие гладких текстур. Обычно графические API позволяют делать выбор из нескольких способов текстурирования. Подробней об этом можно почитать в документации, а для наглядности давайте немного поиздеваемся над Quake’ом. Запустите Quake III, в консоли наберите r_textureMode "GL_NEAREST", и после рестарта графики можете наслаждаться динамическим освещением и "софтовыми" текстурами.
Мип-маппинг Если текстурированный объект находится далеко от зрителя, он будет очень маленький и плохо различимый. Поэтому нам наплевать, какого разрешения на нем будет использоваться текстура. И было бы неплохо, пока никто не видит, взять и натянуть на этот объект текстурку поменьше, дабы сэкономить немного процессорного времени для более важных вещей. Сказано — сделано! Теперь в духовно-информационном пространстве, иногда именуемом Миром, появляется такое понятие, как мип-маппинг, заключающееся в использовании текстур более маленького разрешения для более удаленных объектов. Прелесть ситуации состоит в том, что мелкие текстуры автоматически генерируются из исходной во время загрузки сцены/уровня/игры. Алгоритмы этого процесса заложены в графическом API (DirectX Graphics, OpenGL). В соответствии с установками Mip-Map уровней, которые еще можно делать через меню драйверов видеокарты, создается определенное количество текстур, каждая из которых отправляется на хранение в видеопамять. Проходит секунда, и нужная текстурка выползает оттуда на свет божий, покуда ее не сменит более крупный или более мелкий собрат. Уровни мип-маппинга хорошо видно на скрине из того же "Квейка".
Основы практики Есть еще много вопросов для рассмотрения: нанесение на текстуры окружающей поверхности, рельефное текстурирование, мультитекстурирование и все, все, все... Однако пора бы уже заканчивать с интересной, но неспособной ни на что, кроме загруза мозга, теорией. Переходим к практике. Самые важные моменты мы осветили, и посему терминология программ, где используются текстуры, теперь должна быть понятна. Итак, если вы балуетесь созданием уровней для известных игр, а уж тем более если клепаете нечто самопальное, вам потребуются собственные текстуры. В первом случае — для внесения разнообразия в уже опостылевший всем ландшафт, а во втором — чтобы не сочли за работника калько-литейной промышленности. Какие же программы и ресурсы необходимы для полноценной работы?
Сырье Основу для текстуры можно создать двумя способами: первый — сгенерировать на компьютере. Второй — взять готовую фотографию. Первый способ подразумевает, что вы используете некую программу, которая по определенному алгоритму выдаст вам результат в виде психоделической картинки. Самый простой вид — случайные точки, разбросанные по гладкой поверхности. Посмотреть это можно с помощью фильтра Noise (Шум), который есть в каждом уважающем себя графическом редакторе. Берем два зеленых квадрата, рисуем на каждом разноцветный шум, объединяем со смешиванием и
Третий Квейк обзавелся софтовыми текстурами. А вы говорите, прогресс... размываем. В результате получаем нечто подозрительно похожее на травку. Газонную. Точно так же получаются волны, кирпичики, вода и огонь. Есть и более изощренные алгоритмы. Если вы заинтересовались, покопайтесь в литературе по программному созданию текстур — это излюбленное занятие создателей 64k демок. Или займитесь фракталами — порой результаты получаются самые неожиданные. Фотографии в чистом виде почти непригодны для обволакивания поверхностей. Уж слишком уродливыми и нереальными получаются объекты реального мира, перенесенные в виртуальный. Пока вы думаете над философским аспектом данного вопроса, я продолжу. Во-первых, с фотографии надо убрать шумы, черточки и прочую грязь. Переходы тени там тоже ни к чему. Равно как и света. У нас солнце свое есть — нечего тут конкуренцию разводить. Ненужные детали — вон. Детализацию лица или другой части тела — размыть. Вооружившись терпением и горкой плагинов, можно добиться от фотографии плоского и нереалистичного вида. Чего мы и хотели. Блокнотик в клеточку: Фотореалистичные текстуры — ха! Попробуйте-ка натянуть снимочек соседа Пети на полигональную личину любимого бота в UT. Ну и что, чувствуете фотореалистичность? Ладно, ладно, можете выключить. Про фото-эту-самую нам мозги закапывали еще со времени рекламной кампании Voodoo 2. И что? Все красивые сцены в буклетиках, как ни крути, все равно используют текстуры, рисованные по проторенным алгоритмам, и лишь их разрешение со временем растет. Область применения фототекстур — копии реальных объектов, задние и крупные планы да скины. Еще они могут быть черно-белой основой для поверхностей, генерируемых программным путем (Bump-Map). Последнее, кстати, один из лучших способов создания текстур. Bump-Map — это такая черно-белая картинка, по-русски называемая картой глубины. Нехитрым путем полученная из фотографии, скажем, стены, она еще более нехитрым методом раскрашивается, и получается нереальная копия реальной поверхности. Само собой, именно то, что получилось и будет использоваться при текстурировании.
Инструментарий Наверное, первое, чем можно посоветовать запастись, — это всенародный любимец, тов. Photoshop. Если у вас к нему по каким-то причинам врожденная неприязнь, то возьмите любой другой растровый графический редактор, обладающий
Пол является живой иллюстрацией абзаца про мип-маппинг. похожим набором функций. Основной задачей при изготовлении текстур является обработка готовых изображений с целью создания "тайлового" эффекта. То есть чтобы при составлении друг с другом кусочки изображений формировали одно непрерывное полотно. "Фотошоп" хорош тем, что прямо в нем, без использования дополнительных плагинов, можно лепить тайлы, как на конвейере. Это довольно простой трюк, который, тем не менее, требует артистических способностей. Загружаете картинку, применяете к ней встроенный фильтр offset, сдвигая левый верхний угол прямо в центр, а затем затираете получившийся шов инструментом Clone Stamp. Чем однороднее будет исходная картинка, тем лучше получится результат. Таким образом можно делать ровные поверхности вроде каменных стен, асфальта, песка, травы. В "Фотошопе" же с помощью Quick Mask можно создавать переходы одной поверхности в другую. Описание процесса можно найти во многих учебниках по фотомонтажу. Незаменимым он оказывается при обработке готовых фотографий, о смысле которой только что говорилось. Следующий вид инструмента — трехмерный моделер. Он нужен вам по двум причинам: во-первых, вы можете быстро оценить, как созданная текстура смотрится на трехмерных объектах (так и хочется сказать "в жизни"). Во-вторых — например, в 3DStudio MAX есть много средств обработки и создания текстур. Там и фильтры, придающие больше реализма, и прозрачности, смешения, светотени. Оригинальная программа также есть в комплекте установки Corel DRAW! и носит название Corel TEXTURE, недвусмысленным образом указывающее на ее назначение. Текстуры здесь создаются по принципу слоев. Помните пример с травой? Тут — то же самое. Сделали первый слой в виде кирпичиков, раскрасили, добавили второй слой — волны, опять раскрасили, наложили источники света да пару эффектов. Что получилось — черт разберет, но красиво, практично, а главное — быстро.
В добрый путь Надеюсь, я вбил в стопы вам надежные подковы, и теперь, если сможете оторвать все это от земли, — в путь! Помните, что над текстурами надо трудиться долго и с творческим походом, ведь хорошая текстура — залог приятного самочувствия глаза и восхищения поклонников. Если физика влияет на механическое восприятие, звук и музыка — на эмоциональное, то текстуры — на чувственное восприятие игры.
1510 Прочтений • [Текстурирование в играх] [19.05.2012] [Комментариев: 0]