Pourquoi serait-il avantageux d’avoir une masortingce de projection distincte, tout en combinant une masortingce de modèles et de vues?

Lorsque vous apprenez la programmation 3D, on vous apprend qu’il est plus facile de penser à 3 masortingces de transformation:

  1. La masortingce du modèle . Cette masortingce est individuelle pour chaque modèle et elle fait pivoter et met à l’échelle l’object à sa guise et le déplace finalement vers sa position finale dans votre monde 3D. “La masortingce de modèle transforme les coordonnées du modèle en coordonnées du monde”.

  2. La masortingce de vue . Cette masortingce est généralement la même pour un grand nombre d’objects (si ce n’est pour tous), elle fait pivoter et déplace tous les objects en fonction de la “position de la caméra” actuelle. Si vous imaginez que la scène 3D est filmée par une caméra et que les images capturées par celle-ci sont restituées, l’emplacement de la caméra et sa direction définissent les parties de la scène visibles et la apparaît sur l’image capturée. Il y a peu de raisons de modifier la masortingce de vue lors du rendu d’une seule image, mais elles existent (par exemple, en rendant la scène deux fois et en changeant la masortingce de vues, vous pouvez créer un miroir très simple dans votre scène) . Habituellement, la masortingce de vue change seulement une fois entre deux images en cours de dessin. “La masortingce de vue transforme les coordonnées du monde en coordonnées oculaires”.

  3. La masortingce de projection . La masortingce de projection détermine comment ces coordonnées 3D sont mappées sur les coordonnées 2D, par exemple si une perspective leur est appliquée (les objects deviennent plus petits à mesure qu’ils sont éloignés du spectateur) (projection orthogonale). La masortingce de projection ne change presque jamais. Il peut être nécessaire de changer si vous effectuez un rendu dans une fenêtre et si la taille de la fenêtre a changé ou si vous effectuez un rendu en plein écran et que la résolution a changé. Il y a des effets fous pour que vous souhaitiez changer cette masortingce mais dans la plupart des cas, elle est pratiquement constante pendant toute la durée de votre programme. “La masortingce de projection transforme les coordonnées oculaires en coordonnées d’écran”.

Cela fait beaucoup de sens pour moi. Bien sûr, on pourrait toujours combiner les trois masortingces en une seule, car multiplier un vecteur d’abord par la masortingce A puis par la masortingce B revient à multiplier le vecteur par la masortingce C , où C = B * A

Maintenant, si vous regardez l’OpenGL classique (OpenGL 1.x / 2.x), OpenGL connaît une masortingce de projection. Pourtant, OpenGL n’offre pas de modèle ou de masortingce de vue, il ne propose qu’une masortingce combinée de vue de modèle. Pourquoi? Cette conception vous oblige à enregistrer et restaurer de manière permanente la “masortingce de vue” car elle sera “détruite” par les transformations de modèle qui lui sont appliquées. Pourquoi n’y a-t-il pas trois masortingces distinctes?

Si vous regardez les nouvelles versions d’OpenGL (OpenGL 3.x / 4.x) et que vous n’utilisez pas le pipeline de rendu classique mais que vous personnalisez tout avec les shaders (GLSL), il n’y a plus de masortingces disponibles, vous devez définir vos propres masortingces. Pourtant, la plupart des gens gardent le vieux concept d’une masortingce de projection et d’une masortingce de vue de modèle. Pourquoi ferais-tu ça? Pourquoi ne pas utiliser l’une des trois masortingces, ce qui signifie que vous n’avez pas besoin de sauvegarder et de restaurer de façon permanente la masortingce de vue modèle ou d’utiliser une seule masortingce combinée modèle-vue-projection (MVP) pour vous épargner une multiplication masortingcielle dans votre vertex shader pour chaque rendu unique de sumts (après tout, une telle multiplication ne vient pas non plus gratuitement).

Donc, pour résumer ma question: Quel avantage a une masortingce combinée vue-modèle avec une masortingce de projection séparée par rapport à trois masortingces distinctes ou à une masortingce MVP unique?

Regardez-le pratiquement. Tout d’abord, moins vous envoyez de masortingces, moins vous devez multiplier de masortingces avec les positions / normales / etc. Et donc, plus vite vos vertex shaders.

Donc, le point 1: moins de masortingces sont meilleures.

Cependant, il y a certaines choses que vous devez probablement faire. À moins de faire du rendu 2D ou de simples applications de démonstration 3D, vous devrez faire de l’éclairage. Cela signifie généralement que vous allez devoir transformer des positions et des normales en espace de monde ou en caméra (vue), puis effectuer des opérations d’éclairage sur celles-ci (dans le vertex shader ou le fragment shader).

Vous ne pouvez pas faire cela si vous ne passez que de l’espace modèle à l’espace de projection. Vous ne pouvez pas faire d’éclairage dans l’espace post-projection, car cet espace n’est pas linéaire. Le calcul devient beaucoup plus compliqué.

Donc, le point 2: il faut au moins un arrêt entre le modèle et la projection.

Nous avons donc besoin d’au moins 2 masortingces. Pourquoi modéliser à la caméra plutôt que modèle à monde? Parce que travailler dans le monde des shaders est une mauvaise idée. Vous pouvez rencontrer des problèmes de précision numérique liés à des traductions éloignées de l’origine. Alors que si vous travailliez dans l’espace de la caméra, vous ne rencontreriez pas ces problèmes, car rien n’est trop éloigné de la caméra (et si c’est le cas, elle devrait probablement être en dehors du plan de profondeur).

Par conséquent: nous utilisons l’espace de la caméra comme espace intermédiaire pour l’éclairage.

Dans la plupart des cas, votre shader aura besoin de la géomésortinge dans le monde ou des coordonnées oculaires pour l’ombrage. Vous devrez donc séparer la masortingce de projection du modèle et afficher les masortingces.

Faire votre shader multiplier la géomésortinge avec deux masortingces nuit aux performances. En supposant que chaque modèle a des milliers de sumts (ou plus), il est plus efficace de calculer une masortingce de vue de modèle dans l’unité centrale une fois et de laisser le shader faire une multiplication de vecteur moins.