Поделиться через


Упаковка текстур

Оболочка текстур изменяет базовый способ, которым Direct3D растеризирует текстурированные многоугольники с помощью координат текстуры, указанных для каждой вершины. При растеризации многоугольника система интерполирует координаты текстуры на каждой вершине многоугольника, чтобы определить тексели, которые следует использовать для каждого пикселя многоугольника. Как правило, система обрабатывает текстуру как плоскость 2D, интерполяируя новые тексели, принимая самый короткий маршрут из точки А внутри текстуры в точку B. Если точка A представляет позицию u, v (0.8, 0.1), а точка B — (0.1,0.1), строка интерполяции выглядит следующим образом.

схема линии интерполяции между двумя точками

Обратите внимание, что самое короткое расстояние между A и B на этом рисунке выполняется примерно через середину текстуры. Включение обтекания координат u-текстуры или координат v-текстуры изменяет, как Direct3D воспринимает самый короткий маршрут между координатами текстур в направлении u и v-направление. По определению, оболочка текстуры приводит к тому, что растризатор принимает самый короткий маршрут между наборами координат текстур, предполагая, что 0.0 и 1.0 совпадают. Последний бит является сложной частью: вы можете представить, что включение упаковки текстуры в одном направлении приводит к тому, что система обрабатывает текстуру, как будто она была завернута вокруг цилиндра. Например, рассмотрим следующую диаграмму.

схема текстуры и двух точек, завернутых вокруг цилиндра

На предыдущем рисунке показано, как обтекание в направлении u влияет на то, как система интерполирует координаты текстуры. Используя те же точки, что и в примере для нормальной или нераскрытой текстуры, можно увидеть, что самый короткий маршрут между точками A и B больше не находится в середине текстуры; Теперь он находится через границу, где 0.0 и 1.0 существуют вместе. Оболочка в v-направление аналогична, за исключением того, что она обертывает текстуру вокруг цилиндра, который находится на его стороне. Оболочка как в направлении u,так и в направлении v-направления является более сложной. В этой ситуации вы можете представить текстуру как тора или кольцевой кольца.

Наиболее распространенное практическое приложение для упаковки текстур заключается в выполнении сопоставления среды. Как правило, объект, текстурированный с картой среды, выглядит очень отражающим, показывая зеркальное изображение окружения объекта в сцене. Для этого обсуждения на фото комнаты с четырьмя стенами, каждая из которых окрашена буквой R, G, B, Y и соответствующими цветами: красный, зеленый, синий и желтый. Схема среды для такой простой комнаты может выглядеть следующим образом.

иллюстрация вертикальных полос красного, зеленого, синего и желтого

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

схема прямоугольника с разбиение пунктирной линией

При включенной оболочке в направлении у текстуры текстурированный столбец отображает цвета и символы из карты среды соответствующим образом, а на шове в передней части текстуры растризатор правильно выбирает самый короткий маршрут между координатами текстуры, при условии, что u-координаты 0.0 и 1.0 используют то же расположение. Текстурированный столбец выглядит следующим образом.

иллюстрация столба, состоящего из красного, зеленого, синего и желтого квадранта

Если оболочка текстур не включена, растеризатор не интерполирует в направлении, необходимом для создания правдоподобного изображения. Скорее, область на передней части столба содержит горизонтально сжатые версии текселей между u-координатами 0,175 и 0,875, так как они проходят через центр текстуры. Эффект оболочки разрушен.

Не путайте оболочку текстуры с аналогичными именованными режимами адресации текстур. Упаковка текстур выполняется до адресации текстур. Убедитесь, что данные оболочки текстур не содержат координаты текстур за пределами диапазона [0.0, 1.0], так как это приведет к неопределенным результатам. Дополнительные сведения о адресации текстур см. в режимах адресации текстур.

Упаковка карты смещения

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

Текстуры