Сортировка объектов перед рендерингом

10

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

В моем движке у меня есть менеджер для UBO, я использую его для хранения данных, которые будут использоваться программами, на данный момент, которые включают только время, камеру и проекционные матрицы и источники света (я не беспокоюсь о том, какие источники света влияют какие объекты банкомат).

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

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

Кстати, есть ли какая-либо информация о том, является ли замена униформы и вызов glBufferSubData более (или менее) дорогой.

Dreta
источник
3
Быстрый ответ: да, переход от изменения матрицы к настройке материалов на каждом объекте так плох. На этом этапе я бы предложил побегнуть, чтобы узнать об инструментах измерения производительности OpenGL для вашей платформы, прежде чем продолжить. С инструментами perf вы можете легко измерить различные методы и выяснить, что лучше всего подходит для нужд вашего рендерера. Плюс эти инструменты продлят вас всю вашу карьеру вперед, пока этот рендерер ... не так много ;-)
Патрик Хьюз
@PatrickHughes потрясающе, спасибо, я обязательно проверю это
dreta

Ответы:

4

Вы определенно хотите отсортировать материалы вместе. Если вы можете, вы также можете использовать инстансинг для объединения геометрии (например, если у вас есть X одинаковых объектов).

Также есть смысл сортировать по глубине. Вы должны отсортировать прозрачные объекты назад (не обращая внимания на несколько продвинутых методов, которые устраняют эту необходимость в ограниченных обстоятельствах).

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

Шон Миддледич
источник
3
Упорядочить непрозрачные / прозрачные объекты непросто для сложных ситуаций (до невозможности без произвольных правил). Вы также можете группировать по текстуре с той же целью сокращения вызовов GL.
Darkwings
Упорядочение по текстуре необходимо для пакетных вызовов и уменьшения количества вызовов. Сортировка не имеет ничего общего с сокращением количества вызовов. Сортировка имеет отношение к фактическому получению правильного рендеринга (для прозрачных объектов) или к минимизации накладных расходов процессора фрагментов (для непрозрачных объектов). «Сложность» - это проблема, да, но это то, с чем программистам игрового движка платят за то, чтобы игры действительно игрались на обычном оборудовании. Аппаратная эффективность только между отсортированными и несортированными непрозрачными объектами может быть весьма значительной.
Шон Мидлдич
opengl.org/wiki/Transparency_Sorting Вот что я имел в виду под «произвольными правилами». Для сложных случаев нет объективной «правильной» сортировки. О «сортировке» и «упорядочении» в ОП четко говорилось «сортировка по материалу» (независимо от прозрачности), и я имел в виду то же самое для текстуры, поскольку обе цели влияют на производительность.
Darkwings
Честно говоря, я никогда не видел подобных проблем в реальных играх. Эти примеры на самом деле не отражают того, как на самом деле все происходит, когда прозрачные объекты обычно имеют примерно одинаковый размер и имеют довольно «квадратные» границы столкновений, которые предотвращают сумасшедшие наложения. В любом случае, тот факт, что «это трудно», не меняет его необходимости. Я также, конечно, указал, что группировка по материалам важна, и упомянул инстанцию, чтобы противопоставить утверждение «никакая сортировка не может помочь», поэтому я не уверен, есть ли что-то конкретное, что вы нашли неправильно в моем ответе.
Шон Мидлдитч
Послушайте, комментарий не означает, что я нашел что-то неправильное в вашем ответе, и я никогда не говорил «никакая сортировка не может помочь». Я заявлял, что есть случаи, когда объективного правильного решения не существует, поэтому очевидно, что решение должно быть найдено с использованием произвольных правил. Это 2 совершенно разных утверждения.
Darkwings
3

Сортировка объектов исключительно по глубине имеет огромное значение, особенно в архитектурах биннинга и мозаичного рендеринга.

Сортировать твердые вещества спереди назад, прозрачные пленки сзади спереди.

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

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

Яри ​​Комппа
источник