2009-06-18 4 views
8

Что такое базовая предпосылка за такими технологиями, как, например, в Oblivion (и в других играх, я уверен, не играл достаточно, чтобы знать), где объекты издалека отображаются, когда вы просматриваете их издалека? Например, большая башня находится в миле, и вы видите туманный прямоугольник ее, торчащий из горизонта ... Очевидно, что гигантская трехмерная сцена не может быть отображена, и я знаю, что в случае карт высот есть только алгоритмы аппроксимации которые используются для уменьшения качества карты высот дальше от камеры, но для конкретных объектов, что является лучшим способом показать их?Отдаленный 3D-рендеринг объектов [игры]

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

Еще одна очевидная методика заключается в том, чтобы хранить действительно грубые 3D-модели, но тогда как система 3D-рендеринга конкретно выбирает грубую модель здания, а не грубые модели других менее значительных (и, вероятно, от-на-расстоянии)? Как бы вы могли хранить что-то подобное вместе с вашей картой роста? Может быть, по дизайну, есть только несколько таких значимых ориентиров, а затем просто сохраните их в небольшом файле, а на каждом кадре отобразите те, которые меньше, чем на самом деле на дальнем расстоянии?

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

Еще одна связанная с этим тема - показать горы на расстоянии, так как они будут частью карты высот, а не 3D-моделей поверх нее, поэтому они действительно не смогут иметь грубую версию и карту высот алгоритм аппроксимации может испортить гору с очень большого расстояния (предполагая, что вы даже попытаетесь аппроксимировать и сделать такую ​​удаленную геометрию, которой вы, вероятно, не захотите). Бонусные баллы, если вы также включите это в свой ответ. :)

Спасибо!

P.S. Я использую OpenGL. Я просто ищу основные понятия, но если вы решите опубликовать пример кода, используйте функции и термины OpenGL! :)

EDIT: Спасибо за ответы! Для целей документации здесь есть другой ресурс, который я нашел: Глава 4.9 в Game Programming Gems 2 охватывает концепцию рендеринга отдаленных пейзажей в skybox: http://books.google.com/books?id=1-NfBElV97IC&lpg=PA416&ots=SOpnfijZly&dq=render%20distant%20to%20skybox&pg=PA416 (к сожалению, предварительный просмотр - это только первая страница главы ... нужно взять эту книгу из библиотеки моего университета, как только я вернусь в августе)

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

Я, между прочим, больше думаю о линиях игры Oblivion, поэтому ответ может зависеть от жанра игры.

ответ

7

несколько методов, в том числе те, о которых вы упомянули:

  • Уровень детализации. Описанный выше.
  • Mipmapping. Для текстур.
  • Поле зрения. Ограничьте количество вещей, которые ваша камера может «видеть», выбрав соответствующий уровень масштабирования. См. Также просмотр отлучения.
  • Far-отсечения плоскости. Окклюзия отдаленных мест: в большинстве игр используется туман, горы или какое-то другое оправдание, чтобы иметь жесткий отрыв от того, как далеко вы можете видеть. Это может быть реализовано с использованием осциллов или какой-либо другой такой техники.Это может быть основано на целых объектах, или многоугольниках или что-то еще, и обычно устанавливается прямо за этими вышеупомянутыми горами.
  • Arenas/levels/areas/whatever - снова большинство игр искусственно ограничивают вас игрой на одной арене за раз; преимущество очевидно (вы можете игнорировать объекты на всех других аренах)
  • Предварительный рендеринг - это то, что вы предлагаете выше. Для статических сцен, которые находятся далеко, визуализируйте сцену в «типичном» виде и сделайте ее текстурой на заднем плане или используйте ее для карты небоскребов/отражения/и т. Д.

Идея состоит в том, чтобы выбросить насколько это возможно, прежде чем пользователи начнут замечать.

Существует множество ранее существовавших наборов инструментов, которые будут делать это автоматически, но они, как правило, стоят денег. Если вы посмотрите на серьезное приложение, я бы рекомендовал хотя бы исследовать их решения.

+1

Я думаю, что ваша точка поля зрения немного неестественна. FOV обычно относится к углу «камеры», которую вы просматриваете.Точка, в которой вы отрезали большие объекты, называется «плоскостью отсечения» –

+0

@NeilN, вы правы; Я изменю ответ. –

0

Один метод LOD (уровень детализации). Чем дальше объект от камеры, тем меньше треугольников. Вот ссылка: http://www.stefan-krause.com/

7

Я думаю, что это то, что ищете Level of Detail (LOD)

+0

Ну, я думаю, что это немного меньший масштаб ... Я говорю о действительно больших масштабах, и LOD не будет работать, потому что это будет означать, что все модели, находящиеся за милями, все еще нарисованы, что не так. – Ricket

+2

Да, в какой-то момент вы отбираете все объекты, находящиеся слишком далеко от материи. Это иногда можно найти в настройках 3d-программ в качестве расстояния рисования. когда что-то превышает то, что вы просто прекратите его рендеринг. – AvatarOfChronos

+0

Oblivion действительно использует LoD для визуализации отдаленной местности. Есть некоторая информация о elderscrolls.com, например. http://cs.elderscrolls.com/constwiki/index.php/Landscape_LOD_Tutorial – Kylotan

4

для 3D-моделей, метод называется level of detail. По сути, модели с несколькими версиями остаются доступными для правильного использования на основе контекста. Это не всегда просто для расстояния, оно также может использоваться для управления частотой кадров в других ситуациях.

Будьте осторожны, но у вас должно быть включено mipmapping, или вы получите сверкание на больших текстурах на моделях нижнего res и будьте осторожны с анимацией. Переключение модели под анимирующим скелетом сложно, поэтому один из методов заключается в том, чтобы поддерживать тот же скелет, даже когда LOD-модель.

Существуют динамические системы LOD как для местности, так и для объектных моделей, но они могут быть тяжелыми.

0

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

Это, конечно же, еще один трюк в вашем арсенале, и вам все равно понадобится LOD.

0

Низкоформатные версии моделей особенно хорошо подходят для транспортных средств и объектов. Это очень сложно с рельефом. Я работал над боевыми типами игр и симуляторами для ПК. Небольшой туман помогает скрыть «всплывающие окна» между деталями.

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


«Еще более очевидный метод для хранения действительно грубые 3D модели, но то, как работает система рендеринга 3D специально выбирает для визуализации грубой модели здания, а не грубые моделей других менее значимы (и, вероятно, не-видимый-из-такого-расстояния), как бы вы могли хранить что-то подобное вместе с вашей картой высоты? "

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

0

Один из способов обработки местности - иметь плитки с несколькими разрешениями. Подобно тому, как это делают Virtual Earth и Google Maps, они рекурсивно делят мир на плитки. Итак, на уровне 0, 16 на уровне 1 есть 4 плитки и т. Д. Затем, используя некоторый алгоритм LoD для определения масштаба/масштаба, вы должны загрузить соответствующие ландшафтные плитки для данной области.

0

Техника динамического кэширования предварительно визуализированных видов отдаленных объектов обычно называется «самозванцами». Here's статья из старой книги по программированию игр по этой теме.

Существует много методов обработки уровня детализации для ландшафта высотной карты. Взгляните на vterrain.org для обзора некоторых распространенных методов. Общий принцип в большинстве вариантов одинаковый - разбить рельеф на секции и использовать геометрию с меньшим разрешением и текстуры на расстоянии - но детали меняются.

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

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

Смежные вопросы