Как я могу оптимизировать рендеринг большой модели в OpenGL ES 1.1? - PullRequest
7 голосов
/ 19 апреля 2011

Я только что закончил реализацию VBO в своем 3D-приложении и увидел примерно 5-10-кратное увеличение скорости рендеринга.То, что раньше рендерилось со скоростью 1-2 кадра в секунду, теперь рендерится со скоростью 10-11 кадров в секунду.

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

Использование моего устройства составляет 100%, Использование Tiler - 100%, Использование Renderer - 11%, а байтов ресурса - 114819072. Это составляет 912 120 граней в модели CAD.

Есть предложения?

image

1 Ответ

10 голосов
/ 19 апреля 2011

Использование Tiler в размере 100% указывает на то, что узкое место соответствует размеру геометрии, передаваемой в графический процессор .По моему опыту, все, что вы можете сделать, чтобы уменьшить размер геометрии, может привести к почти линейному сокращению времени рендеринга.Эти шаги по настройке работали для меня в прошлом:

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

  • Попробуйте использовать меньший тип данных для информации о вершине.Я обнаружил, что могу использовать GLshort вместо GLfloat для своих вершин и нормалей, не теряя много точности в рендеринге.Это значительно сократит вашу геометрию и приведет к хорошему увеличению скорости рендеринга.

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

  • Вы уже используете VBO, так что вы воспользовались этой оптимизацией.

  • Не останавливайте конвейер рендеринга в любой точке.Вырежьте все, что читает текущее состояние, как и все вызовы glGet *, потому что они действительно мешают работе графических процессоров PowerVR.

Есть и другие вещи, которые могут привести кнебольшие улучшения производительности, такие как использование чередующихся вершин, нормалей, текстурных данных в ваших VBO, выравнивание ваших данных по 4-байтным границам и т. д., но то, что я нашел выше, оказало наибольшее влияние на настройку моего собственного OpenGLПриложение ES 1.1.

Большинство из этих пунктов подробно рассмотрены в разделе " Рекомендации по работе с данными вершин " в Руководстве Apple по программированию OpenGL ES для iOS.

...