Лучший метод отбора OpenGL для рендеринга старой игры?

StackOverflow https://stackoverflow.com/questions/5845626

  •  27-10-2019
  •  | 
  •  

Вопрос

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

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

Спасибо: скриншот этой работы в процессе. Некоторые люди могут узнать это :) Кроме того, игнорируют уродливые цвета для листьев. Я не учитываю альфа -маскировку.

Изображение: http://i.stack.imgur.com/duc2i.png

Это было полезно?

Решение

Есть две разные вещи, которые следует учитывать: вы просто хотите просмотреть это правильно, т.е. скрытое удаление поверхности? Тогда простое тестирование глубины сделает работу; Накладные расходы в том, что вы обрабатываете геометрию, которая вообще не попадает на экран. Однако, если это (очень) старая игра, вы взяли данные, вполне вероятно, что полная карта со всеми ее активами имеет меньше многоугольников, чем то, что видно в современных играх на экране. В этом случае вы не забегаете ни в каких проблемах с производительностью.

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

Эти расчеты, однако, полностью выходят за рамки OpenGL или любого другого 3D Rasterizing API (например, Direct3D) - их задача - просто рисовать треугольники на экране с использованием сложных методов расчищения; Там нет управления объектами, нет функций более высокого уровня. Так что вы должны реализовать это.

Типичным подходом является использование пространственной структуры подразделения. Самые популярные KD Деревья, Октри а также BSP Деревья. Анкет Деревья BSP являются пространственно очень эффективными, но тяжелее по вычислению. Лично я предпочитаю гибридную/комбинацию KD Tree и Octree, так как их легко изменить, чтобы следовать динамическим изменениям в сцене. Деревья BSP намного тяжелее в обновлении (обычно требуется полная рекомпьютация).

Учитывая такое пространственное структурирование, очень легко определить, находится ли точка в определенной области интереса. Также очень просто выбирать узлы в дереве с помощью геометрических ограничений, таких как плоскости. Это делает реализацию грубой фруктовой отрывов очень простым: один использует плоскости вырезки Frustum, чтобы выбрать все узлы из дерева внутри плоскостей. Чтобы облегчить жизнь графическим процессорам, вы можете захотеть сортировать узлы близко к далеки; Опять же, структура дерева помогает вам, так как вы можете рекурсивно отсортировать дерево, что приводит к почти оптимальной сложности O (n log (n)).

Если вам все еще нужно повысить производительность рендеринга, вы можете использовать пространственные подразделения, определенные деревом, для (невидимо) геометрии тестирования рендеринга в Запрос окклюзии, прежде чем повторять в поддерево, ограниченное тестируемыми границами.

Другие советы

Я знаю, что могу отбрасывать многоугольники, а не в Frustum, и это поможет облегчить часть нагрузки, но смогу ли я сказать, выбрать не рендеринг многоугольников, которые находятся на определенном расстоянии от камеры? Как это называется?

Это уже сделано Frustum It Self. FAR PLANE установил ограничение расстояния камеры на объект, который будет представлен.

Посмотри на glfrustum.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top