2010-03-21 6 views
2

Я заметил, что большинство 3D-игр/рендеринга представляют собой твердые тела как сетку (обычно треугольную) 3d полигоны. Однако в некоторых примерах, таких как Second Life или PovRay, используются твердые тела, созданные из набора 3d примитивы (куб, сфера, конус, тор и т. Д.), На которых могут выполняться различные операции для создания более сложных фигур.Prims vs Polys: каковы плюсы и минусы каждого?

Так что мой вопрос: Зачем нужен один метод для другого для представления трехмерных данных?

Я вижу, что для сложных операций трассировки лучей может быть полезно описать поверхность как одну математическую функцию (например, PovRay), но SL, безусловно, не пытается так амбициозно работать с движком рендеринга.

Равным образом, я могу себе представить, что может быть более эффективной полосой пропускания служить описания обобщенных твердых тел, а не произвольных сетках, но это действительно стоит недостаток, что SL страдает (т.е. моделирования материала является действительно трудно, и, как правило, результаты уродливые) - было ли это всего лишь плохим решением, принятым на ранней стадии разработки SL, к которому они теперь привязались? Или это артефакт того, что проще всего реализовать в OpenGL/DirectX?


EDIT: Прочитав ответы до сих пор, я теперь думаю, что мои два примера имеют очень разные причины для использования примитивов:

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

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

ответ

2

«примитивы» более высокого уровня (сферы, кубы и т. Д.) Несут с собой более смысловую информацию о том, что именно они представляют, а также требования к пропускной способности/хранению (сфера требует 2 параметра - центральное положение и радиус - в то время как скажем, для изосферы требуется столько треугольников, сколько необходимо для создания сферы).

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

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

+0

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

+0

@ChrisF: Возможно, выполнение булевых операций на стороне клиента может сэкономить полосу пропускания? Кроме того, возможно ли, что SL представляет человека параметрически? Это было бы с точки зрения пропускной способности ... –

+0

@MichaelE: +1 Я не считал обнаружение, но это имеет большой смысл. Также позволяя клиенту выбрать, сколько деталей для рендеринга - умная оптимизация. –

0

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

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

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

Я не знаю, почему создатели SL решили пойти с примитивами, и я не знаю игру в деталях, но, я думаю, высококачественный рендеринг вторично относится к ней.

+0

«Многоугольник может по определению представлять любой другой геометрический примитив» - кроме сфер, конусов и торов, которым потребуется бесконечное количество полигонов. – Kylotan

+0

@ Kylotan: Точно. Вот в чем я попытался разобраться с LoD.Использование Prims меняет интерпретацию LoD на клиента, Polys позволяет вам улучшить ручную оптимизацию. –

1

Есть два способа описания и рендеринга 3D-объекта:

  1. Опишите 3D объект в виде полигонов (разбит на треугольники, треугольник полос, и т.д., и т.д.).Затем сделайте несколько выступов из пространства объектов в пространство экрана и используйте умную математику для имитации освещения. Когда вы находитесь в пространстве экрана, сделайте еще более умную математику с пиксельными шейдерами, чтобы имитировать лучшее освещение. Это метод, используемый ускоренными графическими API-интерфейсами, такими как Direct3D и OpenGL. Все игры в режиме реального времени (например, Second Life) используют этот метод или что-то похожее на него.
  2. Описывать объекты, используя любую форму, имеет смысл для этого конкретного объекта (да, даже «истинные» кривые или бесконечные плоскости разрешены). Получите каждый пиксельный цвет, проследив путь света через пиксели в плоскости изображения и имитируя эффекты своих встреч с виртуальными объектами. Это делается с помощью симуляций, отражающих, как свет взаимодействует с объектами в реальной жизни. Это занимает очень много времени и очень дорого. Рэй-трассировщики, такие как POVRay, используют этот метод.

SL мощь использовать примитивы в том смысле, что их движок API может позволить вам сделать что-то вроде

Sphere mySphere = engine->createSphere(x,y,z); 
mySphere->moveTo(x,y,z); 

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

Так что, в основном, это не вопрос, когда вы используете «объекты» и когда используете «полигоны». Речь идет о вы хотите, чтобы луч-трассировка или вы хотите визуализировать интерактивно.

+0

Хорошо, но нет ли там трассировщиков лучей на сетке? (Yaffray, 3dsmax и т. Д.) Что делает PovRay особенным? –

+0

POV-Ray внутренне представляет объекты, используя их математические определения; все примитивные объекты POV-Ray могут быть описаны математическими функциями. (из Википедии). Вот что делает его особенным :) –

1

Это почти не имеет ничего общего с OpenGL, поскольку OpenGL (и DirectX) работают с треугольниками, а не с изогнутыми поверхностями или геометрическими примитивами. Таким образом, очень маловероятно, что Linden Labs работают с библиотекой более высокого уровня, что упростило рендеринг примитивов, чем треугольные сетки.

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

+0

Это полезная информация о OpenGL; и да, я начинаю думать, что пропускная способность является основным фактором для Linden Labs. –

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