Отображение куба
Эта статья нуждается в дополнительных цитатах для проверки . ( декабрь 2022 г. ) |

В компьютерной графике отображение куба — это метод отображения окружающей среды , в котором в качестве формы карты используются шесть граней куба. Окружающая среда проецируется на стороны куба и сохраняется в виде шести квадратных текстур или разворачивается в шесть областей одной текстуры.
Карта куба создается путем шестикратного рендеринга сцены с точки обзора, при этом виды определяются усеченной пирамидой обзора под углом 90 градусов , представляющей каждую грань куба. [ 1 ] Или, если среду сначала считать проецированной на сферу , то каждая грань куба является ее гномонической проекцией .
В большинстве случаев кубическое отображение предпочтительнее старого метода сферического картирования , поскольку оно устраняет многие проблемы, присущие сферическому картированию, такие как искажение изображения, зависимость от точки обзора и вычислительная неэффективность. Кроме того, кубическое отображение обеспечивает гораздо большую возможность поддержки реальном времени в рендеринга отражений по сравнению со сферическим отображением, поскольку сочетание неэффективности и зависимости от точки обзора серьезно ограничивает возможность применения сферического отображения, когда существует постоянно меняющаяся точка обзора.
Варианты кубического отображения также часто используются в видеопроекции 360° .
История
[ редактировать ]Кубическое картирование было впервые предложено в 1986 году Недом Грином в его статье «Картирование окружающей среды и другие применения мировых проекций». [ 2 ] впервые предложили картографирование окружающей среды десять лет спустя после того, как Джим Блинн и Мартин Ньюэлл . Однако аппаратные ограничения на возможность одновременного доступа к шести изображениям текстур сделали невозможным реализацию кубического отображения без дальнейших технологических разработок. Эта проблема была решена в 1999 году с выпуском Nvidia GeForce 256 . Nvidia рекламировала аппаратное отображение кубов как «революционную функцию качества изображения GeForce 256, которая… позволит разработчикам создавать точные отражения в реальном времени». Аппаратное ускорение картографирования кубической среды позволит разработчикам использовать отражения и зеркальные световые эффекты для создания интересных, захватывающих сред». [ 3 ] Сегодня отображение куба по-прежнему используется в различных графических приложениях как предпочтительный метод отображения среды.
Преимущества
[ редактировать ]Отображение куба предпочтительнее других методов отображения среды из-за его относительной простоты. Кроме того, кубическое отображение дает результаты, аналогичные результатам, полученным с помощью трассировки лучей , но гораздо более эффективно в вычислительном отношении — умеренное снижение качества компенсируется большим приростом эффективности.
картирование, предшествовавшее кубическому Сферическое картированию, имело множество присущих ему недостатков, которые делали его непрактичным для большинства приложений. Наложение сфер зависит от вида, а это означает, что для каждой точки обзора необходима своя текстура. Следовательно, в приложениях, где точка обзора является мобильной, необходимо динамически генерировать новое сопоставление сферы для каждой новой точки обзора (или предварительно генерировать сопоставление для каждой точки обзора). Кроме того, текстура, нанесенная на поверхность сферы, должна быть растянута и сжата, а деформация и искажение (особенно по краю сферы) являются прямым следствием этого. Хотя эти недостатки изображения можно уменьшить с помощью определенных приемов и методов, таких как «предварительное растяжение», это лишь усложняет сферическое картографирование.
Отображение параболоидов обеспечивает некоторое улучшение ограничений картографирования сфер, однако оно требует двух проходов рендеринга в дополнение к специальным операциям деформации изображения и более сложным вычислениям.
И наоборот, отображение куба требует только одного прохода рендеринга, и из-за его простоты его очень легко понять и создать разработчикам. Кроме того, при отображении куба используется все разрешение изображения текстуры по сравнению с сопоставлениями сферы и параболоида, что также позволяет использовать изображения с более низким разрешением для достижения того же качества. Хотя обработка швов карты куба является проблемой, были разработаны алгоритмы для обработки поведения швов и обеспечения плавного отражения.
Недостатки
[ редактировать ]Если в сцену вводится новый объект или новое освещение или если какой-либо объект, отражающийся в ней, движется или каким-либо образом изменяется, то отражение меняется, и карту куба необходимо перерисовать. Когда карта куба прикрепляется к объекту, который перемещается по сцене, карту куба также необходимо повторно отрисовать с этой новой позиции. [ нужна ссылка ]
Приложения
[ редактировать ]Стабильные зеркальные блики
[ редактировать ]компьютерного проектирования Программы (САПР) используют зеркальные блики в качестве визуальных подсказок, чтобы передать ощущение кривизны поверхности при рендеринге 3D-объектов. Однако во многих программах САПР возникают проблемы с выборкой зеркальных бликов, поскольку вычисления зеркального освещения выполняются только в вершинах сетки, используемой для представления объекта, а для оценки освещения по поверхности объекта используется интерполяция. Проблемы возникают, когда вершины сетки недостаточно плотны, что приводит к недостаточной выборке зеркального освещения. Это, в свою очередь, приводит к появлению бликов с яркостью, пропорциональной расстоянию от вершин сетки, что в конечном итоге ставит под угрозу визуальные сигналы, указывающие на кривизну. К сожалению, эту проблему невозможно решить простым созданием более плотной сетки, так как это может сильно снизить эффективность рендеринга объектов.
Кубические карты предоставляют довольно простое и эффективное решение для визуализации стабильных зеркальных бликов. Несколько зеркальных бликов можно закодировать в текстуру кубической карты, к которой затем можно получить доступ путем интерполяции поверхности по вектору отражения для получения координат. По сравнению с вычислением освещения в отдельных вершинах этот метод обеспечивает более чистые результаты, которые более точно отображают кривизну. Еще одним преимуществом этого метода является то, что он хорошо масштабируется, поскольку в текстуру можно закодировать дополнительные блики без увеличения затрат на рендеринг. Однако этот подход ограничен тем, что источниками света должны быть либо далекие, либо бесконечные источники света, хотя, к счастью, это обычно имеет место в программах САПР.
Скайбоксы
[ редактировать ]
Возможно, наиболее продвинутым применением кубического картографирования является создание предварительно визуализированных панорамных изображений неба , которые затем визуализируются графическим движком как грани куба на практически бесконечном расстоянии с точкой обзора, расположенной в центре куба. Перспективная проекция граней куба, выполненная графическим движком, отменяет эффекты проецирования окружающей среды для создания карты куба, так что у наблюдателя возникает иллюзия окружения сценой, которая использовалась для создания скайбокса. Этот метод нашел широкое применение в видеоиграх , поскольку позволяет дизайнерам добавлять в игру сложную (хотя и не поддающуюся исследованию) среду практически без потерь производительности.
Мансардное освещение
[ редактировать ]Кубические карты могут быть полезны для точного моделирования наружного освещения. Простое моделирование солнечного света как единого бесконечного источника света сильно упрощает наружное освещение и приводит к нереалистичному освещению. Хотя от солнца исходит много света, рассеяние лучей в атмосфере заставляет все небо выступать в качестве источника света (часто называемое освещением в крыше). Однако, используя кубическую карту, можно уловить диффузный вклад освещения в крыше. В отличие от карт окружающей среды, где используется вектор отражения, этот метод обращается к карте куба на основе вектора нормали к поверхности, чтобы обеспечить быструю аппроксимацию рассеянного освещения от небесного света. Единственным недостатком этого метода является то, что вычисление кубических карт для правильного представления светового люка очень сложно; Одним из недавних процессов является вычисление основы сферических гармоник, которая лучше всего представляет низкочастотное рассеянное освещение из карты куба. Тем не менее, был проведен значительный объем исследований для эффективного моделирования освещения в крыше.
Динамическое отражение
[ редактировать ]
Базовое сопоставление среды использует статическую карту куба — хотя объект можно перемещать и искажать, отраженная среда остается неизменной. Однако текстуру кубической карты можно последовательно обновлять, чтобы она представляла динамически изменяющуюся окружающую среду (например, деревья, раскачивающиеся на ветру). Простой, но дорогостоящий способ создания динамических отражений включает в себя создание карт куба во время выполнения для каждого кадра. Хотя это гораздо менее эффективно, чем статическое картографирование, из-за дополнительных шагов рендеринга, его все равно можно выполнять с интерактивной скоростью.
К сожалению, этот метод плохо масштабируется при наличии нескольких отражающих объектов. Для каждого отражающего объекта обычно требуется уникальная динамическая карта среды. Кроме того, дополнительные сложности добавляются, если отражающие объекты могут отражать друг друга - динамические кубические карты могут создаваться рекурсивно, аппроксимируя эффекты, обычно генерируемые с помощью трассировки лучей.
Глобальное освещение
[ редактировать ]Алгоритм расчета глобального освещения с интерактивной скоростью с использованием структуры данных кубической карты был представлен на ICCVG 2002. [1]
Проекционные текстуры
[ редактировать ]Еще одно приложение, нашедшее широкое применение в видеоиграх, — это проективное наложение текстур . Он использует кубические карты для проецирования изображений окружающей среды на окружающую сцену; например, точечный источник света привязан к кубической карте, которая представляет собой панорамное изображение, снятое изнутри клетки фонаря или оконной рамы, через которую фильтруется свет. Это позволяет разработчику игр добиться реалистичного освещения без необходимости усложнять геометрию сцены или прибегать к дорогостоящим вычислениям объема теней в реальном времени .
Адресация памяти
[ редактировать ]
Кубическая текстура индексирует шесть текстурных карт от 0 до 5 в следующем порядке: Положительный X, Отрицательный X, Положительный Y, Отрицательный Y, Положительный Z, Отрицательный Z. [ 4 ] [ 5 ] Изображения сохраняются с началом координат в левом нижнем углу изображения. Положительные грани X и Y должны инвертировать координату Z, а отрицательные грани Z должны инвертировать координату X. Если задано лицо и координаты текстуры , ненормированный вектор можно вычислить с помощью функции:
void convert_cube_uv_to_xyz(int index, float u, float v, float *x, float *y, float *z)
{
// convert range 0 to 1 to -1 to 1
float uc = 2.0f * u - 1.0f;
float vc = 2.0f * v - 1.0f;
switch (index)
{
case 0: *x = 1.0f; *y = vc; *z = -uc; break; // POSITIVE X
case 1: *x = -1.0f; *y = vc; *z = uc; break; // NEGATIVE X
case 2: *x = uc; *y = 1.0f; *z = -vc; break; // POSITIVE Y
case 3: *x = uc; *y = -1.0f; *z = vc; break; // NEGATIVE Y
case 4: *x = uc; *y = vc; *z = 1.0f; break; // POSITIVE Z
case 5: *x = -uc; *y = vc; *z = -1.0f; break; // NEGATIVE Z
}
}
Аналогично, вектор может быть преобразован в индекс лица и координаты текстуры с функцией:
void convert_xyz_to_cube_uv(float x, float y, float z, int *index, float *u, float *v)
{
float absX = fabs(x);
float absY = fabs(y);
float absZ = fabs(z);
int isXPositive = x > 0 ? 1 : 0;
int isYPositive = y > 0 ? 1 : 0;
int isZPositive = z > 0 ? 1 : 0;
float maxAxis, uc, vc;
// POSITIVE X
if (isXPositive && absX >= absY && absX >= absZ) {
// u (0 to 1) goes from +z to -z
// v (0 to 1) goes from -y to +y
maxAxis = absX;
uc = -z;
vc = y;
*index = 0;
}
// NEGATIVE X
if (!isXPositive && absX >= absY && absX >= absZ) {
// u (0 to 1) goes from -z to +z
// v (0 to 1) goes from -y to +y
maxAxis = absX;
uc = z;
vc = y;
*index = 1;
}
// POSITIVE Y
if (isYPositive && absY >= absX && absY >= absZ) {
// u (0 to 1) goes from -x to +x
// v (0 to 1) goes from +z to -z
maxAxis = absY;
uc = x;
vc = -z;
*index = 2;
}
// NEGATIVE Y
if (!isYPositive && absY >= absX && absY >= absZ) {
// u (0 to 1) goes from -x to +x
// v (0 to 1) goes from -z to +z
maxAxis = absY;
uc = x;
vc = z;
*index = 3;
}
// POSITIVE Z
if (isZPositive && absZ >= absX && absZ >= absY) {
// u (0 to 1) goes from -x to +x
// v (0 to 1) goes from -y to +y
maxAxis = absZ;
uc = x;
vc = y;
*index = 4;
}
// NEGATIVE Z
if (!isZPositive && absZ >= absX && absZ >= absY) {
// u (0 to 1) goes from +x to -x
// v (0 to 1) goes from -y to +y
maxAxis = absZ;
uc = -x;
vc = y;
*index = 5;
}
// Convert range from -1 to 1 to 0 to 1
*u = 0.5f * (uc / maxAxis + 1.0f);
*v = 0.5f * (vc / maxAxis + 1.0f);
}
Ссылки
[ редактировать ]- ^ Фернандо, Р. и Килгард М.Дж. (2003). Учебное пособие по компьютерной графике: полное руководство по программируемой графике реального времени. (1-е изд.). Addison-Wesley Longman Publishing Co., Inc. Бостон, Массачусетс, США. Глава 7: Методы картографирования окружающей среды
- ^ Грин, Н. (1986). «Картирование окружающей среды и другие применения мировых проекций». IEEE-компьютер. График. Приложение . 6 (11): 21–29. дои : 10.1109/MCG.1986.276658 . S2CID 11301955 .
- ^ Nvidia, январь 2000 г. Техническое описание: идеальные отражения и эффекты зеркального освещения с помощью картографирования среды куба. Архивировано 4 октября 2008 г. на Wayback Machine.
- ^ «Введение в текстуры в приложениях Direct3D 11 — Win32 | Microsoft Docs» . 23 августа 2019 г.
- ^ «Глава 19. Освещение на основе изображения» .
См. также
[ редактировать ]