В этом третьем разделе, где мы более подробно рассмотрим создание 3D-игр, мы сосредоточимся на том, что происходит с 3D-миром после обработки углов и растрирования сцены. Конфигурация является одним из наиболее важных этапов рендеринга, хотя все, что происходит, рассчитывается и заменяется двумерной сеткой цветных блоков.

Большинство визуальных эффектов, наблюдаемых в играх сегодня, зависят от умного использования текстур - игры без них становятся скучными и безжизненными. Итак, давайте погрузимся и посмотрим, как это работает!

Как всегда, если вы не готовы глубоко нырнуть в ткань, не паникуйте - вы можете начать Создание 3D игры 101, Но как только основы пройдут, читайте дальше, чтобы увидеть наш следующий взгляд на мир трехмерной графики.

Эпизод 0: Создание 3D игры 101
Создание описанной графики

Эпизод 1: Как работает создание 3D-игр: обработка углов
Глубокое погружение в мир 3D-графики
Часть 2: Как работает создание 3D-игр: растеризация и трассировка лучей
От 3D до плоского 2D, POV и освещения
Глава 3: Как работает создание 3D-игр: текстурированные
Билинейная, трилинейная, анизотропная фильтрация, картирование клубней и многое другое

Давайте начнем с простого

Выберите самые продаваемые 3D-игры за последние 12 месяцев, и все они будут иметь что-то общее: текстурные карты (или просто текстуры). Это очень распространенный термин, большинство людей создают одно и то же изображение при рассмотрении текстур: простой плоский квадрат или прямоугольник (трава, камень, металл, одежда, лицо и т. Д.), Который содержит изображение поверхности.

Однако при использовании в нескольких слоях и комбинировании с использованием сложной арифметики использование этих основных изображений на трехмерной сцене может привести к удивительно реалистичным изображениям. Чтобы увидеть, как это возможно, давайте пропустим их полностью и посмотрим, как объекты в трехмерном мире могут выглядеть без них.




Как мы видели в предыдущих статьях, трехмерный мир состоит из углов - простых форм, которые можно переместить и раскрасить позже. Затем они используются для создания примитивов, которые также сжимаются в сетку 2D пикселей. Поскольку мы не будем использовать текстуры, нам нужно покрасить эти пиксели.




Это называется метод, который можно использовать прямое затенениевключает в себя выбор цвета первой вершины примитивного вещества, а затем использование этого цвета для всех пикселей, попадающих в область формы в растре. Это выглядит так:




Очевидно, что это не реалистичный чайник, по крайней мере, цвет поверхности неправильный. Цвета переходят с одного уровня на другой, плавного перехода нет. Решением этой проблемы может быть использование чего-то под названием Затенение Гуро.




Это процесс, который берет цвета углов и вычисляет, как цвет меняется по всей поверхности треугольника. Математика используется линейная интерполяцияЭто означает, что хотя это выглядит причудливо, в действительности, если цвет одной примитивной стороны равен 0,2 красного, а другой стороне - 0,8 красного, форма имеет цвет от 0,2 до 0,8 (т.е. 0,5).

Это относительно просто сделать, и его главное преимущество - скорость. Многие ранние 3D-игры использовали эту технику, потому что аппаратные средства, которые делали вычисления, были ограничены тем, что они могли сделать.




Но даже у этого есть свои проблемы, потому что, если свет указывает прямо в середине треугольника, его углы (углы) могут не поймать его должным образом. Это означает, что блики, вызванные светом, могут быть полностью пропущены.




В то время как в арсенале рендеринга включены плоские и затенения Гуро, вышеприведенные примеры являются открытыми кандидатами на использование текстур для их исцеления. И чтобы лучше понять, что происходит, когда текстура накладывается на поверхность, мы вернемся в прошлое ... до 1996 года.

Краткая история игры и GPU

Quake - знаковая игра, выпущенная 23 года назад id Software, Хотя это была не первая игра, в которой для создания среды использовались 3D-полигоны и текстуры, она была одной из первых, кто использовал их все так эффективно.

Еще одна вещь, которую он сделал, - показать, что можно сделать с OpenGL (графический API все еще находился в его первой редакции), и он также помог продать первый продукт с видеокартами. Verite Comment ve 3Dfx Vudu.

По сравнению с сегодняшними стандартами, Voodoo был чрезвычайно прост: нет поддержки 2D-графики, нет обработки углов, и только основы обработки пикселей. Это была еще красота

У него был целый чип (TMU), чтобы получить пиксель из текстуры, а затем еще один чип (FBI), чтобы смешать его с пикселем из растра. Он может делать несколько дополнительных вещей, таких как создание эффектов тумана или прозрачности, но это было почти все.

Если мы дадим обзор архитектуры, которая лежит в основе дизайна и работы видеокарты, мы увидим, как эти процессы работают.

Чип ФБР принимает два цветовых значения и объединяет их; один из них может быть значением из ткани. Процесс смешивания математически довольно прост, но он немного отличается от того, что именно смешивается, и от того, какой API используется для выполнения инструкций.

Что мы смотрим Direct3D предлагает Что касается функций смешивания и операций смешивания, мы можем видеть, что каждый пиксель сначала умножается на число от 0,0 до 1,0. Это определяет, насколько цвет пикселя повлияет на окончательный вид. Затем устанавливаются два пиксельных цвета, вычитаются или дублируются; В некоторых функциях операция всегда является логическим выражением, в котором выбирается нечто вроде самого яркого пикселя.

Изображение выше - пример того, как это работает на практике; коэффициента, используемого для левого пикселя альфа стоимость. Это число, прозрачный пиксели.

Остальные шаги включают в себя применение значения тумана (берется из таблицы программ, созданной программистом, затем выполняет ту же математику смешивания); сделать некоторые проверки и корректировки видимости и прозрачности; прежде чем, наконец, записать цвет пикселя в память на видеокарте.

Почему урок истории? Несмотря на относительную простоту дизайна (особенно по сравнению с современными гигантами), этот процесс объясняет основные основы текстурирования: получить некоторые цветовые значения и смешать их, чтобы модели и среды смотрели на то, как это должно быть в конкретной ситуации.

Сегодняшние игры все еще делают это, единственная разница - количество используемой текстуры и сложность расчетов смешивания. Вместе они моделируют визуальные эффекты, которые можно увидеть в фильмах, или то, как свет взаимодействует с различными материалами и поверхностями.

Основы текстурирования

Для нас текстура - это плоское двухмерное изображение, которое применяется к полигонам, которые составляют трехмерные структуры в отображаемом кадре. Для компьютера это всего лишь маленький блок памяти в виде двумерного массива. Каждая запись в массиве представляет значение цвета для одного из пикселей в текстурном изображении (более известный) текстовый наполнитель - пиксели текстуры).

Каждая вершина в многоугольнике имеет 2 координаты (обычно сен, v) сообщает, какой пиксель в текстуре связан с ним. Сам угол имеет 3 набора координат (X ve Z) и набирать текст по углам. наложение текстуры.

Чтобы увидеть это в действии, давайте обратимся к инструменту, который мы использовали несколько раз в этой серии статей: Создание в реальном времени WebGL инструмент. На данный момент, z координируйте от углов и держите все в плоской плоскости.

У нас есть текстура слева направо сен, v координаты, сопоставленные непосредственно с угловыми углами х, у координаты. Тогда верхние углы y его координаты увеличились, но, поскольку текстура все еще напрямую связана с ними, текстура растягивается вверх. На изображении справа, на этот раз меняется текстура: u значения увеличились, но это приводит к тому, что ткань раздавливается и затем повторяется.

Поскольку текстура теперь эффективно длиннее, выше u Его значение должно вписываться в примитив - по сути текстура была частично повторена. Это способ сделать то, что можно увидеть во многих 3D играх: tповторение, Типичные примеры этого можно найти в сценах со скалистыми или травянистыми пейзажами или кирпичными стенами.

Теперь давайте сделаем сцену более примитивной и вернем глубину в игру. Ниже представлен классический вид ландшафта, но текстура ящика копируется и повторяется среди примитивов.

Теперь эта текстура ящика весит 66 кг в оригинальном формате gif и имеет разрешение 256 x 256 пикселей. Исходное разрешение части кадра, покрытой текстурами ящика, составляет 1900 x 680, поэтому эта область должна отображать только 20 текстур ящика только с точки зрения пикселя «площадь».

Мы явно выбираем более 20 путей, так много текстур сундуков на заднем плане. очень Меньше, чем 256 х 256 пикселей. Действительно, они прошли и прошли через процесс сокращение тканей (да, это слово!). Попробуем еще раз, но на этот раз он приблизился к одному из сундуков.

Обратите внимание, что текстура имеет размер только 256 x 256 пикселей, но здесь мы можем видеть, что текстура составляет более половины ширины изображения шириной 1900 пикселей. Эта текстура прошла через то, что называется увеличение ткани.

Эти два текстурных процесса всегда происходят в 3D-играх, потому что все текстуры, применяемые к примитивам, должны масштабироваться вместе с полигонами, когда камера перемещается вокруг сцены или когда модели приближаются и удаляются. Математически, это не имеет большого значения, на самом деле, даже самые простые интегрированные графические чипы мигают в такой работе. Тем не менее, сокращение и увеличение ткани создают новые проблемы, которые необходимо каким-то образом решить.

Введите мини-текстуры

Первая проблема, которую нужно исправить, касается отдаленных тканей. Если мы снова посмотрим на первое изображение ландшафта ящика, то правильные горизонты имеют размер всего несколько пикселей. Бессмысленно по двум причинам пытаться сжимать изображение размером 256 x 256 пикселей в такую ​​маленькую область.

Во-первых, меньшая текстура занимает меньше места на видеокарте, что полезно при попытке разместить небольшой объем кеша. Это означает, что вероятность его удаления из кеша меньше, и повторное использование этой текстуры позволит в полной мере использовать данные в ближайшей памяти. Вторая причина, по которой мы подошли на мгновение, потому что это зависит от той же проблемы для увеличенных текстур.

Распространенное решение для использования больших тканей, раздавленных маленькими примитивами, связь, Это минимизированные версии оригинальной текстуры; сам игровой движок может быть создан (используя соответствующую команду API, чтобы сделать это) или может быть сделан заранее разработчиками игры. Каждый уровень ткани mipmap имеет половину линейных размеров предыдущего.

Для текстуры ящика происходит нечто подобное: 256 x 256 → 128 x 128 → 64 x 64 → 32 x 32 → 16 x 16 → 8 x 8 → 4 x 4 → 2 x 2 → 1 x 1.

MipMap все упакованы вместе, поэтому текстура с тем же именем файла, но теперь она больше. Ткань упакована таким образом, что сен, v его координаты не только определяют, какой тексель будет применен к пикселю в кадре, но также и из какого mipmap. Затем программисты кодируют средство визуализации, чтобы определить мип-карту, которая будет использоваться, на основе значения глубины квадратного пикселя, поэтому, если он слишком велик, пиксель находится на расстоянии, так что можно использовать небольшой мип-карту.

Читатели с острыми глазами могли видеть недостаток мипмапов и приходить за счет больших текстур. Исходная текстура ящика имеет размер 256 x 256 пикселей, но, как вы можете видеть на рисунке выше, текстура с растровым изображением теперь имеет размер 384 x 256. Да, там много свободного места, но независимо от того, как вы упаковываете его в меньшие текстуры, общее увеличение хотя бы до одного из размеров ткани составляет 50%.

Однако это относится только к заранее подготовленным мипмапам; Если игровой движок запрограммирован для их правильного воспроизведения, увеличение никогда не может превышать 33% от исходного размера текстуры. Таким образом, вы получаете преимущества в производительности и визуальные улучшения для относительно небольшого увеличения памяти в тканевых мипмапах.

Ниже приводится закрытое / открытое сравнение тканевых мипмапов:

С левой стороны изображения текстуры ящика используются «как есть», что приводит к зернистому виду и предположительно муаровые узоры прочь. Однако, с правой стороны, использование мипмапов вызывает намного более мягкий переход по ландшафту, где текстура ящика превращается в постоянный цвет на горизонте.

Однако кому-то нужны нечеткие текстуры, которые нарушают фон их любимой игры?

Билайнер, тройные полосы, анизотропный - все греческое для меня

Процесс выбора пикселей из текстуры для применения к пикселю в кадре отбор проб ткании в идеальном мире, его размер, положение, направление и т. д. независимо от его текстуры, это будет текстура, которая точно соответствует ее принципу. Другими словами, выборка текстуры - это не что иное, как процесс преобразования плоских пикселей в пиксель 1: 1.

Поскольку это не так, при отборе образцов ткани необходимо учитывать ряд факторов:

  • Текстура увеличена или уменьшена?
  • Текстура оригинальная или мипмап?
  • Под каким углом показана текстура?

Давайте проанализируем их один за другим. Первое достаточно ясно: если текстура будет увеличена, будет больше текста, охватывающего примитивный пиксель больше, чем необходимо; С уменьшением будет все наоборот, каждый тексель теперь должен покрывать более одного пикселя. Это немного проблемы.

Во-вторых, мипмапы оставляют ткани под углом, так как они используются для обхода проблемы отбора проб ткани с отдаленными примитивами. И да, это тоже проблема. Зачем? Поскольку все текстуры создаются для вида «открытым лицом», или все они похожи на математические: нормальная поверхность текстуры совпадает с поверхностью, отображаемой на ткани.

Поэтому иметь слишком мало или слишком много текстур и иметь текстуры под углом, тканевая фильтрация, Если вы не используете этот процесс, вот что вы получите:

Здесь мы заменили текстуру ящика на текстуру буквы R, чтобы более четко показать, насколько много путаницы она будет иметь без фильтрации текстуры!

Графические API, такие как Direct3D, OpenGL и Vulkan, предлагают одинаковые типы фильтрации диапазона, но используют для них разные имена. На самом деле все это выглядит так:

  • Ближайшая точка отбора проб
  • Линейная фильтрация текстур
  • Анизотропная фильтрация тканей

Для всех намерений и целей, выборка ближайшей точки если это не фильтрует - это потому, что это самый близкий пиксель к пикселю, который требует выборки (то есть копирование его из памяти) и затем смешивание пикселя с его оригинальным цветом.

Здесь на помощь приходит линейная фильтрация. необходимые сен, v координаты текселя отправляются на оборудование для выборки, но вместо получения ближайшего текселя к этим координатам, сэмплер четыре тексели. Они находятся прямо над, под, слева и справа от того, который выбран с использованием выборки ближайшей точки.

Эти 4 ткани затем смешиваются с использованием взвешенной формулы. Например, формула в Vulkan:

T "Цвет", f Четыре образца ткани для слива и от 1 до 4. ценности альфа ve бета Как далеко от точки, определенной сен, v координаты приходят из середины крана.

К счастью, любой, кто участвует в 3D-играх, независимо от того, играет он или играет, автоматически попадает в этот чип обработки графики. Фактически, чип TMU в 3dfx Voodoo сделал это: он отобрал 4 сингла, а затем смешал их. Direct3D называет это странно билинейная фильтрация, однако, со времен Quake и чипа Voodoo TMU, графические карты могли фильтровать всего за один час (если текстура удобно размещается в тесной памяти), конечно.

Линейная фильтрация может использоваться вместе с мип-картами, и если вы действительно хотите проявить интерес к своей фильтрации, вы можете взять 4 текста из одной текстуры, затем еще 4 из следующего уровня мипмапа и затем объединить их. И название Direct3D для этого? трехлинейный фильтрация. какой tri об этом процессе? Ваше предположение так же хорошо, как и наше ...

Последний упомянутый метод фильтрации называется anizotrop. Это на самом деле регулировка в соответствии с процессом для билиарной или трилинейной фильтрации. Первоначально степень анизотропии примитивная поверхность (и удивительно сложный) - это значение изменяет соотношение сторон примитива из-за его ориентации:

Изображение выше показывает тот же квадратный принцип с краями равной длины; но когда мы отходим от нашей перспективы, квадрат выглядит как прямоугольник, а его ширина становится выше его высоты. Таким образом, примитив справа имеет большую анизотропию, чем слева (а в случае квадрата степень точно равна нулю).

Большинство современных 3D-игр позволяют вам включать анизотропную фильтрацию и затем регулировать ее уровень (от 1x до 16x), но что это на самом деле меняет? Настройка контролирует максимальное количество дополнительных выборок текселя, взятых на исходную линейную выборку. Например, допустим, в игре используется 8-кратная анизотропная билинейная фильтрация. Это означает, что вместо того, чтобы принимать только 4 текстовых значения, он принесет 32 значения.

Понятно, что при использовании анизотропной фильтрации можно заметить:

Просто проведите немного вверх и сравните выборку ближайшей точки для максимальной 16-кратной анизотропной трилинейной фильтрации. Так гладко, почти вкусно!

Но должна быть цена, чтобы заплатить за все эти прекрасные ароматы масляной текстуры и определенно производительность: вся максимальная анизотропная трилинейная фильтрация принесет 128 выборок из одной текстуры для каждого обработанного пикселя. Даже для лучших современных графических процессоров это невозможно сделать за один такт.

Если мы получим что-то вроде AMD Radeon RX 5700 XTОтметить, что каждый блок ткани внутри процессора может закрыть 32 адреса текселей в одном цикле синхронизации, затем загрузить 32 текселя из памяти (каждый размер 32 бита) в другом цикле синхронизации, а затем собрать 4 позже. Поэтому он был смешан для 128 образцов текселя, которые требуют цикла по меньшей мере 16 часов.

Теперь базовая тактовая частота 5700 XT составляет 1605 МГц, поэтому шестнадцать циклов занимают всего 10 nanosaniye, Просто сделайте это для каждого пикселя в кадре 4K. один единица ткани все еще заняла бы только 70 миллисекунд. Хорошо, возможно, производительность не имеет значения!

Даже в 1996 году 3Dfx Voodoo был довольно стильным в работе с текстурами. Максимум может быть задан в 1 билинейно фильтрованном текселе в час, и в то время как чип TMU работал на частоте 50 МГц, это означало, что 50 миллионов тексинов могут быть вырезаны каждую секунду. В игре со скоростью 800 x 600 и 30 кадров в секунду требуется только 14 миллионов в секунду текста.

Тем не менее, все это предполагает, что текстуры находятся в близлежащей памяти, и что на каждый пиксель отображается только один texin. Двадцать лет назад идея применения более чем одной текстуры к принципу была почти совершенно незнакомой, но теперь она обычна. Давайте посмотрим, почему произошло это изменение.

Освещая путь к впечатляющим изображениям

Взгляните на эту сцену из Quake, чтобы понять, как ткань стала настолько важной:

Это темное изображение было природой этой игры, но вы можете видеть, что тьма не везде одинакова - пятна на стенах и полу ярче других, чтобы дать общее ощущение освещения в этой области.

Примитивы, формирующие стороны и пол, имеют одинаковую текстуру, но есть вторая текстура. световая картасмешивается со значениями текселей, прежде чем они сопоставляются с квадратными пикселями. Во время Quake дни световые карты были предварительно рассчитаны и созданы игровым движком и использовались для создания статических и динамических уровней освещения.

Преимущество их использования заключалось в том, что сложные расчеты освещения выполнялись на текстурах, а не на углах, что особенно улучшало внешний вид сцены и очень мало стоило производительности. Очевидно, что он не идеален: как вы можете видеть на земле, граница между освещенными участками и областями в тени очень проста.

Во многих отношениях карта освещения - это просто еще одна текстура (помните, что все они, кроме двухмерных массивов данных), поэтому мы смотрим на раннее использование того, что известно. множественная текстура, Как следует из названия, это процесс, в котором два или более касаний применяются к принципу. Использование световых карт в Quake было решением для преодоления ограничений затенения Гуро, но по мере роста возможностей графических карт росли и приложения для нескольких дисков.

3Dfx Voodoo, как и другие карты своей эпохи, был ограничен тем, сколько он мог сделать в рендере проходить, По сути, это полная последовательность рендеринга: от обработки углов до растрового кадра, а затем изменения пикселей до конечного буфера кадра. Двадцать лет назад игры почти всегда делали один проход.

Причиной этого было то, что это было очень дорого с точки зрения производительности, так как вы хотите обработать углы дважды, только чтобы применить больше текстуры. Через несколько лет после Voodoo нам пришлось подождать, пока появятся графические карты ATI Radeon и Nvidia GeForce 2, чтобы мы могли сделать мульти-рисование за один переход.

Эти графические процессоры имели несколько текстурных блоков на секцию обработки пикселей (т.е. трубопроводЭто было легко, чтобы принести фильтрованный тексель из двух отдельных текстур. Это сделало световое отображение еще более популярным и изменило световые значения из-за изменений в игровой среде, сделав игры полностью динамичными.

Но с помощью нескольких текстур можно сделать гораздо больше, поэтому давайте посмотрим.

Умножить высоту нормально

В этой серии статей о 3D-рендеринге мы не рассмотрели, как роль графического процессора действительно подходит для всей проблемы (мы сделаем это еще, пока нет!). Но если ты вернешься Эпизод 1и посмотрите на всю сложную работу обработки углов, вы можете подумать, что это самая сложная часть всего массива для графического процессора для рендеринга.

Это было в течение долгого времени, и разработчики игр сделали все возможное, чтобы уменьшить эту нагрузку. Это означало достать сумку визуальных трюков и убрать как можно больше ярлыков и трюков, создавая одинаковый визуальный облик повсеместного использования нескольких углов, но на самом деле их не много для запуска.

И большинство этих трюков, карты высот ve карты нормалей, Эти два факта связаны с тем фактом, что второе может быть создано из первого, но сейчас давайте просто рассмотрим метод, называемый: рельефное отображение.

Картирование клубней включает использование 2D-последовательности, называемой картой высот, которая выглядит как единственная версия оригинальной ткани. Например, на изображении выше реалистичная текстура кирпича, нанесенная на 2 плоские поверхности. Карта текстуры и высоты выглядит так:

Цвета карты высот соответствуют нормам поверхности кирпича (мы рассмотрели то, что является нормой). Эпизод 1 эта серия статей). Когда последовательность визуализации достигает точки применения текстуры кирпича к поверхности, выполняется серия вычислений, чтобы отрегулировать цвет текстуры кирпича до нормального.

В результате, хотя кирпичи все еще полностью плоские, они выглядят более трехмерными. Особенно, если вы внимательно посмотрите на края кирпичей, вы можете увидеть границы техники: текстура выглядит немного скрученной. Тем не менее, для быстрого добавления большего количества деталей к поверхности очень популярно картирование клубней.

Карта нормалей похожа на карту высот, но цвета этой текстуры сами по себе нормальны. Другими словами, расчет не требуется для нормализации карты высот. Вы можете задаться вопросом, как цвета можно использовать для обозначения стрелки в пространстве. Ответ прост: каждый тексель является конкретным R, G, B значения (красный, зеленый, синий), и эти числа непосредственно X ve Z значения для нормального вектора.

В приведенном выше примере левая диаграмма показывает, как направление нормали изменяется на неровной поверхности. Чтобы представить одинаковые нормали в плоской текстуре (средняя диаграмма), мы назначаем им цвет. В нашем случае R, G, B Увеличивая значения (0.255.0) для прямой, а затем количество красного для левого и синего для правого.

Обратите внимание, что этот цвет не смешивается с исходным пикселем - он сообщает процессору, в каком направлении направлена ​​нормаль, чтобы камера могла точно рассчитать углы между источниками света и текстурированной поверхностью.

Когда на сцене используется динамическое освещение, преимущества рельефного и нормального соответствия действительно сияют, а процесс рендеринга вычисляет эффекты изменения освещенности для каждого пикселя, а не для каждого угла. Современные игры используют много текстур, чтобы улучшить качество магии.

Эта реалистично выглядящая стена невероятно просто плоская поверхность - детали о кирпиче и строительном растворе сделаны не из миллионов полигонов. Вместо этого он делает только 5 текстур и много умных математических заданий.

Карта высот использовалась для создания карты нормалей для имитации пути затенения кирпичей к себе и всех незначительных изменений на поверхности. Текстура шероховатости использовалась для изменения того, как свет отражает различные элементы стены (например, кирпич с гладкой поверхностью отражает более равномерно, чем грубый раствор).

Последняя карта, помеченная AO на изображении выше, является частью процесса, называемого перегрузкой носителей: это метод, который мы рассмотрим в следующей статье, но пока это просто тени.

Подбор тканей очень важен

Это абсолютно необходимо для текстурированного игрового дизайна. Получите версию Warhorse Studio 2019 года Царство грядет: спасение РПГ от первого лица, основанная в Богемии 15-го века, древней стране на Среднем Востоке Европы. Дизайнеры стремились создать максимально реалистичный мир для рассматриваемого периода. И лучший способ оживить актера сотни лет назад - это каждый пейзаж, здание, комплект одежды, прически, повседневные товары и т. Д. Это должно было иметь правильный взгляд на это.

Каждая уникальная текстура на этом отдельном изображении в игре была сделана художниками и их использование контролером рендера, управляемым программистом. Некоторые из них маленькие, простые и требуют очень мало для фильтрации или обработки других тканей (таких как куриные крылышки).

Другие имеют высокое разрешение и показывают много мелких деталей; фильтруется анизотропно и смешивается с картами нормалей и другими текстурами - достаточно взглянуть на лицо человека на переднем плане. Различные требования текстурирования каждого элемента на сцене объясняются программистами.

Все это происходит сейчас во многих играх, потому что игроков ждут больше деталей и реализма. Текстуры будут расти и будут больше использоваться на поверхности, но процесс выборки текста и применения его к пикселям будет практически таким же, как в дни Quake. Лучшие технологии никогда не умрут, сколько бы лет!