Mitigación de Z-fighting
Cuando se superponen dos superficies triangulares, no queda claro cuál se debe representar encima de la otra. El resultado varía incluso en cada píxel, lo que resulta en artefactos dependientes de la vista de cámara. Cuando la cámara o la malla se mueven, estos patrones parpadean bastante. Este artefacto se denomina Z-fighting. En el caso de las aplicaciones de realidad aumentada y realidad virtual, el problema se intensifica porque los cascos de realidad virtual siempre se mueven de forma natural. Para evitar molestias al usuario, Azure Remote Rendering ofrece funcionalidad de mitigación de Z-fighting.
Nota:
La configuración de mitigación de Z-fighting no afecta a la representación de la nube de puntos.
Modos de mitigación de Z-fighting
Situación | Resultado |
---|---|
Z-fighting normal | |
Mitigación de Z-fighting habilitada | |
Resaltado de tablero de damas habilitado |
El código siguiente habilita la mitigación de Z-fighting:
void EnableZFightingMitigation(RenderingSession session, bool highlight)
{
ZFightingMitigationSettings settings = session.Connection.ZFightingMitigationSettings;
// enabling z-fighting mitigation
settings.Enabled = true;
// enabling checkerboard highlighting of z-fighting potential
settings.Highlighting = highlight;
}
void EnableZFightingMitigation(ApiHandle<RenderingSession> session, bool highlight)
{
ApiHandle<ZFightingMitigationSettings> settings = session->Connection()->GetZFightingMitigationSettings();
// enabling z-fighting mitigation
settings->SetEnabled(true);
// enabling checkerboard highlighting of z-fighting potential
settings->SetHighlighting(highlight);
}
Nota:
la mitigación de Z-fighting es una configuración global que afecta a todas las mallas representadas.
Motivos para Z-fighting
Z-fighting se produce principalmente por dos motivos:
- Cuando las superficies están lejos de la cámara, la precisión de sus valores de profundidad se degrada y los valores se vuelven indistinguibles.
- Cuando las superficies de una malla se superponen físicamente.
El primer problema siempre puede producirse y es difícil de eliminar. Si esta situación se produce en la aplicación, asegúrese de que la relación entre la distancia del plano cercano y la del plano lejano sea la menor posible. Por ejemplo, un plano cercano a una distancia de 0,01 y un plano lejano a una distancia de 1000 creará este problema mucho antes que si el plano cercano está a 0,1 y el plano lejano a una distancia de 20.
El segundo problema es un indicador de que el contenido ha sido mal creado. En el mundo real, dos objetos no pueden estar en el mismo lugar al mismo tiempo. Según la aplicación, es posible que los usuarios deseen saber si existen superficies superpuestas y dónde se encuentran. Por ejemplo, una escena de CAD de un edificio que es la base para una construcción del mundo real no debe contener intersecciones de superficie físicamente imposibles. Para permitir la inspección visual, el modo de resaltado está disponible, que muestra un posible efecto de Z-fighting como un patrón de tablero de damas animado.
Limitaciones
La mitigación de Z-fighting proporcionada es un intento de mejora. No hay ninguna garantía de que quite todo el Z-fighting. Además, la mitigación prefiere una superficie sobre otra. Si tiene superficies que están demasiado cerca entre sí, puede suceder que la superficie "equivocada" termine encima. Un problema común se produce cuando el texto y otras marcas se aplican a una superficie. Si se habilita la mitigación de Z-fighting, estos detalles podrían desaparecer.
Consideraciones de rendimiento
- La habilitación de la mitigación de Z-fighting no ocasiona apenas sobrecarga del rendimiento.
- Además, la habilitación de la superposición de Z-fighting conlleva una sobrecarga de rendimiento considerable, aunque puede variar en función de la escena.
Documentación de la API
- Propiedad RenderingConnection.ZFightingMitigationSettings de C#
- RenderingConnection::ZFightingMitigationSettings() de C++