Je pense qu'une bonne lecture de ce que font les autres technologies de graphes de scènes vous apporterait de nombreux avantages.
Contexte
Par exemple, regardez la description d'Ogre3D. Il s'agit d'un moteur graphique basé sur un graphique de scène qui est open source. Je suggérerais de regarder les tutoriels et de voir comment les nœuds de scène sont utilisés (Remarque: je ne vous dis pas d'apprendre à utiliser Ogre, mais plutôt les fonctionnalités présentes dans les nœuds de scène et les gestionnaires de scène d'Ogre)
Documentation de SceneNode:
http://www.ogre3d.org/docs/api/1.9/class_ogre_1_1_scene_node.html
Documentation de SceneManager:
http://www.ogre3d.org/docs/api/1.9/class_ogre_1_1_scene_manager.html
Quelque chose d'autre mérite d'être examiné est le lien suivant:
http://sgl.sourceforge.net/#features
Il s'agit d'une solution de graphe de scène basée sur OpenGL et la page des fonctionnalités présente tous les nœuds qu'elle peut contenir.
Vos nœuds suggérés
Je suis d'avis qu'un graphique de scène doit être aussi abstrait que possible de la logique du jeu afin que vous n'ayez aucun problème de dépendance. Pour chacun de vos points, je dirais ce qui suit:
Acteurs de jeu
Je dirais probablement non. Semblable à Ogre, j'aurais une classe d'entité de base (qui contiendrait la logique spécifique à l'objet) et un SceneNode de base avec un pointeur de membre d'entité pour obtenir les informations appropriées pour restituer l'objet (position, orientation, etc.)
EDIT: Je ne dis pas de ne pas inclure vos acteurs de jeu dans le graphique de scène ici (sinon rien ne s'afficherait: P) Je dis d'avoir un nœud de scène avec une référence à la classe d'acteur de jeu logique, donc vous avez encore un couplage lâche du rendu et de la mise à jour des objets du jeu.
Jeu statique simple ojbect
Oui
Déclencheurs de jeu?
Non, cela ressemble à une logique spécifique au jeu pour moi.
Lumières de jeu?
Oui
Caméras de jeu?
Oui
Balles d'armes?
Pas complètement certain à propos de celui-ci, mais je dirais probablement oui, mais vous voudriez probablement que toutes les puces soient des enfants vers un nœud de scène parent "BulletCollection", juste pour pouvoir mettre en cache cette position et vous n'aurez pas à traverser la graphique de scène beaucoup à supprimer et ajouter des puces à rendre.
Explosions de jeu et effets spéciaux?
Pas certain, je vais laisser quelqu'un d'autre répondre à cela.
Couverture du graphique de scène
Si vous avez un niveau relativement petit, vous devriez être en mesure de stocker le niveau entier dans un graphique de scène, puis d'optimiser la visibilité à l'aide d'un octree (généralement pour les environnements extérieurs) ou d'un arbre BSP (généralement pour les environnements intérieurs).
Si vous avez un niveau beaucoup plus grand et que vous ne voulez pas charger de niveau, c'est là que le streaming entrerait en jeu, mais c'est un autre problème. Je commencerais par un petit niveau et je verrais progressivement la taille que vous pouvez atteindre sans affecter les performances.
Conclusion
Pour moi, un graphique de scène correspond à la partie de rendu d'une boucle de jeu. Vous ne devez pas coupler trop étroitement votre rendu et vos mises à jour logiques, sinon vous allez rencontrer des problèmes de dépendance ennuyeux.