Отдаленный рендеринг трехмерных объектов [игры] - PullRequest
9 голосов
/ 18 июня 2009

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

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

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

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

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

Спасибо!

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

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

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

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

Ответы [ 8 ]

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

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

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

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

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

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

Я думаю, это то, что вы ищете Уровень детализации (LOD)

4 голосов
/ 18 июня 2009

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

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

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

0 голосов
/ 17 июля 2009

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

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

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

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

0 голосов
/ 18 июня 2009

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

0 голосов
/ 18 июня 2009

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

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


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

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

0 голосов
/ 18 июня 2009

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

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

0 голосов
/ 18 июня 2009

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

...