你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

渲染模式

远程渲染提供两种主要操作模式:TileBasedComposition 模式和 DepthBasedComposition 模式。 这些模式决定了如何在服务器上的多个 GPU 之间分布工作负荷。 模式必须在连接时指定,在运行时无法更改。

这两种模式不仅有优点,也存在固有的功能限制,因此,如何选取最适合的模式取决于具体用例。

模式

现在我们更详细地介绍这两种模式。

“TileBasedComposition”模式

在 TileBasedComposition 模式下,每个涉及的 GPU 都会在屏幕上渲染特定的子矩形(图块)。 主 GPU 根据图块组合出最终图像,然后将最终图像作为视频帧发送到客户端。 相应地,所有 GPU 都需要使用同一组资源进行渲染,因此,已加载的资产需要能够容纳到一个 GPU 的内存中。

这种模式下的渲染质量会略好于 DepthBasedComposition 模式,因为 MSAA 可以为每个 GPU 处理整组几何图形。 下面的屏幕截图显示了抗锯齿对于两种边缘都可以同样正确地工作:

MSAA in TileBasedComposition

此外,在这种模式下,每个部分都可以切换到透明材料,或通过 HierarchicalStateOverrideComponent 切换到透明模式

“DepthBasedComposition”模式

在 DepthBasedComposition 模式下,每个涉及的 GPU 都以全屏分辨率进行渲染,但只是渲染一部分网格。 主 GPU 上的最终图像构成会进行相应的处理,确保各部分根据其深度信息正确合并。 通常,内存有效负载是分布在 GPU 中的,因此允许渲染模型不容纳在一个 GPU 的内存中。

每个单一的 GPU 都会使用 MSAA 对本地内容进行抗锯齿处理。 但是,在不同的的 GPU 中的边缘之间,可能会存在固有的锯齿现象。 通过对最终图像进行后处理,这种影响会得到削弱,但 MSAA 质量仍比在 TileBasedComposition 模式下要差

下图演示了 MSAA 项目: MSAA in DepthBasedComposition

抗锯齿在雕像和窗帘之间的效果是正常的,因为这两个部分都在同一 GPU 上渲染。 另一方面,窗帘和墙壁之间的边缘会出现一些锯齿,因为这两个部分是由不同的 GPU 完成构图的。

此模式的最大限制是,几何图形部分无法动态切换为透明材料,透明模式也对 HierarchicalStateOverrideComponent 不起作用。 不过,其他状态替代功能(轮廓、颜色色调等)确实有效。 另外,在此模式下,在转换时标记为透明的材料确实可以正常工作。

“性能”

这两种模式的性能特征都会因用例而异,很难分析出或提供一般性的建议。 如果上述限制(内存或透明度/透明)对你没有约束,建议对两种模式都进行试验,并使用不同的摄像机位来监视性能。

设置渲染模式

远程渲染服务器上使用的渲染模式是在 RenderingSession.ConnectAsync 期间通过 RendererInitOptions 指定的。

async void ExampleConnect(RenderingSession session)
{
    RendererInitOptions parameters = new RendererInitOptions();

    // Connect with one rendering mode
    parameters.RenderMode = ServiceRenderMode.TileBasedComposition;
    await session.ConnectAsync(parameters);

    session.Disconnect();

    // Wait until session.IsConnected == false

    // Reconnect with a different rendering mode
    parameters.RenderMode = ServiceRenderMode.DepthBasedComposition;
    await session.ConnectAsync(parameters);
}

API 文档

后续步骤