Unity 6.3
0 онлайн 95 гостей 3 в системе
Вход
Конвейеры отображения Шаг 8 из 129

Изменение или обнаружение активного конвейера отображения

На этой странице содержатся сведения о получении, установке и настройке конвейера отображения, используемого в настоящее время Unity. Конвейер отображения, используемый в настоящее время Unity, называется активным конвейером отображения.

Обзор

Для отображения контента Unity может использовать либо Built-in Render Pipeline, либо конвейер отображения, основанный на Scriptable Render Pipeline (SRP), который включает Universal Render Pipeline (URP) и High Definition Render Pipeline (HDRP).

Чтобы указать, какой Scriptable Render Pipeline использует Unity, используйте ассеты конвейера отображения. Ассет конвейера отображения сообщает Unity, какой SRP использовать и как его настроить. Если ассет конвейера отображения не указан, Unity использует Built-in Render Pipeline.

Можно создать несколько ассетов конвейера рендеринга, использующих один и тот же конвейер, но имеющих разные конфигурации. Например, для разных уровней качества оборудования можно использовать разные ассеты конвейера рендеринга. Общие сведения об этих ассетах см. в разделе «Введение в Scriptable Render Pipeline». Сведения об ассете URP см. в разделе «Ассет Universal Render Pipeline», а об ассете HDRP — в разделе «Ассет High Definition Render Pipeline».

Как только вы измените активный ассет конвейера отображения в Unity Editor или во время выполнения, Unity использует новый активный конвейер отображения для отображения контента. Если вы находитесь в Unity Editor, это включает представление Game, представление Scene и предварительные просмотры материалов в панели Project и панели Inspector.

При изменении активного конвейера отображения необходимо убедиться, что ресурсы и код в проекте совместимы с новым конвейером отображения; в противном случае могут возникнуть ошибки или непредвиденные визуальные эффекты.

Определение активного конвейера отображения

Настройки в обоих Настройки графики и Настройки качества определить активный конвейер отображения.

Для каждого уровня качества в окне настроек Качество, Unity использует ассет конвейера отображения, назначенный Render Pipeline Активу. Если свойство не назначено, Unity использует ассет конвейера отображения, назначенный По умолчанию Render Pipeline Активу в окне настроек Графика.

Если и Render Pipeline Ассет и Default Render Pipeline не установлены, Unity использует Встроенный Render Pipeline.

Как установить активный конвейер рендеринга в Редакторе UI

Активация Built-in Render Pipeline

Чтобы установить активный конвейер рендеринга на Встроенный Render Pipeline, удалите все ассеты конвейера рендеринга из графических настроек и настроек качества.

Для этого:

  1. Выберите Изменить > Project Настройки > Качество.
  2. Для каждого уровня качества, если ресурс конвейера отображения назначен ресурсу Render Pipeline, отмените его назначение.
  3. Выберите Изменить > Project Настройки > Графика.
  4. Если ассет конвейера отображения назначен По умолчанию Render Pipeline, отмените его назначение.

Активация URP, HDRP или пользовательского конвейера рендеринга, основанного на SRP

Чтобы установить активный конвейер отображения, основанный на SRP, укажите Unity, какой ассет конвейера отображения использовать в качестве активного конвейера отображения по умолчанию и, по желанию, какие ассеты конвейера отображения использовать для каждого уровня качества.

Для этого:

  1. В папке Project найдите конвейер отображения asset(s), который вы хотите использовать.
  2. Задайте конвейер рендеринга по умолчанию, который Unity использует, когда для уровня качества нет переопределения. Если его не задать, Unity в этом случае использует встроенный конвейер рендеринга.
    1. Выберите Изменить > Project Настройки > Графика.
    2. Установите Default Render Pipeline для ассета конвейера отображения, который вы хотите использовать.
  3. Факультативно: задайте переопределяющие ассеты конвейера рендеринга для разных уровней качества.
    1. Выберите Изменить > Project Настройки > Качество.
    2. Установите Render Pipeline Ассет на ассет конвейера отображения, который вы хотите использовать.

Как получить и установить активный конвейер рендеринга в скриптах C#

В скриптах C# вы можете получить и установить активный конвейер рендеринга и получить обратный вызов при изменении активного конвейера рендеринга. Вы можете сделать это в режиме редактирования или режиме воспроизведения в Unity Editor, или во время выполнения в вашем приложении.

Для этого используйте следующий APIs:

Следующий пример кода показывает, как использовать эти APIs:

using UnityEngine;
using UnityEngine.Rendering;
 
public class ActiveRenderPipelineExample : MonoBehaviour
{
    // In the Inspector, assign a render pipeline asset to each of these fields
    public RenderPipelineAsset defaultRenderPipelineAsset;
    public RenderPipelineAsset overrideRenderPipelineAsset;
 
    void Start()
    {
        GraphicsSettings.defaultRenderPipeline = defaultRenderPipelineAsset;
        QualitySettings.renderPipeline = overrideRenderPipelineAsset;

        DisplayCurrentRenderPipeline();
    }

    void Update()
    {
        // When the user presses the left shift key, switch the default render pipeline
        if (Input.GetKeyDown(KeyCode.LeftShift)) {
            SwitchDefaultRenderPipeline();
            DisplayCurrentRenderPipeline();
        }
        // When the user presses the right shift key, switch the override render pipeline
        else if (Input.GetKeyDown(KeyCode.RightShift)) {
            SwitchOverrideRenderPipeline();
            DisplayCurrentRenderPipeline();
        }
    }

    // Switch the default render pipeline between null,
    // and the render pipeline defined in defaultRenderPipelineAsset
    void SwitchDefaultRenderPipeline()
    {
        if (GraphicsSettings.defaultRenderPipeline == defaultRenderPipelineAsset)
        {
            GraphicsSettings.defaultRenderPipeline = null;
        }
        else
        {
            GraphicsSettings.defaultRenderPipeline = defaultRenderPipelineAsset;
        }
    }

    // Switch the override render pipeline between null,
    // and the render pipeline defined in overrideRenderPipelineAsset
    void SwitchOverrideRenderPipeline()
    {
        if (QualitySettings.renderPipeline == overrideRenderPipelineAsset)
        {
            QualitySettings.renderPipeline = null;
        }
        else
        {
           QualitySettings.renderPipeline = overrideRenderPipelineAsset;
        }
    }

    // Print the current render pipeline information to the console
    void DisplayCurrentRenderPipeline()
    {
        // GraphicsSettings.defaultRenderPipeline determines the default render pipeline
        // If it is null, the default is the Built-in Render Pipeline
        if (GraphicsSettings.defaultRenderPipeline != null)
        {
            Debug.Log("The default render pipeline is defined by " + GraphicsSettings.defaultRenderPipeline.name);
        }
        else
        {
            Debug.Log("The default render pipeline is the Built-in Render Pipeline");
        }

        // QualitySettings.renderPipeline determines the override render pipeline for the current quality level
        // If it is null, no override exists for the current quality level
        if (QualitySettings.renderPipeline != null)
        {
            Debug.Log("The override render pipeline for the current quality level is defined by " + QualitySettings.renderPipeline.name);
        }
        else
        {
            Debug.Log("No override render pipeline exists for the current quality level");
        }

        // If an override render pipeline is defined, Unity uses that
        // Otherwise, it falls back to the default value
        if (QualitySettings.renderPipeline != null)
        {
            Debug.Log("The active render pipeline is the override render pipeline");
        }
        else
        {
            Debug.Log("The active render pipeline is the default render pipeline");
        }

        // To get a reference to the render pipeline asset that defines the active render pipeline,
        // without knowing if it is the default or an override, use GraphicsSettings.currentRenderPipeline
        if (GraphicsSettings.currentRenderPipeline != null)
        {
            Debug.Log("The active render pipeline is defined by " +GraphicsSettings.currentRenderPipeline.name);
        }
        else
        {
            Debug.Log("The active render pipeline is the Built-in Render Pipeline");
        }
    }
}