Как предотвратить перерасход? - PullRequest
2 голосов
/ 18 мая 2010

Это трудный вопрос для поиска в Google, поскольку он имеет другое значение в финансах.

Конечно, я имею в виду "рисование", как в ... компьютерной графике .. не деньгах ..

Я заинтересован в предотвращении перерисовки как для 3D-рисования, так и для 2D-рисования.
(я должен превратить их в два разных вопроса?)

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

EDIT:
Что я имею в виду, перерисовывая это:

  • когда вы рисуете слишком много объектов, рендеринг одного кадра будет очень медленным
  • когда вы рисуете больше области, чем вам нужно, рендеринг одного кадра будет очень медленным

Ответы [ 3 ]

5 голосов
/ 18 мая 2010

Вопрос действительно слишком широкий: o) Изучите эти «указатели» и задайте более конкретный вопрос.

Типичные ингибиторы overdraw:

  • Z-буфер
  • Методы на основе окклюзии (различные методы буферизации, окклюзии HW, ...)
  • Тест трафарета

на немного более высоком логическом уровне:

  • отбор(обычно в виде усеченного взгляда)
  • методы организации сцены (обычно деревья или мозаика)
  • грубое рисование спереди назад (это, очевидно, поддерживающая техника: o)

РЕДАКТИРОВАТЬ: добавлен трафаретный тест, действительно есть интересные способы предотвращения перерисовок, особенно в комбинации 2d / 3d.

5 голосов
/ 18 мая 2010

Это довольно сложная тема.

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

Второе - Z-сортировка объектов, находящихся в камере. Лучше визуализировать их спереди назад, чтобы близкие объекты записывали «близкое значение» в буфер глубины, а пиксели удаленных объектов не рисовались, поскольку они не прошли тест глубины. Это сохранит частоту заполнения вашего графического процессора и работу пиксельных шейдеров. Однако обратите внимание, что если у вас есть полупрозрачные объекты в сцене, они должны быть нарисованы сначала в обратном порядке, чтобы сделать возможным альфа-смешение.

Обе вещи достижимы, если вы используете какой-то космический раздел, такой как Octree или Quadtree . Что лучше, зависит от вашей игры. Quadtree лучше подходит для больших открытых пространств, а Octree - для помещений с большим количеством уровней.

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

2 голосов
/ 18 мая 2010

Уменьшите количество объектов, которые вы рассматриваете для рисования, на основе расстояния и положения (т. Е. Отклоните те объекты, которые находятся вне зоны видимости).

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

Ваш API обычно отклоняет полигоны, которые также не обращены к точке обзора, так как вы обычно не хотите рисовать заднюю грань.

Когда дело доходит до фактического времени рендеринга, часто бывает полезно рендерить непрозрачные объекты спереди назад, чтобы тесты буфера глубины в конечном итоге отбрасывали целые полигоны. Это работает и для 2D, если у вас включена буферизация глубины.

Помните, что это проблема оптимизации производительности. У большинства приложений не будет существенной проблемы с оверрайтом. Используйте такие инструменты, как Pix или NVIDIA PerfHUD , чтобы измерить проблему, прежде чем тратить ресурсы на ее решение.

...