Страницы

Поиск по вопросам

четверг, 2 января 2020 г.

Какие практичные методики оптимизации кода OpenGl 3D движков кроме перечисленных ниже вы знаете?

#разработка_игр #3d #оптимизация #opengl



Вертексные буферные объекты.
Отрисовка треугольников одного материала для снижения количества переключений между
текстурами, цветом и компилированными шейдерами.
Удаление из кадра ненужных объектов. 
Рефакторинг кода стандартными методами.
Перенос матричных операций с мировыми координатами объектов в шейдеры.
Рендер спецэффектов в другой программе и отрисовка их из готового файла. (Используется
больше памяти, но быстрее так как не нужно проводить предварительные расчеты для отрисовки
спецэффекта.)
Использование diffuse карт для дешевого выбивания полигонов из модели без потери
качества.
Mipmapping.
Использование где это возможно заранее заготовленных карт освещения вместо real-time
расчетов
Использование triangle strips для экономии памяти.
Использование большего числа текстур текстур с размерами кратными степени двойки.
Перенос real-time расчета освещения в шейдеры.
Исключения из тела главной функции, которая отрисовывает кадр, всех сложных математических
операций, замена их заранее обсчитанными статичными объектами.
Перенос кода для детектирования столкновений, AI и других функций не связанных напрямую
с отрисовкой картинки в отдельный поток выполнения вызываемый с меньшей частотой чем FPS
Представление атрибутов вертексов в виде массива структур, а не структуры массивов(x1,y1,z1,x2,y2,z2,x3,y3,z3
вместо x1,x2,x3,y1,y2,y3,z1,z2,z3)

Под 3D движком понимается программа обертка над OpenGl, которая подготавливает массив
аттрибутов вертексов для подачи в трехмерный конвейер, естественно не поддерживающая
программный рендеринг при котором сам конвейер запрограммирован внутри кода движка.
Под оптимизацией понимается оптимизация по многим параметрам, быстродействию, качеству
картинки, экономии памяти, читабельности кода и.т.д
Интересуют только реальные методы легко и быстро реализуемые на практике прикладным
программистом.
Методы из советского ВТУЗовского курса вычислительной математики и численных методов,
а также алгоритмические-компиляторные методы вроде замены деления на два битовым сдвигом
повсюду внутри кода просьба не предлагать.    


Ответы

Ответ 1



Навскидку: Атласы - замена мелких текстур одной большой (что-то похожее видел в Вашем посте, но недопонял, о чём речь там). Occlusion query - отрисовываем простейшую модель вместо сложной, спрашиваем у видеокарты, сильно ли она перекроется, и узнаём, надо ли её рисовать. Использование временной когерентности для того же отбрасывания невидимых объектов. Instancing. Вообще говоря, Вы мешаете в кучу и графику, и игровую логику, так что конкретный ответ дать сложно. Более того, некоторые техники взаимоисключающие. Оптимизации применяются тогда, когда возникают узкие места, иначе толку от них нет. Например, если Вы упёрлись в fillrate, никакое применение VBO толку не даст, и наоборот, если основная проблема в диком количестве геометрии - можно не заморачиваться с атласами, оптимизацией шейдеров и тд,а сосредоточиться на отбрасывании невидимых треугольников и LOD. В общем случае, на неполностью загруженную видеокарту пытаются переложить все распараллеливающиеся задачи, а не только графику, в то время как процессору обычно отдают игровую логику(если видеокарта занята).

Ответ 2



к общему списку можно добавить использование лайтмапов для статичных объектов - и выглядит качественней, и ресурсы экономит

Комментариев нет:

Отправить комментарий