Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Статьи / Frustum Culling (5 стр)

Frustum Culling (5 стр)

Автор:

Сравнение производительности всех методов.

Отдельно скорость только кулинга мы сравнивали. Сейчас будем сравнивать время всего кадра, поэтому данные будут немного отличаться. Поскольку нужно учитывать стоимость пересылки инстанс данных с ОЗУ на GPU (при кулинге на стороне СPU). Плюс стоимость нескольких дипов и АПИ вызовов.

Таблица 4. Сравнение производительности всех методов. Время всего кадра в ms. Intel Core i5-4460  (4 полноценных ядра, без Hyper-threading). Radeon R9 380.

Метод Sphere AABB OBB
Simple c++ 1,94 2,46 10,3
SSE 1,2 1,45 4,63
Simple  c++, multithreading 1,23 1,42 3,6
SSE, multithreading 1,18 1,2 2,02
GPU 1,19 - -

Возможны некоторые погрешности в измерениях (в сотых долях). Даже усредненное время постоянно немного меняется.

Выводы.

При использовании SSE и много поточности вместе, можно ускорить кулинг объектов в 9 раз. Если использовать OpenGL 4 (map буфера c флагами GL_MAP_PERSISTENT_BIT и GL_MAP_COHERENT_BIT), то пересылка данных становится очень быстрой. Плюс можно еще больше соптимизировать сам кулинг за счет использования деревьев, и различных трюков вроде запоминания последней плоскости отсечения.

GPU кулинг работает также быстро как и самый быстрый CPU метод. К тому же обладает рядом дополнительных преимуществ:
нет необходимости пересылать данные о видимых инстансах на GPU. Если использовать IndirectDraw (DX11+, Opengl4+, новые апи: DX12, Vulkan, Metal) и формировать информацию о дипе на стороне GPU, то можно получить еще большую производительность
можно относительно легко реализовать дополнительный кулинг объектов с учетом взаимной  загороженности объектов (Hierarchical-Z map based occlusion culling).

Использовать ли CPU или GPU кулинг? Разумеется, все зависит от:
    - проекта, сложности внедрения.
    - можно ли использовать DX11+ / Opengl 4+, новые API (DX12, Vulkan, Metal).
    - во что упирается производительность, в CPU или GPU.
    - нужно ли определять видимость с учетом загороженности объектов. На CPU это конечно тоже делается, но на GPU с этим справится эффективнее.

Безусловно, если есть такая возможность, стоит использовать GPU кулинг.

Исходный код всех примеров


Ссылки:
    1. Collision Detection FAQ
    2. View frustum culling
    3. View frustum culling optimization
    4. Efficient View Frustum Culling
    5. Optimized View Frustum Culling Algorithms for Bounding Boxes
    6. Hierarchical-Z map based occlusion culling
    7. Beyond Porting. How Modern OpenGL can Radically Reduce Driver Overhead
    8. Parallelizing the Naughty Dog engine using fibers
    9. Practical Occlusion Culling in Killzone 3
    10. Software Occlusion Culling
    11. Streaming SIMD Extensions (SSE)
    12. Culling the Battlefield 3

Анатолий Герлиц.

декабрь, 2016 г.

Страницы: 1 2 3 4 5

8 февраля 2017

#Frustum Culling, #multithreading, #SSE


Обновление: 3 мая 2017

2001—2018 © GameDev.ru — Разработка игр