Al renderizar dos superficies coplanares superpuestas, un problema común es la "lucha z", donde el renderizador no puede decidir cuál de las dos superficies está más cerca de la cámara, lo que genera artefactos visuales en el área de superposición.
La solución estándar para esto es dar a las superficies un ligero desplazamiento al diseñar el modelo. hay alguna otra solucion?
Respuestas:
Si las superficies son exactamente alisadoras, tu destino depende de los dioses de la FPU; lo más probable es que tengas Z-fighting. Si los triángulos son idénticos y que hacen la exacta misma matemáticas para cada uno, que va a terminar con las mismas Z-valores para ambos. Pero nuevamente, esto solo sucederá si sus operaciones matemáticas son idénticas para ambos. (Dado que, en general, las operaciones de FPU no son conmutativas)
Una posible solución es no usar el Z-buffer en absoluto. Por el contrario, puede utilizar el algoritmo del pintor . De acuerdo, esto viene con todos los problemas del algoritmo de pintores también. Pero, resolvería la lucha Z.
En su caso de ejemplo de calcomanías de espacio de pantalla (SSD), la solución común es utilizar un desplazamiento, también conocido como un simple cubo delgado. Consulte la presentación de Warhammer 40k sobre SSD para referencia. O la publicación de Bart Wronski que aborda algunos otros problemas con las calcomanías, pero también enlaces a algunas otras presentaciones sobre SSD
fuente
Así es como he resuelto esto en el pasado:
Tenga en cuenta que los objetos deben dibujarse consecutivamente para que esto funcione.
fuente
Dependiendo de su renderizador, podría hacer que las superficies sean más "difusas" aplicando un desplazamiento minúsculo en profundidad de muestreo múltiple utilizando un algoritmo similar al ruido. Esto debería dar como resultado una especie de efecto de fusión para superficies en proximidad de profundidad. Por lo que sé, establecer la profundidad por muestra en el sombreador de fragmentos es bastante reciente en OpenGL y luego solo como una extensión.
OpenGL tiene PolygonOffset pero requiere saber de antemano que está a punto de representar algo coplanar. Si bien no es factible para superficies dentro de un solo modelo, podría funcionar bien, por ejemplo, cuando se renderiza una carretera superpuesta en un terreno.
fuente