В настоящее время я работаю над небольшим движком 3D-рендеринга. Однако я столкнулся с проблемой в моем рендерере. Вот как это работает в настоящее время:
С одной стороны, у меня есть граф сцены / ECS, используемый для обработки всех объектов SceneObjects, которые есть в моей игре. Каждый объект сцены может иметь одного родителя и от 0 до N детей. Я могу прикрепить компоненты к каждому SceneObject. Компоненты могут быть различными вещами, такими как рендеринг, освещение или камеры.
С другой стороны, у меня есть мой рендерер, который полностью агностирован c вне моей иерархии сцены. Фактически, каждый раз, когда я добавляю компонент «Renderable» в SceneObject, мой визуализатор получает уведомление и создает свое собственное представление визуализируемого (Me sh, BoundingBox et c.). Мой рендерер не заботится о родителях или дочерних элементах рендеринга.
Проблема, с которой я сталкиваюсь, возникает, когда я хочу получить видимые объекты перед тем, как поместить их в RenderQueue. На стороне рендерера все рендерабельные элементы хранятся в плоском списке 1008 *, и для выполнения операций отбраковки мне нужно l oop в этом списке. К сожалению, этот список содержит все активные объекты моей игры, и я могу очень потреблять процессорное время .
Я хотел бы найти способ реализовать эффективную часть системы разбиения на стороне рендерера в котором я мог бы легко обновить данные визуализируемого объекта (положение, ограничительная рамка).
Спасибо за вашу помощь.