Détails de ce que le GPU fait réellement lors de l'écrêtage dans un espace homogène 4D?

10

J'apprends le pipeline de rendu programmable en implémentant un minuscule logiciel de rendu. J'essaie de l'implémenter dans un style «matériel». Cependant, je ne connais pas le pipeline GPU et j'ai eu quelques problèmes d'écrêtage homogène.

L'espace de découpage homogène contient une variable w qui varie à chaque sommet. La coordonnée homogène de chaque objet sommet (entre la matrice de projection et la division homogène par w) est-elle dans son propre espace de découpage? Si oui, comment couper les lignes et les triangles plus près que le Frustum ou même étirer derrière la caméra (c'est-à-dire w <= frustum_znear)?

Mise à jour : ce fil dit que l'écrêtage dans l'espace homogène est directement un problème d'intersection dans l'espace homogène 4D. Ce qui signifie que le point d'intersection est p_vec4 = t * point1_vec4 + (1 - t) * point2_vec4. Disons que j'ai P0(-70, -70, 118, 120)et P1(-32, -99, -13, -11)dans un espace homogène 4D, et que le point d'intersection avec plane w = -z(qui dans NDC est z = -1) est (-35, -96, -1, 0.9) t = 0.99, comment obtenir l'objet sommet correspondant dans l'espace NDC?

Et une fois que j'ai obtenu le bon point d'intersection, dois-je faire l'interpolation entre les objets vertex produits par vertex shader pour obtenir un nouvel objet vertex?

stanleyerror
la source
Cela me semble trop de questions pour un seul poste et devrait probablement être divisé. La règle générale est une seule question (ou au moins une question clé) par message.
Pikalek
@Pikalek Je supprime les deux autres questions et essaie de rendre ce fil raisonnable. Merci pour vos conseils.
stanleyerror

Réponses:

1

L'écrêtage se fait dans l'espace 3D avant la division «w», pas dans l'espace 4D.

Le GPU ne trouve que les plans proche et lointain, ou les 6 plans 3D du tronc de vue et attache la Geo à cela.

Si la division w était effectuée avant que le signe des coordonnées ne se retourne pour les sommets derrière l'œil / la caméra.

Si seuls des plans proches-éloignés sont utilisés pour découper en 3D avant la division w, ils peuvent uniquement compter sur l'écrêtage 2D au stade de la pixellisation pour les plans x & y.


W est juste un diviseur de projection directement lié à Z, pas en fait une 4ème dimension. La matrice 4x4 est un "hack" pour inclure une division de traduction et de projection dans un format pratique. Cela ne fonctionne que parce que les positions sont supposées être (x, y, z, 1) et les normales sont supposées être (x, y, z, 0).

Mais ce n'est pas en fait 4 dimensions indépendantes.

Toute autre valeur pour "W" qui n'est pas 1 ou 0 n'a pas de sens pour la géométrie, c'est un interrupteur marche / arrêt pratique pour désactiver la traduction.

Stéphane Hockenhull
la source
0

Si vous posez des questions sur la conversion de coordonnées d'espace de clip homogènes en coordonnées de coordonnées de périphérique normalisées (NDC), le processus est le suivant: <x y z w> → <x/w y/w z/w>

Ce GDSE Q / A sur Pourquoi l'espace de clip est-il toujours appelé «espace de clip homogène»? peut également vous être utile.

Pikalek
la source
1
Merci pour votre réponse. Cependant, mon problème concerne l'interpolation. Disons que deux points e1, e2 sous les coordonnées de l'œil 3D sont projetés dans l'espace de découpage homogène 4D h1, h2. Ensuite, nous faisons une interpolation dans un espace homogène 4D, le segment h1-h2 est écrêté au point 4D h (t) = t * h1 + (1-t) * h2. Sans perte de généralité, supposons que nous ayons une partie h1-h (t) (qui est visible) alimentant l'étape de tramage. Nous devons donc générer les propriétés de vertex correspondantes (identiques au format de sortie du vertex shader). Ma question est de savoir comment générer les propriétés de ces nouveaux sommets?
stanleyerror
Ma compréhension est que l'interpolation n'est pas effectuée dans HCS, mais je peux me tromper. Si vous n'obtenez pas de réponses plus / meilleures ici, vous pouvez essayer de rechercher / migrer vers SO.
Pikalek
D'accord. Puis-je migrer directement ce fil vers SO, ou je dois rouvrir une nouvelle question là-bas.
stanleyerror
Mon erreur de vous suggérer de demander à nouveau; la publication croisée est généralement déconseillée .
Pikalek
Je pense que les administrateurs peuvent migrer.
Sidar