Мипкарты
Уровень mipmap представляет собой версию текстуры с определенным разрешением. Уровни mipmap существуют в наборах, называемых mipmaps. Mipmaps содержат версии одной текстуры с постепенно уменьшающимся и снижающимся разрешением.
Например, mipmap может содержать четыре версии текстуры, начиная с оригинальной текстуры (уровень mipmap 0), до mipmap уровня 1, mipmap уровня 2 и mipmap уровня 3:
Mipmaps обычно используются для рендеринга объектов в сценах 3D, где текстурированные объекты могут варьироваться в расстоянии от камеры. Более высокий уровень mipmap используется для объектов ближе к камере, а более низкие уровни mipmap используются для более удаленных объектов.
Mipmaps могут ускорить операции рендеринга и уменьшить артефакты рендеринга в ситуациях, когда GPU рендеринг текстуры с меньшим, чем полное разрешение. Mipmap фактически является кэшируемой, пониженной в разрешении версией оригинальной текстуры. Вместо выполнения многих операций семплирования на оригинальной текстуре с полным разрешением, GPU может выполнять меньшее количество операций на уже пониженной в разрешении версии.
Иногда mipmaps не приносят пользы. Mipmaps увеличивают размер текстуры на 33%, как на диске, так и в памяти. Они также не приносят пользы, когда текстура отображается только в полном разрешении, например, текстура UI, которая не масштабируется.
Вы можете создать mipmap для текстуры вручную, или вы можете поручить Unity создать mipmap для вас. Чтобы автоматически создать mipmap, убедитесь, что разрешение вашей оригинальной текстуры является величиной в степени двух, как показано на примере изображения mipmap.
Вы можете включить или отключить mipmaps для текстуры в Texture Import Settings Inspector.
Как GPU семплирует уровни mipmap
Считывая текстуру, GPU определяет нужный уровень мипмапа по текстурным координатам (UV) текущего пикселя и по двум внутренним значениям, которые он вычисляет: DDX и DDY. Они дают сведения об UV соседних пикселей — сбоку и сверху, — включая расстояния и углы.
GPU использует эти значения для определения того, сколько деталей текстуры видно камере. Большее расстояние и более экстремальный угол между текущим пикселем и его соседями означает, что GPU выбирает уровень mipmap с более низким разрешением; меньшее расстояние и менее экстремальный угол означает, что GPU выбирает уровень mipmap с более высоким разрешением.
GPU также может объединять информацию о текстуре из двух уровней mipmap вместе с трилинейной фильтрацией. Слияние уровней mipmap во время выборки может сделать переход от одного уровня mipmap к другому менее заметным. Чтобы объединить уровни mipmap, GPU берет определенный процент информации о текстуре из одного уровня mipmap, а остальное из другого уровня mipmap.
Мипмап
Настройка под названием mipmap bias может выполнять две вещи во время выборки, в зависимости от настроек выборочного устройства:
- Отклонение mipmap может изменить порог для GPU, выбирая более низкий или более высокий уровень mipmap для образца. GPU выбирает определенный уровень mipmap, когда вы используете точечную и линейную фильтрацию в семплере. Например, GPU может решить, что текстура на наборе UVs использует образец из mipmap уровня 3. При отклонении mipmap –2, GPU вместо этого использует более высокое разрешение mipmap уровня 1 для образца.
- При смешивании образцов из разных уровней mipmap, bias mipmap может указать GPU предпочесть один уровень mipmap другому на точной процентной доле. GPU смешивает уровни mipmap, когда вы используете трилинейную фильтрацию в семплере. Например, расчеты GPU могут возвращать значение 0.5. Значение 0.5 говорит GPU брать 50% необходимой информации о текстуре из одного уровня mipmap, а оставшиеся 50% из следующего уровня mipmap. С добавленным bias mipmap 0.2, значение 0.5 изменится на 0.7, а GPU возьмет 70% информации о текстуре из первого уровня mipmap и только 30% из второго.
GPU имеет глобальное отклонение mipmap, которое по умолчанию применяется к его выбору уровня mipmap. Текстыли могут иметь собственное отклонение mipmap, которое Unity добавляет или вычитает из глобального отклонения mipmap. Вы также можете указать собственное отклонение mipmap для индивидуальной операции выборки текстуры в шейдере.
Чтобы установить отклонение mipmap для отдельной текстуры, см. Texture.mipMapBias. Чтобы установить отклонение mipmap для операции выборки текстуры в ручном шейдере, используйте функции HLSL, такие как tex2dbias. Чтобы установить отклонение mipmap для операции выборки текстуры в Shader Graph, см. Образец текстуры 2D Узел массива или Образец текстуры 2D узел.
Как Unity загружает mipmaps
Вы можете управлять тем, как Unity загружает mipmaps во время выполнения с помощью Потоковое вещание Mipmap.