Я думаю, что хорошее прочтение того, что делают другие технологии графа сцены, принесло бы вам много преимуществ.
Фон
Например, посмотрите на описание Ogre3D. Это графический движок на основе графа сцены с открытым исходным кодом. Я бы посоветовал взглянуть на руководства и посмотреть, как используются узлы сцены (Примечание: я не говорю вам, чтобы научиться использовать Ogre, а какие функции присутствуют в узлах сцены Ogre и менеджерах сцен)
Документация SceneNode:
http://www.ogre3d.org/docs/api/1.9/class_ogre_1_1_scene_node.html
Документация SceneManager:
http://www.ogre3d.org/docs/api/1.9/class_ogre_1_1_scene_manager.html
Еще одна вещь, на которую стоит обратить внимание, это следующая ссылка:
http://sgl.sourceforge.net/#features
Это решение на основе графа сцены на основе OpenGL, и на странице возможностей показаны все узлы, которые он может содержать.
Ваши предложенные узлы
Я считаю, что граф сцены должен быть максимально удален от логики игры, чтобы у вас не было проблем с зависимостями. Для каждого из ваших пунктов я бы сказал следующее:
Игровые актеры
я бы наверное сказал нет. Как и в Ogre, у меня был бы базовый класс Entity (который содержал бы логику, специфичную для объекта) и базовый SceneNode с указателем члена Entity для получения соответствующей информации для визуализации объекта (Position, Orientation и т. Д.)
РЕДАКТИРОВАТЬ: Я не говорю, чтобы не включать ваши игровые актеры в график сцены здесь (в противном случае ничего не будет отображаться: P) Я говорю, что есть узел сцены со ссылкой на класс игрового актера, так что вы по-прежнему слабое соединение рендеринга и обновления игровых объектов.
Простые статические игровые объекты
Да
Триггеры игры?
Нет, для меня это звучит как логика игры.
Игровые огни?
да
Игровые камеры?
да
Оружие пули?
Не совсем уверен насчет этого, но я бы, вероятно, сказал «да», но вы, вероятно, захотите, чтобы все маркеры в качестве дочерних элементов имели родительский узел сцены «BulletCollection», просто чтобы вы могли кэшировать эту позицию, и вам не придется проходить через Граф сцены много, чтобы удалить и добавить маркеры для визуализации.
Игры Взрывы и спецэффекты?
Не уверен, я позволю кому-то еще ответить на это.
Охват графа сцены
Если у вас относительно небольшой уровень, вы сможете сохранить весь уровень в графе сцены, а затем оптимизировать его для видимости, используя Octree (обычно для наружной среды) или дерево BSP (обычно для внутренней среды).
Если у вас гораздо больший уровень, и вы не хотите загружать его, это то место, где потоковое вещание вступает в игру, но это совсем другая проблема. Я бы начал с небольшого уровня и понемногу смотрю, насколько велик вы можете сделать это без ущерба для производительности.
Заключение
Для меня граф сцены предназначен для рендеринговой части игрового цикла. Вы не должны соединять ваш рендеринг и обновления логики слишком близко друг к другу, иначе вы столкнетесь с досадными проблемами зависимости.