Отображение куба

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

В компьютерной графике, отображение куба - это метод сопоставления среды, который использует шесть граней куба в качестве формы карты. Окружение проецируется на стороны куба и сохраняется в виде шести квадратных текстур или разворачивается в шесть областей одной текстуры. Карта куба генерируется путем первого шестикратного рендеринга сцены из точки обзора, причем виды определяются усеченной пирамидой вида 90 градусов, представляющей каждую грань куба.

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

Содержание
  • 1 История
  • 2 Преимущества
  • 3 Недостатки
  • 4 Применение
    • 4.1 Стабильные зеркальные блики
    • 4.2 Скайбоксы
    • 4.3 Световое освещение
    • 4.4 Динамическое отражение
    • 4.5 Глобальное освещение
    • 4.6 Текстуры проекции
  • 5 Адресация памяти
  • 6 Связанные
  • 7 Ссылки
  • 8 См. Также
История

Отображение куба было впервые предложено в 1986 г. в своей статье «Картирование окружающей среды и другие приложения мировых проекций», через десять лет после того, как составление карты окружающей среды было впервые предложено Джимом Блинном и Мартином Ньюэллом. Однако аппаратные ограничения на возможность доступа к шести изображениям текстур одновременно сделали невозможным реализацию кубического отображения без дальнейших технологических разработок. Эта проблема была устранена в 1999 году с выпуском Nvidia GeForce 256. Nvidia рекламировала отображение кубов в оборудовании как «революционную функцию качества изображения GeForce 256, которая... позволит разработчикам создавать точные отражения в реальном времени. Ускоренное аппаратно, отображение кубической среды высвободит творческий потенциал разработчиков, чтобы использовать отражения и эффекты зеркального освещения для создания интересных, захватывающих сред ». Сегодня отображение куба все еще используется в различных графических приложениях как излюбленный метод отображения среды.

Преимущества

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

Предварительное отображение куба, отображение сфер имеет множество внутренних недостатков, которые делают его непрактичным для большинства приложений. Отображение сфер зависит от вида, что означает, что для каждой точки обзора необходима своя текстура. Следовательно, в приложениях, где точка обзора является мобильной, было бы необходимо динамически генерировать новое отображение сфер для каждой новой точки обзора (или предварительно генерировать отображение для каждой точки обзора). Кроме того, текстура, наложенная на поверхность сферы, должна быть растянута и сжата, а коробление и искажение (особенно по краю сферы) являются прямым следствием этого. Хотя эти недостатки изображения можно уменьшить, используя определенные приемы и методы, такие как «предварительное растяжение», это просто добавляет еще один уровень сложности к отображению сфер.

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

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

Недостатки

Если в сцену вводится новый объект или новое освещение, или если какой-то объект, который в нем отражается, движется или изменяется каким-либо образом, то отражение изменяется, и кубическая карта должна быть повторно обработанным. Когда кубическая карта прикреплена к объекту, который движется по сцене, кубическая карта также должна быть повторно визуализирована из этой новой позиции.

Приложения

Стабильные зеркальные блики

Программы автоматизированного проектирования (CAD) используют зеркальные блики в качестве визуальных сигналов, чтобы передать ощущение кривизны поверхности, когда рендеринг 3D-объектов. Однако во многих программах САПР возникают проблемы с выборкой зеркальных бликов, потому что вычисления зеркального освещения выполняются только в вершинах сетки, используемой для представления объекта, а для оценки освещения по поверхности объекта используется интерполяция. Проблемы возникают, когда вершины сетки недостаточно плотны, что приводит к недостаточной выборке зеркального освещения. Это, в свою очередь, приводит к появлению бликов с яркостью, пропорциональной расстоянию от вершин сетки, что в конечном итоге ставит под угрозу визуальные подсказки, указывающие на кривизну. К сожалению, эту проблему нельзя решить простым созданием более плотной сетки, так как это может значительно снизить эффективность рендеринга объекта.

Кубические карты предоставляют довольно простое и эффективное решение для визуализации стабильных зеркальных бликов. Множественные зеркальные блики могут быть закодированы в текстуру кубической карты, к которой затем можно получить доступ путем интерполяции по вектору отражения поверхности для получения координат. По сравнению с вычислением освещения в отдельных вершинах этот метод обеспечивает более четкие результаты, которые более точно представляют кривизну. Еще одним преимуществом этого метода является то, что он хорошо масштабируется, поскольку дополнительные зеркальные блики могут быть закодированы в текстуру без увеличения затрат на рендеринг. Однако этот подход ограничен тем, что источники света должны быть либо дальними, либо бесконечными, хотя, к счастью, это обычно имеет место в программах CAD.

Скайбоксы

Пример текстуры, которую можно сопоставить с гранями кубического скайбокса, с гранями, помеченными

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

Skylight illumination

Кубические карты могут быть полезны для точного моделирования внешнего освещения. Простое моделирование солнечного света как единого бесконечного света упрощает внешнее освещение и приводит к нереалистичному освещению. Хотя много света исходит от солнца, рассеяние лучей в атмосфере заставляет все небо действовать как источник света (часто называемое световым освещением). Однако, используя кубическую карту, можно уловить диффузный вклад от освещения в крыше. В отличие от карт среды, где используется вектор отражения, этот метод обращается к кубической карте на основе вектора нормали к поверхности, чтобы обеспечить быстрое приближение диффузного освещения от светового люка. Единственным недостатком этого метода является то, что вычисление кубических карт для правильного представления окна в крыше очень сложно; одним из недавних процессов является вычисление основы сферической гармоники, которая наилучшим образом представляет низкочастотное диффузное освещение из кубической карты. Тем не менее, было проведено значительное количество исследований, чтобы эффективно моделировать освещение в крыше.

Динамическое отражение

Отображение куба отражений в действии

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

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

Глобальное освещение

Алгоритм для вычисления глобального освещения с интерактивной скоростью с использованием структуры данных кубической карты был представлен на ICCVG 2002. [1]

Проекционные текстуры

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

Адресация памяти
На этом рисунке показано, как индексируется и адресуется кубическая карта.

Текстура куба индексирует шесть текстурных карт от 0 до 5 в порядке положительного X, отрицательного X, положительного Y, отрицательного Y, Положительное Z, Отрицательное Z. Изображения сохраняются с началом координат в нижнем левом углу изображения. Положительные грани X и Y должны инвертировать координату Z, а отрицательные грани Z должны отрицать координату X. Если задано лицо и координаты текстуры (u, v) {\ displaystyle (u, v)}(u, v) , ненормализованный вектор (x, y, z) {\ displaystyle (x, y, z)}(x, y, z) можно вычислить с помощью функции:

void convert_cube_uv_to_xyz (int index, float u, float v, float * x, float * y, float * z) {/ / преобразовать диапазон от 0 до 1 в -1 в 1 с плавающей запятой uc = 2.0f * u - 1.0f; float vc = 2.0f * v - 1.0f; переключатель (индекс) {case 0: * x = 1.0f; * y = vc; * z = -uc; перемена; // ПОЛОЖИТЕЛЬНЫЙ X case 1: * x = -1.0f; * y = vc; * z = uc; перемена; // ОТРИЦАТЕЛЬНЫЙ X случай 2: * x = uc; * y = 1.0f; * z = -vc; перемена; // ПОЛОЖИТЕЛЬНО Y case 3: * x = uc; * y = -1.0f; * z = vc; перемена; // ОТРИЦАТЕЛЬНЫЙ Y случай 4: * x = uc; * y = vc; * z = 1.0f; перемена; // ПОЛОЖИТЕЛЬНЫЙ Z случай 5: * x = -uc; * y = vc; * z = -1.0f; перемена; // ОТРИЦАТЕЛЬНЫЙ Z}}

Аналогично, вектор (x, y, z) {\ displaystyle (x, y, z)}(x, y, z) может быть преобразован в индекс лица и координаты текстуры (u, v) {\ displaystyle (u, v)}(u, v) с функцией:

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; // ПОЛОЖИТЕЛЬНЫЙ X if (isXPositive absX>= absY absX>= absZ) {// u (от 0 до 1) изменяется от + z до -z // v (от 0 до 1) изменяется от -y до + y maxAxis = absX; uc = -z; vc = y; * индекс = 0; } // ОТРИЦАТЕЛЬНЫЙ X if (! IsXPositive absX>= absY absX>= absZ) {// u (от 0 до 1) изменяется от -z до + z // v (от 0 до 1) переходит от -y до + y maxAxis = absX; uc = z; vc = y; * index = 1; } // ПОЛОЖИТЕЛЬНО Y if (isYPositive absY>= absX absY>= absZ) {// u (от 0 до 1) изменяется от -x до + x // v (от 0 до 1) изменяется от + z до -z maxAxis = absY; uc = x; vc = -z; * index = 2; } // ОТРИЦАТЕЛЬНЫЙ Y if (! IsYPositive absY>= absX absY>= absZ) {// u (от 0 до 1) изменяется от -x до + x // v (от 0 до 1) изменяется от -z до + z maxAxis = absY; uc = x; vc = z; * index = 3; } // ПОЛОЖИТЕЛЬНЫЙ Z if (isZPositive absZ>= absX absZ>= absY) {// u (от 0 до 1) изменяется от -x до + x // v (от 0 до 1) изменяется от -y до + y maxAxis = absZ; uc = x; vc = y; * index = 4; } // ОТРИЦАТЕЛЬНЫЙ Z if (! IsZPositive absZ>= absX absZ>= absY) {// u (от 0 до 1) изменяется от + x до -x // v (от 0 до 1) изменяется от -y до + y maxAxis = absZ; uc = -x; vc = y; * index = 5; } // Преобразуем диапазон от -1 до 1 в 0 в 1 * u = 0.5f * (uc / maxAxis + 1.0f); * v = 0.5f * (vc / maxAxis + 1.0f); }
Связанные

Большой набор бесплатных кубических карт для экспериментов: http://www.humus.name/index.php?page=Textures

Марк ВандеВеттеринг взял М. Знаменитый автопортрет К. Эшера Рука с отражающей сферой и перевернутое отображение, чтобы получить эти изображения кубической карты: слева, справа, up, вниз, зад, перед. Вот демонстрация three.js с использованием этих изображений (лучше всего просматривается в широком окне браузера; для просмотра демонстрации может потребоваться обновить страницу): https://web.archive.org/web/ 20140519021736 / http: //threejs.org/examples/webgl_materials_cubemap_escher.html

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

Ссылки
См. Также
На Викискладе есть материалы, связанные с Отображение куба.
Последняя правка сделана 2021-05-16 10:48:03
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте