Всем привет! Меня зовут Григорий Дядиченко, и я технический продюсер. Сегодня хочется поговорить о текстурах. О том, что такое uv маппинг, mip map и о других базовых понятиях компьютерной графики. Что такое тексел или тексель?

Если вам интересна эта тема — добро пожаловать под кат!

Многие недооценивают основные базовые понятия. Многие споры вообще возникают из‑за разного понимания каких‑то нюансов и терминов. Есть такое замечательное понятие скажем как тексел. Это простое и базовое понятие. При этом в википедии оно написано на мой взгляд неоднозначно и зачем‑то связано с трёхмерным объектом. Эти понятия связаны, но не так и не по той причине.

Плюс зачем‑то есть лишние слова вроде «минимальная единица текстуры трёхмерного объекта». Что это значит? Совершенно непонятно.

Тексел

Новые текстуры зелий и керамического осколка, отладка | 1.19.4 pre-3 #shorts

Так что же такое тексел? Во‑первых, не стоит его путать с тексель, так как это порода овец. А тексел — это пиксель текстуры. И ничего более. Чтобы лучше его понять, лучше разобрать, а зачем этот термин вообще появился?

Ведь есть пиксель, зачем пиксель в картинке называть как‑то по‑другому?

В задачах рендера иначе бы всё звучало как «едет пиксель через пиксель видит пиксель пиксель пиксель». Дело в том, что помимо пикселя в текстуре существует пиксель на экране монитора и по этой причине, чтобы не путаться, появился тексел. Этот термин становится удобным, когда мы обсуждаем что такое сэмплирование, фильтрация текстур, мип‑мапинг.

Все эти процессы связаны с тем, как работает рендер растровой графики, и что происходит, когда текстура разрешения большего (или меньшего) экрана отображается на нём. Ведь если у вас экран 1920×1080, а вы на весь экран выводите картинку 2048×1024, то нужно как‑то определить, какие именно пиксели из картинки попадут в пиксели экрана. У мониторов нет дробных диодов. Число диодов целое и выводят они один цвет. Поэтому нужны механизмы того, как мы выведем нашу картинку на экран.

А в 3д всё ещё немного сложнее. Так как картинка «натягивается» на произвольную форму. И там разрешение может отличаться в зависимости от приближения или отдаления от модели камеры. И так далее. С такими проблемами можно столкнуться в VR, AR и играх.

Итак, с текселем мы разобрались. Разберёмся и с остальным.

Чтобы перейти от 2д картинки к отображению её на мониторе и в 3д нам понадобится ещё одно понятие. Называется оно UV координаты.

UV-координаты

Самая простая аналогия, чтобы понять что такое развёртка. Это оригами. Представьте, что вы заранее разукрасили схему оригами, а потом собираете из неё что‑то. Лист, который вы изначально раскрашивали — это ваша текстура. А собранная зверушка — модель.

как установить lego текстуры на minecraft

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

Приводя пример всё же из компьютерной графики. Выглядит это как‑то так.

Текстура (пиксели которой наши тексели):

Сетка 3д модели:

Модель с текстурой и отображением сетки:

UV координаты (или текстурные координаты) — это координаты, которые записываются в вершины модели и определяют то, как на модель будет наложена текстура. Это даёт нам соответствие между координатами в пространстве и как должна отображаться на них текстура. Обычно они принимают значение от (0; 0) до (1; 1). Получение цвета из текстуры по текстурным координатам называется сэмплингом.

И тут у нас возникает проблема. У нас есть текстура, которая выводится на модель. Логика наложения текстуры у нас подчиняется тому, что координаты от 0 до 1. То есть они могут быть дробными. А текстура состоит из текселей (то есть пикселей), которые не бывают дробными. Если у вас текстура 128×128 разрешением именно из стольки текселей она и состоит.

Читайте также:  Анти читы для Майнкрафт

И что делать дальше?

Фильтрация Текстур

У нас есть три игрока в этой задаче. Пиксели экрана, uv и тексели. И по сути три случая.

  1. Тексел покрывает ровно один пиксель экрана после преобразования из uv и обратно (так в графике почти не бывает)
  2. Тексел покрывает много пикселей (это называется магнификация)
  3. Пиксель покрывает много текселей (это называется минификация)

Магнификация

Магнификация — это как мы говорили выше, когда у нас в одном текселе оказывается много пикселей. Чтобы решить что будет отображаться на пикселе используется фильтрация. Первый из фильтров Nearest Neighbour или Box Filter или в Unity он называется Point. Тут проще объяснять показывая как он выглядит на картинках. Возьмём картинку с котиком в низком разрешении и включим Point фильтрацию.

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

Второй вид фильтрации — это Linear Filtering или ещё вы её знаете, как Bilinear Filtration. Выглядеть она будет вот так.

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

Третий вид фильтрации — это Cubic или же Bicubic. Но он почти не поддерживается железом, и поэтому в той же Unity его нет. Trilinear Unity — это модификация билинейной фильтрации с использованием информации из Mip Map (разберём что это чуть позже).

В зависимости от целей выбирается фильтрация необходимая.

Минификация

Картинки конечно не самые симпатичные, но надеюсь понятные. Минификация — это как мы говорили выше, когда у нас в одном пикселе оказывается много текселей. Для того, чтобы получить нужный цвет «по‑честному» надо рассчитать влияние каждого текселя на цвет пикселя. Это дорого для GPU и невозможно делать эффективно в реальном времени.

Из‑за ограничений железа используются те же самые методы фильтрации, что и при магнификации. Но все они так или иначе ведут к так называемому алиасингу (или лесенке, которую вы наверняка часто встречали) или temporal aliasing. Выглядит это как‑то так.

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

Но алгоритмы антиалиасинга — это не единственный метод борьбы с данным эффектом. И тут мы плавно подходим к следующему понятию. Мипмапы.

MIP-текстурирование

Картинка взята с https://learnopengl.com/Getting-started/Textures

Если текселов больше, чем пикселей то, рассчитать нужный нам пиксель мы не можем в реальном времени. Мы можем это пред рассчитать. Сделав серию текстур, каждая из которых меньше предыдущей. Такие текстуры называются Mip Maps.

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

В заключении

Я постарался рассказать основные понятия текстурного пайплайна в рендере и смысл понятия текселя простым языком. Если вам понравилось и было интересно — ставьте плюсы. Так я пойму, что такой формат статей может быть интересен и могу разобрать другие понятия из рендера. Тот же пресловутый алиасинг.

Подписывайтесь на мой блог в телеграм, если вам интересна Unity разработка.

Learn OpenGL. Textures
Real-Time Rendering 4th Edition [2019] Tomas Akenine-Möller

Источник: habr.com

MIP-текстурирование

MIP-текстурирование (англ. MIP mapping ) — метод текстурирования, использующий несколько копий одной текстуры с разной детализацией. Название происходит от лат. multum in parvo — «много в малом».

Читайте также:  Как получить монеты в Майнкрафт без доната

Назначение

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

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

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

Принцип действия

Создаётся так называемая MIP-пирамида — последовательность текстур с разрешением от максимального до 1×1. Например: 1×1, 2×2, 4×4, 8×8, 16×16, 32×32, 64×64, 128×128, 256×256, 512×512 и 1024×1024. Каждая из этих текстур называется MIP-уровнем (англ. MIP level ) или уровнем детализации (англ. level of detail ).

На всех этих текстурах находится одно и то же изображение. Таким образом, MIP-текстурирование увеличивает расход видеопамяти на треть:

sum_<i=0></p>
<p>^infty left( frac 1 4 right)^i = 1 frac 1 3.

При наложении текстур вычисляется расстояние до объекта и номер текстуры находится по формуле:

<miplevel></p>
<p> = log_2 left( frac > cdot > right) + ,

где resolution — разрешение виртуальной камеры (количество пикселей, которое будет в объекте размером в 1 ед., расположенном в 1 ед. от камеры), texelsize — размер текселя в единицах трёхмерного мира, dist — расстояние до объекта в тех же единицах, mip bias — число, позволяющее выбирать более или менее детальную текстуру, чем даёт формула.

Эта цифра округляется до целого, и текстура с соответствующим номером (нулевая — самая детальная, первая — вдвое меньшая и т. д.) накладывается на объект.

Недостатки, способы решения

Расход видеопамяти увеличивается на треть (однако взамен увеличивается скорость отрисовки объектов на экране). Впрочем, типичные объемы видеопамяти в начале 2010-х составляют 1—3 ГБ. К тому же, если объект далеко, его детальную текстуру можно выгрузить в оперативную память.

MIP-текстурирование не решает проблему текстур, находящихся под острым углом к зрителю (например, дорога в автосимуляторе). У таких текстур разрешение по одной оси сильно отличается от разрешения по другой — и, например, по оси X изображение явно размыто, в то время как по оси Y видны мерцания, свойственные завышенному разрешению текстуры. Есть сразу несколько способов решения этого (начиная с наименее качественного):

  1. Установить в видеодрайвере наиболее комфортное значение mip bias — числа́, которое отвечает за выбор номера текстуры в пирамиде. Если оно отрицательное, видеоплата берёт более детальные текстуры, если положительное — менее детальные.
  2. Многие игры сами устанавливают подходящий mip bias для разных типов объектов. Например, в Live for Speedmip bias устанавливается пользователем отдельно для автомобилей, препятствий и дороги.
  3. Воспользоваться анизотропной фильтрацией — методом текстурирования, который направлен именно на решение этой проблемы.

Наконец, видна чёткая граница между MIP-уровнями. Это решается трилинейной фильтрацией.

Альтернативы

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

Ссылки

  • Михаил Хабров.Создание детальных текстур c помощью mip-map уровней в Direct3D8. GameDev.ru (29 мая 2002 года). Проверено 12 июля 2009.Архивировано из первоисточника 19 марта 2012.
  • Pyramidal Parametrics (1983) (англ.)
Читайте также:  Майнкрафт но можно скрафтить любой предмет

Источник: wp.wiki-wiki.ru

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

Текстурирование — это наложение растровых изображений (текстур) на 3D-модель для придания рельефности, фактуры и цвета. Оно широко применяется в видеоигровой индустрии, дизайне и кинопроизводстве при имитации реалистичных поверхностей различных объектов, эффектов состаривания, влияния погодных условий, механического воздействия и т.д.

Пройдите тест из 10 вопросов и узнайте, какая дизайн-профессия подходит лично вам

  1. Основные виды текстурирования
  2. Как сделать текстуры?

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

Текстурирование автомобиля. Источник
Текстурирование автомобиля. Источник
Текстурирование автомобиля. Источник
Текстурирование автомобиля.

Источник

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

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

ИСКРА —
неделя знакомства с дизайн-профессиями

Выберите дизайн-профессию, которая нужна в IT.

разжечь искру

Чтобы придать 3D-модели или виртуальной поверхности иллюзию рельефности, используются следующие виды текстурирования:

  • bump mapping — к цветовой текстуре применяется одноканальная (черно-белая) карта высот и источник света, которые формируют эффект впадин и выпуклостей за счет различного освещения отдельных участков;
  • normal mapping — в технологии рельефность текстуры достигается за счет цветной карты нормалей, RGB-каналы которой преобразуются в три координаты вектора, по которому рассчитывается освещенность поверхности;
  • parallax mapping — этот способ заключается в изменении координат отдельных пикселей текстуры, а также освещении с учетом рельефа по карте нормалей, что позволяет достичь максимально полной рельефности поверхности;
  • MIP-текстурирование — это наложение нескольких копий одной и той же текстуры с разным разрешением в зависимости от мощности видеокарты, близости виртуального объекта к наблюдателю и других факторов.

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

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

Кто такой 3D Artist и чем он занимается?

Как сделать текстуры?

Для создания текстур используются два основных метода:

  • отрисовка растровых изображений в графическом 2D-редакторе — например, Adobe Photoshop;
  • создание рельефных 3D-текстур в трехмерных графических редакторах — в частности, Adobe Substance 3D Designer, Autodesk Mudbox, The Foundry Mari, 3D-Coat.

Часто на практике 2D- и 3D-технологии комбинируются для создания максимально реалистичных текстур. Процесс текстурирования имеет различную сложность в зависимости от того, насколько проработанной и детализированной должна быть поверхность виртуального объекта. Например, для «мультяшной» анимации в стиле Pixar глубокой визуальной проработки предметов окружения, персонажей и поверхностей не требуется. Однако, чтобы создать фотореалистичные фактуры с различными эффектами состаривания, влияния погодных условий и т.д., понадобятся карты высот, отражений, бликов, затемнений, которые значительно усложняют процесс 3D-моделирования.

ИСКРА —
неделя знакомства
с дизайн-профессиями

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

Источник: media.contented.ru