版本:Unity 6 (6000.0)
语言英语
  • C#

Screen.SetMSAASamples

建议更改

成功!

感谢您帮助我们改善 Unity 文档的质量。虽然我们无法接受所有提交,但我们确实会阅读用户建议的每项更改,并在适用情况下进行更新。

关闭

提交失败

因为某些原因无法提交您建议的更改。请在几分钟后<a>重试</a>。感谢您花时间帮助我们提高 Unity 文档的质量。

关闭

取消

声明

public static void SetMSAASamples(int numSamples);

说明

切换 Unity 交换链的 MSAA 采样数。

该值指示每个像素的采样数。有效值为 0(使用质量设置值)、1、2、4 和 8。如果图形 API 不支持您提供的值,它将使用下一个受支持的最高值。此函数是一种底层方法,不会影响渲染状态或设置。它设置已分配系统渲染目标的格式。Unity 不会立即更改采样数。具体发生更改的时间取决于平台。在某些平台上,在帧中尽早调用此方法可能会在该帧内产生影响,但在其他平台上可能会推迟到下一帧,因为切换是在帧的末尾进行的。

只有在使用可编程渲染管线时此函数才可用,如果与内置管线一起使用,它将记录一条错误。它使渲染管线内部组件能够从脚本控制系统渲染目标。从脚本设置此项不会对渲染管线启用 MSAA。有关如何为当前使用的渲染管线启用 MSAA 渲染的信息,请参阅渲染管线文档。

如果您编写自己的渲染管线,您很可能会希望作为渲染管线后期处理链的一部分执行自己的解决。在这种情况下,为了获得最佳性能,建议将采样数设置为“1”以禁用系统渲染目标上的 MSAA。如果该值设置为 0(默认值),则行为与内置管线相同,即它使用质量设置中保存的 msaa 采样计数,并且 Unity 可能会分配一个 MSAA 渲染目标,但由于您的渲染管线已作为其后期处理的一部分执行解析,因此不需要该目标。

此示例勾勒出如何将 SetMSAASamples 与渲染管线自身的 MSAA 设置结合使用以确保正确配置系统渲染目标,使其适合自己的用例

using UnityEngine;
using UnityEngine.Rendering;

[CreateAssetMenu(menuName = "MyRenderPipeline/Create New Pipeline Asset")] public class MyRenderPipelineAsset : RenderPipelineAsset { public int msaaSamples = 1; public bool directToScreen = false;

protected override RenderPipeline CreatePipeline() { return new MyRenderPipeline(this); } }

public class MyRenderPipeline : RenderPipeline { MyRenderPipelineAsset asset;

public MyRenderPipeline(MyRenderPipelineAsset asset) { this.asset = asset; if (asset.directToScreen) { Screen.SetMSAASamples(asset.msaaSamples); } else { Screen.SetMSAASamples(1); } }

protected override void Render(ScriptableRenderContext context, Camera[] cameras) { // Render frame, culling shadow maps ...

// Final output to screen if (asset.directToScreen) { // Render geometry directly to system buffer no post processing is possible // the system provies the MSAA resolve as part of the final screen blit or desktop compositor } else { // Post processing resolves MSAA and eventually writes single sample data to the sceen } } }