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-текстурирование увеличивает расход видеопамяти на треть:
- .
При наложении текстур вычисляется расстояние до объекта и номер текстуры находится по формуле:
- ,
где resolution — разрешение виртуальной камеры (количество пикселей, которое будет в объекте размером в 1 ед., расположенном в 1 ед. от камеры), texelsize — размер текселя в единицах трёхмерного мира, dist — расстояние до объекта в тех же единицах, mip bias — число, позволяющее выбирать более или менее детальную текстуру, чем даёт формула.
Это число округляется до целого, и текстура с соответствующим номером (нулевая — самая детальная, первая — вдвое меньшая и т. д.) накладывается на объект.
Недостатки, способы решения
[править | править код]Расход видеопамяти увеличивается на треть. Впрочем, типичные объёмы видеопамяти в начале 2010-х составляют 1—3 ГБ. Однако MIP-текстурирование улучшает работу видеопамяти и этим ускоряет рендеринг, а если объект далеко, его детальную текстуру можно выгрузить в оперативную память.
MIP-текстурирование не решает проблему текстур, находящихся под острым углом к зрителю (например, дорога в автосимуляторе). У таких текстур разрешение по одной оси сильно отличается от разрешения по другой — и, например, по оси X изображение явно размыто, в то время как по оси Y видны мерцания, свойственные завышенному разрешению текстуры. Есть сразу несколько способов решения этого (начиная с наименее качественного):
- Установить в видеодрайвере наиболее комфортное значение mip bias — числа́, которое отвечает за выбор номера текстуры в пирамиде. Если оно отрицательное, видеодрайвер берёт более детальные текстуры, если положительное — менее детальные.
- Многие игры сами устанавливают подходящий mip bias для разных типов объектов. Например, в Live for Speed mip bias устанавливается пользователем отдельно для автомобилей, препятствий и дороги.
- Воспользоваться анизотропной фильтрацией — методом текстурирования, который направлен именно на решение этой проблемы.
Видна чёткая граница между MIP-уровнями. Это решается трилинейной фильтрацией.
Если в одной текстуре находятся куски разных поверхностей, приходится делать припуски и зазоры, превышающие 1 тексель наиболее «ходового» MIP-уровня. Не обязательно этот уровень самый детальный (например, в Dota 2 мы видим как детального героя в меню, так и миниатюрного в игре) — потому в руководстве по моделированию Dota 2 эти зазоры явно предписывались.
Альтернативы
[править | править код]В рендерерах высокого качества может применяться таблица частичных сумм. Это даёт высшее качество изображения (за четыре обращения к таблице можно усреднить цвет по любому прямоугольнику), но для хранения сумм нужны более широкие типы. Соответственно, таблица частичных сумм больше не на треть, а как минимум вдвое. Проблем с кэш-промахами таблица частичных сумм не решает.
Ссылки
[править | править код]- Михаил Хабров. Создание детальных текстур c помощью mip-map уровней в Direct3D8 . GameDev.ru (29 мая 2002). Дата обращения: 12 июля 2009. Архивировано из оригинала 1 мая 2008 года.
- Pyramidal Parametrics (1983) (англ.)