Screen.SetMSAASamples
Declaration
public static void SetMSAASamples(int numSamples);Параметры
| Параметр | Описание |
|---|---|
| numSamples | Число образцов с выравниванием, запрашиваемых для экранного буфера. |
Описание
Устанавливает указанное количество MSAA образцов для экранного буфера.
Значение задаёт запрашиваемое количество выборок сглаживания на пиксель для экранного буфера. Допустимые значения: 0 (использовать значение из настроек качества), 1, 2, 4 и 8. Это низкоуровневый метод, который не влияет на состояние рендеринга и на настройки.
Если SystemInfo.supportsMultisampledBackBuffer возвращает false, буфер экрана не поддерживает мультисенсирование и Unity игнорирует запрашиваемое значение.
Если графика API не поддерживает указанное значение, то используется следующее наивысшее поддерживаемое значение.
Когда Unity получает запрос, он может не изменить количество образцов сразу. Точное время, когда происходит изменение, зависит от платформы. Вызов этого метода в начале рендеринга кадра может повлиять на этот кадр на некоторых платформах, но может отложить его до следующего кадра на других платформах, где переключение производится в конце кадра.
Этот метод доступен только при использовании Scriptable Render Pipeline (SRP) и будет регистрировать ошибку при использовании с Встроенным Render Pipeline. Этот метод позволяет конвейеру рендеринга иметь ограниченный контроль над системным объектом рендеринга из скрипта. Вызов этого метода из скрипта не включает MSAA в конвейере рендеринга. Пожалуйста, обратитесь к документации конвейера рендеринга для информации о том, как включить MSAA рендеринг для используемого конвейера рендеринга.
Если вы пишете свой собственный конвейер рендеринга, вы можете пожелать реализовать свой собственный анти-плиссировщик в качестве части цепи последующей обработки конвейера рендеринга. В этом случае, для наилучшей производительности, установите число выборок в '1', чтобы отключить MSAA на системном объекте рендеринга. Если значение установлено на 0 (по умолчанию), поведение идентично Встроенному Render Pipeline, который использует количество выборок MSAA, сохраненных в настройках качества, и Unity может выделить объект рендеринга MSAA, который не нужен, так как ваш конвейер рендеринга уже разрешается в рамках его последующей обработки.
См. также: SystemInfo.supportsMultisampledBackBuffer, msaaSamples
Пример демонстрирует, как конвейер рендеринга может использовать эту функцию в сочетании с собственными настройками 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; // Current setup doesn't support MSAA at system render target level if (!SystemInfo.supportsMultisampledBackBuffer) return;
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 && SystemInfo.supportsMultisampledBackBuffer) { // Render geometry directly to system buffer, no post processing is possible // the system provides 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 } } }