Share via


Z-fighting 緩和措施

兩個三角形表面重疊時,會不清楚應該將哪一個成品轉譯在頂端。 每個像素的結果甚至都會不同,導致產生依賴相機視角的成品。 相機或網格移動時,這些圖樣會明顯地閃爍。 這樣的成品稱為「Z-fighting」。 擴增實境和虛擬實境應用程式會加重這種問題,因為頭戴式裝置原本就會持續移動。 為了防止檢視人員身體不適,Azure 遠端轉譯提供 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.1、遠離平面距離為 20,接近平面距離為 0.01、遠離平面距離為 1000 時,此問題會更快發生。

第二個問題則指出內容製作不良。 在真實世界中,兩個物件不能同時位於相同位置。 視應用程式而定,使用者可能會想知道是否有重疊表面存在,以及重疊表面的所在位置。 例如,建築物的 CAD 場景以真實世界的建物為基礎,所以不應含有實際不可能ˊ在的表面交集。 若要允許進行視覺效果檢查,有醒目提示模式可供使用,此模式會以動畫棋盤圖樣顯示可能的 Z-fighting。

限制

所提供的 Z-fighting 緩和措施是盡量達到目標的做法, 不保證能解決所有 Z-fighting 的情況。 此外,緩和偏好某個表面,而非另一個表面。 當您的表面彼此過於接近時,「錯誤」表面最後會在頂端。 常見的問題案例之一,是發生在文字和其他裝置材質套用到表面時。 啟用 Z-fighting 緩和之後,這些詳細資料可能很容易消失不見。

效能考量

  • 啟用 Z-fighting 幾乎不會產生任何額外的效能負擔。
  • 額外啟用 Z-fighting 重疊確實會對效能產生不小的額外負擔,不過會因場景而異。

API 文件

下一步