30 января 2002
Обновлено 17.05.2023

Текстурирование в играх

Текстурирование в играх - изображение обложка

Что такое текстуры, думаю, знают все. Мне остается только добавить, что Главный Компьютерный Смысл применения текстурирования — экономия процессорного времени. Все очень просто: когда мы хотим нарисовать деревянный ящик, ничто не мешает нам запустить 3D-моделер и слить пару тысяч разноцветных полигонов в красочном экстазе. При наличии определенного таланта у вас получится очень правдоподобный ящичек, состоящий из множества мельчайших полигонов. Представьте, сколько времени уйдет, чтобы повернуть такой “бокс” градусов на 90. Используя текстуры, мы рисуем всего 6x2=12 треугольников, а затем раскрашиваем каждую сторону согласно информации, хранящейся в заранее нарисованной картинке. После этого любой Voodoo Graphics с криком “кийя!” крутанет, переместит да еще и отмасштабирует ящик как угодно. Получается увеличение производительности путем уменьшения реалистичности. Однако степень “отстойности” будет сильно зависеть от того, как приготовлены текстуры. Как добиться максимальной реалистичности картинки, мы с вами сейчас и поговорим. Теория Прежде чем приступать к планомерному изложению материала,

Текстурирование в играх - фото 1

Редактор материалов в 3DStudio MAX - вещь очень мощная, полезная, отличается умом и сообразительностью.
хотелось бы оговориться. Данная статья не преследует цели научить вас работать в тех или иных программах, в которых можно обрабатывать текстуры (они перечислены, но не более того). Данный материал — теоретический базис, который нужно усвоить каждому начинающему игроделу. Основные понятия, их определения, расшифровка некоторых терминов, которые, что называется, у всех на устах, но никто толком не знает, что “это” означает. Что же касается практики… В ближайших номерах “Мании” мы напрямую коснемся проблемы работы с текстурами — вы сможете прочитать статьи, представляющие собой “голую практику”. Сначала в рамках рубрики “МатрицаПлюс” будет опубликована статья “Основы создания скинов для Counter-Strike и Half-Life” , в которой детальным образом (начиная с азов и заканчивая профессиональными тонкостями) разобрано создание текстур для трехмерных моделей (материал значительно более “глубокий”, чем публиковавшиеся в прошлом году статьи по выделке шкур для Quake и Unreal). Как сделать текстуру, как придать ей реалистичность, как конвертировать картинку для помещения в игру. Затем, в рамках “Самопала”, вы сможете ознакомиться со статьей по спецэффектам, где также изложены некоторые моменты, касающиеся создания текстур. Ну а пока — теория… Размер текстуры Когда вы загружаете уровень трехмерной игры, текстуры, покоящиеся в установочной папке, спешно перебираются в память вашей видеокарты, преобразуясь и распаковываясь из всевозможных форматов хранения в родной формат программного API. Там они выстраиваются в линию и ждут, когда надо будет на что-нибудь натянуться. На этом моменте хотелось бы остановиться поподробнее. Как вы понимаете, память видеокарты не резиновая, и когда она кончается, в расход идет системная память (у AGP-видеокарт). Получается, что для одного конкретного уровня может быть ограниченный по размеру объем текстур. Но и это еще не все. С размером доступной видеопамяти очень сильно связано такое понятие, как разрешение текстуры. Разрешение в самом общем понимании — это размеры кусочка картинки по ширине и высоте. Так уж сложилось, что кусочки эти не прямоугольные, и даже не треугольные, а идеально квадратные, причем с длиной стороны в какой-либо степени двойки. И никак иначе.Блокнотик в клеточку: Теоретически размер текстуры может быть любой, но именно использование чисел 32, 64, 128 и других степеней двойки позволяет им располагаться очень плотно друг к другу, не оставляя зазоров и пустых мест в памяти, размер которой, как вы знаете, также считается как “два в степени икс”. Заметьте, что практически все компьютерные величины считаются подобным образом. Но главный смысл разрешения в том, что один полигон, будучи покрыт текстурой бОльших размеров, будет выглядеть гораздо реалистичнее. Поэтому, используя огромные текстуры, выполненные в 32-битном цвете, вы добьетесь потрясающего вида сцены, загубите видеопамять и увеличите размер своего дистрибутива в два… нет, в три, а с долей фантазии и четыре раза. Да здравствует прогресс! Что же делать в ситуации, когда быть похожим на PSX не хочется, но и размер конечного дистрибутива не на последнем месте? Что особенно важно для любительских игр, которые можно распространять через Интернет? Знатоки WinZip’а и графических форматов уже кричат: “архивировать!” Не надо, не надо, я прекрасно все слышу. Использование форматов сжатия графики вроде JPEG здорово помогает при хранении текстур на диске. Но это решение только половины проблемы, потому что в видеопамяти текстуры все равно занимают свой полный размер. Его вы можете оценить по тому же графическому файлу в формате BMP.

Текстурирование в играх - фото 2
Текстурирование в играх - фото 3

Программа Corel TEXTURE: Не умеете создавать текстуры? Научим!
Умных инженеров из компании S3 Inc. этот факт категорически не устраивал, поэтому они взяли и разработали технологию сжатия текстур прямо в видеопамяти, которую назвали S3TC , что из иероглифов можно расшифровать как S3 Texture Compression. Поначалу эту радость использовали только “Варварские” карты, но затем ее лицензировали все основные производители видеочипов. Поэтому теперь сжатием текстур и пофигистским отношением к количеству видеопамяти могут баловаться обладатели GeForce ’ов, Voodoo 4-5 и ATI Radeon ’ов. Справедливости ради можно упомянуть об аналогичной технологии FXT1 от 3Dfx Interactive. Однако боюсь, что оная находится сейчас там же, где и ее родители. Реализация сжатия происходит на аппаратном уровне, если установлены правильные драйверы. А также зашиты соответствующие опции в DirectX и OpenGL. Наконец-то можно испустить вздох облегчения по поводу объемов и перейти к следующей теме. Фильтрация С развитием железно-ускорительной техники окончательно оформилась технология фильтрации текстур. В свое время одно это обеспечило компании 3Dfx армию фанатов. Размытые текстуры — самый яркий отличительный признак “ускоренной” графики. Но и тут есть свои особенности. “Неускоренная” текстура, которыми нас потчует софтверный режим, на экране получается совсем не таких размеров, как она была нарисована. Вдобавок она перекособочена и повернута, чтобы удовлетворять правилам перспективы. А если нам приспичит посмотреть на трехмерный объект вплотную, каждая точка текстуры должна будет растянуться в несколько десятков раз. При этом геймер будет щедро одарен безумством кубизма гипертрофированных пикселей. Использование аппаратной фильтрации устраняет неприятные последствия этого эффекта, как аспирин — похмельную голову. При растяжении точек текстуры пространство между ними заполняется градиентом, то есть плавным переходом цвета от одной точки к другой. В результате перед нами предстает вполне миловидная картинка. Для того чтобы вычислить цвет конкретно взятой точки, берутся координаты места текстуры, в которое попадает эта точка. Если они не являются целыми числами, цвет точки вычисляется путем линейной интерполяции цветов четырех пикселей в текстуре, которые окружают полученную точку, находясь в “целых” координатах. Немного поскрежетав

Текстурирование в играх - фото 4

Photoshop. Adobe Photoshop. Самый популярный сегодня растровый графический редактор.
извилинами и перечитав предыдущее предложение тройку-другую раз, вы поймете, что я хотел до вас донести. Итого, мы должны произвести две интерполяции — по горизонтали и по вертикали. Весь процесс называется билинейной фильтрацией. Если мы используем 8- или 16-битный цвет, возможных значений цветов точки будет меньше, и их придется округлять, в результате чего получаются “ступеньки”. В 24- и 32-битном цвете можно добиться максимальной плавности перехода. Именно поэтому картинка в современных акселераторах, правильно выполняющих фильтрацию, получается такой красивой и реалистичной.Блокнотик в клеточку : Шумы и артефакты, выползающие на текстурах, часто появляются из-за ошибок в алгоритмах интерполяции и округленных вычислений. Так и складывается плохая репутация видеокарт, пока очередная версия драйверов не попробует это все исправить. Кстати, самая правильная фильтрация — программная. Не смейтесь! В Direct3D возможно использование режима, когда картинка, полученная программным способом, практически не будет отличаться от аппаратной. Вот это и есть настоящая эмуляция. Кстати, использование акселератора не обязательно означает наличие гладких текстур. Обычно графические API позволяют делать выбор из нескольких способов текстурирования. Подробней об этом можно почитать в документации, а для наглядности давайте немного поиздеваемся над Quake’ом. Запустите Quake III , в консоли наберите r_textureMode “GL_NEAREST” , и после рестарта графики можете наслаждаться динамическим освещением и “софтовыми” текстурами. Мип-маппинг Если текстурированный объект находится далеко от зрителя, он будет очень маленький и плохо различимый. Поэтому нам наплевать, какого разрешения на нем будет использоваться текстура. И было бы неплохо, пока никто не видит, взять и натянуть на этот объект текстурку поменьше, дабы сэкономить немного процессорного времени для более важных вещей. Сказано — сделано! Теперь в духовно-информационном пространстве, иногда именуемом Миром, появляется такое понятие, как мип-маппинг , заключающееся в использовании текстур более маленького разрешения для более удаленных объектов. Прелесть ситуации состоит в том, что мелкие текстуры автоматически генерируются из исходной во время загрузки сцены/уровня/игры. Алгоритмы этого процесса заложены в графическом API (DirectX Graphics, OpenGL). В соответствии с установками Mip-Map уровней, которые еще можно делать через меню драйверов видеокарты, создается определенное количество текстур, каждая из которых отправляется на хранение в видеопамять. Проходит секунда, и нужная текстурка выползает оттуда на свет божий, покуда ее не сменит более крупный или более мелкий собрат. Уровни мип-маппинга хорошо видно на скрине из того же “Квейка”. Основы практики Есть еще много вопросов для рассмотрения: нанесение на текстуры окружающей поверхности, рельефное текстурирование, мультитекстурирование и все, все, все… Однако пора бы уже заканчивать с интересной, но неспособной ни на что, кроме загруза мозга, теорией. Переходим к практике. Самые важные моменты мы осветили, и посему терминология программ, где используются текстуры, теперь должна быть понятна. Итак, если вы балуетесь созданием уровней для известных игр, а уж тем более если клепаете нечто самопальное, вам потребуются собственные текстуры. В первом случае — для внесения разнообразия в уже опостылевший всем ландшафт, а во втором — чтобы не сочли за работника калько-литейной промышленности. Какие же программы и ресурсы необходимы для полноценной работы? Сырье Основу для текстуры можно создать двумя способами: первый — сгенерировать на компьютере. Второй — взять готовую фотографию. Первый способ подразумевает, что вы используете некую программу, которая по определенному алгоритму выдаст вам результат в виде психоделической картинки. Самый простой вид — случайные точки, разбросанные по гладкой поверхности. Посмотреть это можно с помощью фильтра Noise (Шум), который есть в каждом уважающем себя графическом редакторе. Берем два зеленых квадрата, рисуем на каждом разноцветный шум, объединяем со смешиванием и

Текстурирование в играх - фото 5

Третий Квейк обзавелся софтовыми текстурами. А вы говорите, прогресс…
размываем. В результате получаем нечто подозрительно похожее на травку. Газонную. Точно так же получаются волны, кирпичики, вода и огонь. Есть и более изощренные алгоритмы. Если вы заинтересовались, покопайтесь в литературе по программному созданию текстур — это излюбленное занятие создателей 64k демок. Или займитесь фракталами — порой результаты получаются самые неожиданные. Фотографии в чистом виде почти непригодны для обволакивания поверхностей. Уж слишком уродливыми и нереальными получаются объекты реального мира, перенесенные в виртуальный. Пока вы думаете над философским аспектом данного вопроса, я продолжу. Во-первых, с фотографии надо убрать шумы, черточки и прочую грязь. Переходы тени там тоже ни к чему. Равно как и света. У нас солнце свое есть — нечего тут конкуренцию разводить. Ненужные детали — вон. Детализацию лица или другой части тела — размыть. Вооружившись терпением и горкой плагинов, можно добиться от фотографии плоского и нереалистичного вида. Чего мы и хотели.Блокнотик в клеточку : Фотореалистичные текстуры — ха! Попробуйте-ка натянуть снимочек соседа Пети на полигональную личину любимого бота в UT. Ну и что, чувствуете фотореалистичность? Ладно, ладно, можете выключить. Про фото-эту-самую нам мозги закапывали еще со времени рекламной кампании Voodoo 2. И что? Все красивые сцены в буклетиках, как ни крути, все равно используют текстуры, рисованные по проторенным алгоритмам, и лишь их разрешение со временем растет. Область применения фототекстур — копии реальных объектов, задние и крупные планы да скины. Еще они могут быть черно-белой основой для поверхностей, генерируемых программным путем (Bump-Map). Последнее, кстати, один из лучших способов создания текстур. Bump-Map — это такая черно-белая картинка, по-русски называемая картой глубины. Нехитрым путем полученная из фотографии, скажем, стены, она еще более нехитрым методом раскрашивается, и получается нереальная копия реальной поверхности. Само собой, именно то, что получилось и будет использоваться при текстурировании. Инструментарий Наверное, первое, чем можно посоветовать запастись, — это всенародный любимец, тов. Photoshop. Если у вас к нему по каким-то причинам врожденная неприязнь, то возьмите любой другой растровый графический редактор , обладающий

Текстурирование в играх - фото 6

Пол является живой иллюстрацией абзаца про мип-маппинг.
похожим набором функций. Основной задачей при изготовлении текстур является обработка готовых изображений с целью создания “тайлового” эффекта. То есть чтобы при составлении друг с другом кусочки изображений формировали одно непрерывное полотно. “Фотошоп” хорош тем, что прямо в нем, без использования дополнительных плагинов, можно лепить тайлы, как на конвейере. Это довольно простой трюк, который, тем не менее, требует артистических способностей. Загружаете картинку, применяете к ней встроенный фильтр offset , сдвигая левый верхний угол прямо в центр, а затем затираете получившийся шов инструментом Clone Stamp. Чем однороднее будет исходная картинка, тем лучше получится результат. Таким образом можно делать ровные поверхности вроде каменных стен, асфальта, песка, травы. В “Фотошопе” же с помощью Quick Mask можно создавать переходы одной поверхности в другую. Описание процесса можно найти во многих учебниках по фотомонтажу. Незаменимым он оказывается при обработке готовых фотографий, о смысле которой только что говорилось. Следующий вид инструмента — трехмерный моделер. Он нужен вам по двум причинам: во-первых, вы можете быстро оценить, как созданная текстура смотрится на трехмерных объектах (так и хочется сказать “в жизни”). Во-вторых — например, в 3DStudio MAX есть много средств обработки и создания текстур. Там и фильтры, придающие больше реализма, и прозрачности, смешения, светотени. Оригинальная программа также есть в комплекте установки Corel DRAW! и носит название Corel TEXTURE , недвусмысленным образом указывающее на ее назначение. Текстуры здесь создаются по принципу слоев. Помните пример с травой? Тут — то же самое. Сделали первый слой в виде кирпичиков, раскрасили, добавили второй слой — волны, опять раскрасили, наложили источники света да пару эффектов. Что получилось — черт разберет, но красиво, практично, а главное — быстро. В добрый путь Надеюсь, я вбил в стопы вам надежные подковы, и теперь, если сможете оторвать все это от земли, — в путь! Помните, что над текстурами надо трудиться долго и с творческим походом, ведь хорошая текстура — залог приятного самочувствия глаза и восхищения поклонников. Если физика влияет на механическое восприятие, звук и музыка — на эмоциональное, то текстуры — на чувственное восприятие игры.

Комментарии
Чтобы оставить комментарий, Войдите или Зарегистрируйтесь