Author Topic: [résolu] Souci de zBuffer, enfin je crois (zNear en fait)  (Read 3745 times)

0 Members and 1 Guest are viewing this topic.

Offline moudubou

  • Base
    • View Profile
    • quelques photos d'explo
  • Ancienneté: 1990
  • Groupe: FLC
  • Rôle: code,orga
  • Ville: Lyon
Hello

J'essaie de balancer plein de polygones à ma carte pour afficher un landscape mais j'ai du mal à saisir pourquoi mes polygones clippent si rapidement?

Ça donne ce genre de chose à l'écran.

Que j'utilise des objets très petits ou bien très grands comme là, j'ai un clipping 3D qui arrive bien tôt et ça m'énerve, est-ce une erreur de débutant? (oui, sûrement)

« Last Edit: 18 June 2013 à 10:41:25 by moudubou »

Offline phaazon

Re : Souci de zBuffer, enfin je crois
« Reply #1 on: 15 June 2013 à 14:46:14 »
Tu as quoi comme valeur de znear ?

Offline flure

  • Base
    • Pouet.net
    • View Profile
  • Ancienneté: 1998
  • Groupe: PoPsY TeAm
  • Rôle: Codeur Linux
  • Ville: Lyon
Re : Souci de zBuffer, enfin je crois
« Reply #2 on: 15 June 2013 à 15:26:13 »
Moi aussi j'ai pensé au rapport zfar/znear, mais c'est bizarre on dirait que le landscape est coupé par un plan en travers... S'il devait être coupé par znear ce serait en fase de la camera...

Enfin bref je sais pas, peut-être un problème de précision du zbuffer, dûe au rapport zfar/znear en effet...

moudubou on y verrait plus clair si tu postais le code en question :)

Offline phaazon

Re : Souci de zBuffer, enfin je crois
« Reply #3 on: 15 June 2013 à 15:31:44 »
Aussi, as-tu essayer de tourner autour de ton objet ? Voir si ça clip toujours au même endroit, ou pas.

Offline moudubou

  • Base
    • View Profile
    • quelques photos d'explo
  • Ancienneté: 1990
  • Groupe: FLC
  • Rôle: code,orga
  • Ville: Lyon
Re : Re : Souci de zBuffer, enfin je crois
« Reply #4 on: 15 June 2013 à 17:04:30 »
Aussi, as-tu essayer de tourner autour de ton objet ? Voir si ça clip toujours au même endroit, ou pas.

Ça change quand je bouge autour de l'objet.

Et sinon, le znear, zfar, c'est le calcul de la matrice projection? Y a que là que j'ai un "far" et un "near" quand je calcule le frustum mais j'vois pas bien le rapport avec le zbuffer

Si c'est ça, j'ai mis 0.1 et 100.0 mais ça devrait clipper au fond, pas devant avec de telles valeurs  :o

Sinon j'ai ça de notable

        glEnable(GL_DEPTH_TEST);
        glDepthFunc(GL_LESS);
        glEnable(GL_CULL_FACE);

Mais rien qui initialise un zbuffer, j'avais l'impression que c'était automatique  ;D



J'suis vraiment un noob en openGL

Offline flure

  • Base
    • Pouet.net
    • View Profile
  • Ancienneté: 1998
  • Groupe: PoPsY TeAm
  • Rôle: Codeur Linux
  • Ville: Lyon
Re : Souci de zBuffer, enfin je crois
« Reply #5 on: 15 June 2013 à 21:49:41 »
En fait la précision du zbuffer est en fonction du rapport znear/zfar... (ou l'inverse je ne sais plus). Bref, plus l'écart entre ton znear et ton zfar est élevé, plus la précision est faible. Evite de mettre znear à 0 déjà, 0.5 c'est pas mal...

Sinon essaye GL_LEQUAL à la place de GL_LESS aussi...

Concernant la précision du zbuffer par rapport à znear et zfar :
Quote
Depth buffer precision is affected by the values specified for zNear and zFar. The greater the ratio of zFar to zNear is, the less effective the depth buffer will be at distinguishing between surfaces that are near each other. If

r = zFar / zNear

roughly log2 r bits of depth-buffer precision are lost. Because r approaches infinity as zNear approaches 0, zNear must never be set to 0.

source : http://www.talisman.org/opengl-1.1/Reference/glFrustum.html

Offline moudubou

  • Base
    • View Profile
    • quelques photos d'explo
  • Ancienneté: 1990
  • Groupe: FLC
  • Rôle: code,orga
  • Ville: Lyon
Re : Re : Souci de zBuffer, enfin je crois
« Reply #6 on: 17 June 2013 à 22:53:31 »
En fait la précision du zbuffer est en fonction du rapport znear/zfar... (ou l'inverse je ne sais plus). Bref, plus l'écart entre ton znear et ton zfar est élevé, plus la précision est faible. Evite de mettre znear à 0 déjà, 0.5 c'est pas mal...

Sinon essaye GL_LEQUAL à la place de GL_LESS aussi...

Concernant la précision du zbuffer par rapport à znear et zfar :
source : http://www.talisman.org/opengl-1.1/Reference/glFrustum.html

C'était bien une histoire de zNear / zFar, merci!

Par contre, j'ai résolu mon problème en diminuant le zNear (logique non?) puisque ça clippait trop vite.

Du coup, j'ai diminué le zFar

Le GL_LESS ou LEQUAL ne semble pas avoir d'effet sur le rendu (pour le moment)

Offline moudubou

  • Base
    • View Profile
    • quelques photos d'explo
  • Ancienneté: 1990
  • Groupe: FLC
  • Rôle: code,orga
  • Ville: Lyon
Re : Re : Re : Souci de zBuffer, enfin je crois
« Reply #7 on: 18 June 2013 à 10:48:02 »
Par contre, j'ai résolu mon problème en diminuant le zNear (logique non?) puisque ça clippait trop vite.
Du coup, j'ai diminué le zFar

Suite à mon souci de zNear/zFar, je me demandais ce que vous utilisiez comme valeurs, mais aussi, que est l'intervalle de données que vous traitez? (j'ouvre un nouveau sujet?)

Par exemple, en ce moment, j'essaie de faire un landscape dont les valeurs géométriques sont plutôt grandes vu que mes triangles isocèles font 16m de côté (ou 16 unités). À l'écran, je génère des polygones jusqu'à 8km du centre (rapport au lod).

Du coup, j'ai un peu de mal à comprendre pourquoi avec un zNear à 0.5 c'était toujours trop grand et que ça clippait comme valeur.

Offline phaazon

Re : [résolu] Souci de zBuffer, enfin je crois (zNear en fait)
« Reply #8 on: 18 June 2013 à 16:34:38 »
Généralement je mets un znear à 0.1, mais là encore ça dépend. Exemple très simple : dans ma première intro, j’ai réussi à énormément optimiser le screen de lave avec un znear adaptatif. Je ne pourrais pas dire exactement, mais dans l’intro il est très souvent à 2 ou 3, voire parfois plus. Il n’y a pas de règles, tout dépend de ce que tu veux faire. Si tu es susceptible de passer près d’un objet, alors un znear faible est préférable en effet. C’est à toi de déterminer comment tu comptes bouger dans ta scène !

Pour la scène de la lave, pour te donner une référence, le zfar est à 300. En fait, tout dépend de la dimension de ta scène. Note qu’une unité (1u) ne veut rien dire. Tu peux avoir la même scène avec des unités plus petites (en appliquant un scale). Et là ça change tes valeurs near / far.

EDIT: juste au cas où; tu le sais peut-être déjà, mais le znear correspond à la distance minimale à laquelle les objets ne clippent pas, et le zfar la distance maximale. Dessine un frustum, tu pigeras mieux :)
« Last Edit: 18 June 2013 à 16:38:06 by skypers »

Offline flure

  • Base
    • Pouet.net
    • View Profile
  • Ancienneté: 1998
  • Groupe: PoPsY TeAm
  • Rôle: Codeur Linux
  • Ville: Lyon
Re : [résolu] Souci de zBuffer, enfin je crois (zNear en fait)
« Reply #9 on: 18 June 2013 à 17:26:31 »
Pareil que skypers, je met le znear et zfar en fonction de la scène. La plupart du temps j'utilise 0.1 et 100.0 mais parfois pas besoin d'aller plus loin que 10.0 et effectivement si tu ne colles pas tes objets à la caméra, un znear supérieur à 1.0 est tout à fait acceptable.

Pas con skypers d'adapter le znear dynamiquement pendant l'effet :)

Offline moudubou

  • Base
    • View Profile
    • quelques photos d'explo
  • Ancienneté: 1990
  • Groupe: FLC
  • Rôle: code,orga
  • Ville: Lyon
Re : [résolu] Souci de zBuffer, enfin je crois (zNear en fait)
« Reply #10 on: 18 June 2013 à 20:56:54 »
Merci pour ces explications. Dans mon cas, j'ai besoin de m'approcher assez du sol du landscape donc j'essaierai, pourquoi pas, de faire de l'adaptatif en fonction de mon altitude rapport au sol  ;)

Offline phaazon

Re : [résolu] Souci de zBuffer, enfin je crois (zNear en fait)
« Reply #11 on: 18 June 2013 à 23:39:44 »
C’est ce que je fais oui, et ça fait gagner un nombre impressionnant d’FPS en raymarching (je suis passé de 10 FPS à près de 80 FPS :) ).