Z-fighting 완화

두 삼각형 표면이 겹치면 어느 표면을 다른 표면 위에 렌더링해야 하는지 명확하지 않습니다. 결과는 픽셀마다 다르므로 카메라 뷰 종속 아티팩트가 생성됩니다. 카메라나 메시가 움직이면 이러한 패턴이 눈에 띄게 깜박입니다. 이 아티팩트를 z-fighting이라고 합니다. 증강 현실 및 가상 현실 애플리케이션의 경우 머리에 탑재된 디바이스가 자연스럽게 항상 움직이기 때문에 문제가 심화됩니다. 시청자의 불편을 방지하기 위해 Azure Remote Rendering은 z-fighting 완화 기능을 제공합니다.

참고 항목

z-fighting 완화 설정은 지점 클라우드 렌더링에 영향을 주지 않습니다.

z-fighting 완화 모드

상황 결과
일반 z-fighting Screenshot shows no deterministic precedence between red and green quads.
z-fighting 완화 사용 Screenshot displays the red quad precedence with a solid red rectangle.
바둑판 무늬 강조 표시 사용 Screenshot shows red and green quad toggle preference with a checkerboard pattern rectangle.

다음 코드는 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);
}

참고 항목

z-fighting 완화는 렌더링된 모든 메시에 영향을 주는 전역 설정입니다.

z-fighting 발생 이유

z-fighting은 주로 다음과 같은 두 가지 이유로 발생합니다.

  • 표면이 카메라에서 멀리 떨어진 경우 깊이 값의 정밀도가 떨어지고 값을 구분할 수 없음
  • 메시의 표면이 물리적으로 겹치는 경우

첫 번째 문제는 항상 발생할 수 있으며 해결하기 어렵습니다. 애플리케이션에 이 상황이 발생하는 경우에는 가까운 평면 거리와 먼 평면 거리의 비율이 실제만큼 낮아야 합니다. 예를 들어 거리가 0.01인 가까운 평면과 거리가 1000인 먼 평면에는 가까운 평면이 0.1에 있고 먼 평면이 20에 있는 것보다 훨씬 일찍 이 문제가 발생합니다.

두 번째 문제는 잘못 작성된 콘텐츠에 대한 표시입니다. 실제 환경에서는 2개의 개체가 동시에 같은 위치에 있을 수 없습니다. 응용 프로그램에 따라 사용자는 겹치는 표면이 있는지 여부와 해당 위치를 알고자 할 수 있습니다. 예를 들어 실제 건축의 기초가 되는 건물의 CAD 장면에는 물리적으로 불가능한 표면 교차가 포함되지 않아야 합니다. 시각적 검사를 허용하기 위해 강조 표시 모드를 사용할 수 있습니다. 이 모드는 잠재적 z-fighting을 애니메이션 바둑판 표시 패턴으로 표시합니다.

제한 사항

제공된 z-fighting 완화는 최적의 방법입니다. 모든 z-fighting이 제거된다는 보장은 없습니다. 또한 완화는 한 표면을 다른 표면보다 선호합니다. 서로 너무 가까운 여러 표면이 있는 경우 "잘못된" 표면이 맨 위에 있게 됩니다. 일반적인 문제는 텍스트 및 기타 효과가 표면에 적용되는 경우입니다. z-fighting 완화를 사용하도록 설정하면 이러한 세부 정보가 쉽게 사라질 수 있습니다.

성능 고려 사항

  • z-fighting을 사용하면 성능 오버헤드가 거의 발생하지 않습니다.
  • 추가로 z-fighting 오버레이를 사용하면 사소한 성능 오버헤드가 발생하지만 장면에 따라 달라질 수 있습니다.

API 설명서

다음 단계