Отображение куба - Cube mapping - Wikipedia

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

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

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

История

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

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

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

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

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

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

Недостатки

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

Приложения

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

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

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

Скайбоксы

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

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

Освещение в крыше

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

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

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

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

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

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

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

Текстуры проекции

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

Адресация памяти

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

Текстура куба индексирует шесть текстурных карт от 0 до 5 в порядке Положительный X, Отрицательный X, Положительный Y, Отрицательный Y, Положительный Z, Отрицательный Z.[4][5] Изображения сохраняются с исходной точкой в ​​нижнем левом углу изображения. Положительные грани X и Y должны перевернуть координату Z, а отрицательные грани Z должны отрицать координату X. Если заданы координаты лица и текстуры , ненормализованный вектор можно вычислить с помощью функции:

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

Точно так же вектор может быть преобразован в индекс лица и координаты текстуры с функцией:

пустота convert_xyz_to_cube_uv(плавать Икс, плавать у, плавать z, int *индекс, плавать *ты, плавать *v){  плавать absX = фабрики(Икс);  плавать абсю = фабрики(у);  плавать absZ = фабрики(z);    int isXPositive = Икс > 0 ? 1 : 0;  int isYPositive = у > 0 ? 1 : 0;  int isZPositive = z > 0 ? 1 : 0;    плавать maxAxis, uc, vc;    // ПОЛОЖИТЕЛЬНЫЙ X  если (isXPositive && absX >= абсю && absX >= absZ) {    // u (от 0 до 1) изменяется от + z до -z    // v (от 0 до 1) изменяется от -y до + y    maxAxis = absX;    uc = -z;    vc = у;    *индекс = 0;  }  // ОТРИЦАТЕЛЬНЫЙ X  если (!isXPositive && absX >= абсю && absX >= absZ) {    // u (от 0 до 1) изменяется от -z до + z    // v (от 0 до 1) изменяется от -y до + y    maxAxis = absX;    uc = z;    vc = у;    *индекс = 1;  }  // ПОЛОЖИТЕЛЬНО Y  если (isYPositive && абсю >= absX && абсю >= absZ) {    // u (от 0 до 1) изменяется от -x до + x    // v (от 0 до 1) изменяется от + z до -z    maxAxis = абсю;    uc = Икс;    vc = -z;    *индекс = 2;  }  // ОТРИЦАТЕЛЬНЫЙ Y  если (!isYPositive && абсю >= absX && абсю >= absZ) {    // u (от 0 до 1) изменяется от -x до + x    // v (от 0 до 1) изменяется от -z до + z    maxAxis = абсю;    uc = Икс;    vc = z;    *индекс = 3;  }  // ПОЛОЖИТЕЛЬНЫЙ Z  если (isZPositive && absZ >= absX && absZ >= абсю) {    // u (от 0 до 1) изменяется от -x до + x    // v (от 0 до 1) изменяется от -y до + y    maxAxis = absZ;    uc = Икс;    vc = у;    *индекс = 4;  }  // ОТРИЦАТЕЛЬНЫЙ Z  если (!isZPositive && absZ >= absX && absZ >= абсю) {    // u (от 0 до 1) изменяется от + x до -x    // v (от 0 до 1) изменяется от -y до + y    maxAxis = absZ;    uc = -Икс;    vc = у;    *индекс = 5;  }  // Преобразование диапазона от -1 до 1, от 0 до 1  *ты = 0,5f * (uc / maxAxis + 1.0f);  *v = 0,5f * (vc / maxAxis + 1.0f);}

Связанный

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

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

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

Рекомендации

  1. ^ Фернандо Р. и Килгард М. Дж. (2003). Учебник по компьютерной графике: полное руководство по программируемой графике в реальном времени. (1-е изд.). Эддисон-Уэсли Лонгман Паблишинг Ко., Инк. Бостон, Массачусетс, США. Глава 7: Методы картирования окружающей среды
  2. ^ Грин, Н. (1986). «Картирование окружающей среды и другие приложения мировых проекций». IEEE Comput. График. Приложение. 6 (11): 21–29. Дои:10.1109 / MCG.1986.276658.
  3. ^ Nvidia, январь 2000 г. Техническое описание: Идеальные отражения и эффекты зеркального освещения с отображением среды куба В архиве 2008-10-04 на Wayback Machine
  4. ^ https://msdn.microsoft.com/en-us/library/windows/desktop/ff476906(v=vs.85).aspx
  5. ^ http://www.nvidia.com/object/cube_map_ogl_tutorial.html

Смотрите также