Как называется и наиболее распространена реализация этого свойства трехмерных графических движков? - PullRequest
3 голосов
/ 04 июня 2009

Я хочу сказать «неограниченная система отсчета» или «пространственно-зависимые независимые подпространства», но я не думаю, что это правильно.

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

Первый корабль запускает свои двигатели и движется под вторым кораблем. Два корабля пристыковываются, и шлюз открывается. Экипажу первого корабля теперь нужно подняться до на второй корабль. Шлюз закрывается, и корабли отрываются.

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

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

Я вижу две возможные реализации.

1) «Двигатель». Каждый корабль оказывает силу на каждый объект внутри него. Когда первый корабль движется относительно второго корабля, это движение переводится команде, чтобы изменить их глобальное пространственное положение. Это кажется вычислительно дорогим ...

2) «Факер». Окна каждого корабля отображают симулированный вывод из виртуального глобального пространства, но корабли и их содержимое на самом деле не движутся относительно друг друга. Связь между кораблями - это динамический портал, который связывает обе «комнаты» корабля в правильной ориентации.

Как называется это свойство и где я могу найти примеры в реальных 3D-движках?

Ответы [ 3 ]

7 голосов
/ 04 июня 2009

Многие движки 3D обрабатывают это с помощью графа сцены . В большинстве графов сцен у вас будут родительские «узлы», каждый из которых содержит дочерние элементы, в этом случае каждый корабль будет узлом, а люди, комнаты, мебель и т. Д. Внутри корабля - дочерние.

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

В вашем примере разделы «Вверх» и «Вниз» будут просто перемещаться локально вверх или вниз. В какой-то момент, когда вы проходите через воздушный шлюз, вы перемещаете ребенка от одного родителя (корабля) к следующему родителю (другому кораблю) и меняете его положение (то есть: со дна корабля1 на 0,0 От -20 до "вершины" корабля 2 (0,0,20 и т. Д.).

Краткое руководство по OpenSceneGraph хорошо описывает эту концепцию.


Редактировать:

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

3 голосов
/ 04 июня 2009

Расширение ответа Рида. Вот фрагмент старого списка функций Unreal Technology.

Технология динамического графа сцены

Технология динамического графа сцены (DSG) является естественным расширением технологии портала. Динамический граф сцены состоит из корневого узла, соответствующего непосредственному окружению игрока, и иерархического дерева дочерних узлов.

Каждый узел DSG имеет преобразование системы координат, объем отсечения и другое связанное с ним состояние рендеринга. Движок рендеринга Unreal создает динамический граф сцены на лету при рендеринге каждого кадра. Новые узлы графа сцены генерируются по мере того, как видимость зрителя распространяется через порталы. Узлы графа сцены являются основными строительными блоками многих реалистичных и специальных эффектов, таких как:

  • Зеркальные поверхности.
  • Полуотражающие материалы, такие как мраморные поверхности, которые частично отражают свет.
  • Неевклидовы перенаправляемые эффекты портала "деформации" для просмотра через телепорты.
  • Видеть сквозь окна в зону бесконечного неба, в которой строятся небо, планеты, горы и другие объекты.
  • Небо и фон с независимыми системами координат для независимого перемещения и вращения.

Сила рендеринга DSG заключается в том, что все эффекты узла полностью совместимы. Например, после определения зеркального узла DSG зеркала автоматически поддерживаются рекурсивно (для эффектов типа зеркального отображения); зеркала работают с небесами; зеркала работают с варп-порталами; варп-порталы работают с небесами и т. д.

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

1 голос
/ 04 июня 2009

Я не могу сказать вам точное название этого, но я думаю, что это было бы очень легко реализовать с openGL - когда вы рисуете каждый космический корабль, вы переводите этот космический корабль в правильное положение в трехмерном мире. Затем, когда вы рисуете все объекты внутри этого корабля, не сбрасывайте свою мировую матрицу - оставьте перевод таким же, и все будет нарисовано относительно позиции корабля.

...