Честно говоря, я не знаю, какие двигатели следующего поколения используют в эти дни, но я скажу вам, что я знаю. Легко запутаться между оптимизацией и структурой данных, используемой для этой оптимизации. Все перечисленные ниже вещи предназначены для оптимизации, но я укажу, какие именно структуры данных.
BSP : структура данных - для обнаружения пересечения между динамически движущимися объектами и статической геометрией мира. Раньше использовался как для обнаружения столкновений, так и для правильного рендеринга геометрии без zbuffer, но он больше не используется для рендеринга, поскольку у нас сейчас достаточно памяти для буфера az. Технически они генерируются немного по-другому, но все же считаются одним и тем же типом дерева. Требуется предварительная обработка.
Octree или Kd-Tree : Структура данных - используется для определения того, какие объекты находятся в одной «ячейке» или области, чтобы избежать проверки n ^ 2 на всех динамических объектах.
Это не единственные, но, вероятно, наиболее распространенные. Есть также много оптимизаций, которые позволяют движку избегать рендеринга геометрии в целом. Но следующее просто исключает геометрию, и это обычно все, для чего она используется:
Порталы : Технически не структура данных, но для отбора требуется специальная структура. Используется для выбора видимости геометрии мира и геометрии динамического объекта из вида. Я думаю, что требуется предварительная обработка, чтобы разделить мир на области. Но я на самом деле не реализовал это, поэтому я не знаю.
Отбор окклюзии : Оптимизация - используется для отбора видимости для любых объектов, например, для динамических объектов.
Обычный выборочный вид : Оптимизация - отбирает объекты, которые не видны с камеры.
Больше выбора окна просмотра : Оптимизация - Обычный выбор окна просмотра может быть оптимизирован еще больше при использовании октодерева. Вы можете удалить целые ячейки октодерева, которые находятся за камерой или не находятся в поле зрения. Это включает участки местности (если вы снаружи). Все, что не отбраковано октройным деревом, вы выполняете "регулярный выборочный просмотр". Тогда все, что осталось, вы бы сделали.
Отбор задней поверхности : Оптимизация - отбор геометрии от камеры для предотвращения растеризации. Обычно делается аппаратно, если состояние рендеринга установлено правильно.
Структуры данных особого случая:
Деревья AABB или деревья Sphere : это своего рода структуры данных особого случая. Они превращают вогнутую форму в выпуклую. Например, персонаж с костями технически вогнут. Это разбивает это в меньшие выпуклые части. Может использоваться как оптимизация для обнаружения столкновений, отбора видимости динамических объектов (обычно) и облегчает проведение испытаний на пересечение, поскольку оно выпуклое. Это будет, скажем, октри, так как они обычно являются динамическими объектами. Они также могут быть использованы для помощи в оптимизации выбраковки окклюзии.
Нет причины, по которой вам нужно использовать одну структуру для представления всего (например, графа сцены). На мой взгляд, вам лучше использовать разные структуры данных для разных задач, а не пытаться использовать какое-то дерево общего назначения. Например, движок, над которым я сейчас работаю, я планирую реализовать комбинацию BSP / Octree / AABB Tree со следующими оптимизациями: выборка окклюзии, область просмотра и, конечно же, выборка задней поверхности. Это означает, что у меня будет одно дерево BSP, одно дерево и, возможно, несколько деревьев AABB в этом дереве.
Выбор лучших структур данных и алгоритмов / оптимизаций - это, пожалуй, самая большая и самая полезная вещь, которую вы можете сделать для своего движка.