Примы против Полиса: каковы плюсы и минусы каждого? - PullRequest
3 голосов
/ 21 марта 2010

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

Итак, мой вопрос: зачем выбирать один метод вместо другого для представления трехмерных данных?

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

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


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

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

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

Ответы [ 4 ]

2 голосов
/ 21 марта 2010

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

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

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

1 голос
/ 22 марта 2010

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

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

1 голос
/ 21 марта 2010

Существует два способа описания и визуализации трехмерного объекта:

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

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

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

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

Так что, в сущности, вопрос не в том, когда вы используете "объекты" и когда вы используете "полигоны". Это вопрос хотите ли вы трассировать лучи или хотите ли вы визуализировать в интерактивном режиме .

0 голосов
/ 21 марта 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...