Я пытаюсь реализовать граф сцены, и во всех встреченных мной статьях рассказывается о сортировке объектов. Например, вы сортируете свои объекты по «материалу». Теперь, пока я не сел и не начал это реализовывать, я воспринимал это как должное, потому что это имело смысл. Но теперь мне интересно, что на самом деле меняет сортировка?
В моем движке у меня есть менеджер для UBO, я использую его для хранения данных, которые будут использоваться программами, на данный момент, которые включают только время, камеру и проекционные матрицы и источники света (я не беспокоюсь о том, какие источники света влияют какие объекты банкомат).
Теперь для каждой модели мне нужно изменить модель на мировую матричную униформу, сортировка не изменит этого. Значит, переход от изменения этой матрицы к настройке материала для каждого объекта так плох?
Я смутно помню, что где-то читал, что каждый раз, когда вы что-то меняете в конвейере, это должно сбрасываться, и это может вызвать проблемы с производительностью. Но для каждого звонка в любом случае я настраиваю модель на матрицу мира, так какой смысл беспокоиться об этом?
Кстати, есть ли какая-либо информация о том, является ли замена униформы и вызов glBufferSubData более (или менее) дорогой.
Ответы:
Вы определенно хотите отсортировать материалы вместе. Если вы можете, вы также можете использовать инстансинг для объединения геометрии (например, если у вас есть X одинаковых объектов).
Также есть смысл сортировать по глубине. Вы должны отсортировать прозрачные объекты назад (не обращая внимания на несколько продвинутых методов, которые устраняют эту необходимость в ограниченных обстоятельствах).
Также есть смысл сортировать непрозрачные объекты спереди назад, так как это позволяет в начале Z значительно сократить накладные расходы на фрагментный шейдер вашей сцены.
источник
Сортировка объектов исключительно по глубине имеет огромное значение, особенно в архитектурах биннинга и мозаичного рендеринга.
Сортировать твердые вещества спереди назад, прозрачные пленки сзади спереди.
При рендеринге материал, ближайший к камере и телу, отображается первым, а все остальное, занимающее то же пространство, будет отклонено при ранней проверке z-буфера.
Если графическая архитектура имеет некоторый иерархический z-буфер с низким разрешением, геометрия может быть отбракована даже до того, как что-либо будет визуализировано.
источник