Non. À aucun moment, vous ne devriez avoir une matrice du monde explicite dans votre shader.
Une explication détaillée de pourquoi peut être trouvée ici , mais la version courte est vraiment très simple: vous n'en avez jamais besoin et cela peut tuer votre précision en virgule flottante.
Si votre espace mondial est trop grand, une caméra éloignée de l'origine peut entraîner des problèmes de précision en virgule flottante.
Tout l'espace du monde n'est rien d'autre qu'un intermédiaire entre l'espace modèle et l'espace caméra. C'est un endroit où vous pouvez exprimer la caméra et tous les autres objets dans le même espace. Mais tout ce que vous l'utilisez est de générer une matrice monde-caméra, que vous appliquez ensuite à toutes les matrices modèle-monde pour créer des matrices modèle-caméra.
Vous pouvez traiter les problèmes de précision en C ++ en utilisant des doubles au lieu de flottants pour les calculs matriciels. Vous pouvez les reconvertir en flottants avant de les télécharger dans le shader.
Alors pourquoi auriez-vous besoin d' une transformation explicite de l'espace-monde dans votre shader? Dans votre code source, oui. Mais dans ton shader? Que feriez-vous avec cela que vous ne pouvez pas faire avec l'espace de la caméra?
L'éclairage peut être fait dans l'espace de la caméra aussi facilement que dans l'espace mondial; tout ce que vous avez à faire est de transformer vos positions / directions d'éclairage en espace de caméra. Après tout, l'espace de la caméra a la même échelle que l'espace du monde. Vous effectuez cette transformation une fois par image par lumière; à peine un fardeau de performance, même sur le CPU.
Il est donc absolument inutile d'exposer vos shaders à une transformation explicite de l' espace mondial. C'est juste une étape intermédiaire que vous pliez dans vos matrices.