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

Ограничить проход рендеринга до области сцены в URP

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

Выполните следующие действия:

  1. Обновите код шейдера, чтобы включить или отключить пользовательский эффект отображения на основе логического значения.

    Например, добавьте в свой шейдер следующий код:

    Pass
    {
        ...
    
        // Add a variable to enable or disable your custom rendering effect
        float _Enabled;
    
        ...
    
        float4 Frag(Varyings input) : SV_Target0
        {
            ...
    
            // Return the color with the effect if the variable is 1, or the original color if the variable is 0
            if (_Enabled == 1){
                return colorWithEffect;
            } else {
                return originalColor;
            }
        }
    }
    
  2. Создайте скрипт, реализующий VolumeComponent класс. Так создаётся компонент переопределения объёма, который можно добавить к объёму.

    using UnityEngine;
    using UnityEngine.Rendering;
    
    public class MyVolumeOverride : VolumeComponent
    {
    }
    
  3. В окне Hierarchy выберите кнопку Добавить (+), а затем выберите GameObject > Том > Box Том.

  4. В окне Inspector для нового бокс-тома в разделе Томвыберите Новый для создания нового профиля тома.

  5. Выбрать Добавить переопределение, затем выберите компонент переопределения объёма, например Переопределение моего тома.

  6. Добавьте свойство в скрипт переопределения объёма. Unity добавляет это свойство в Inspector окно переопределения объёма.

    Например:

    public class MyVolumeOverride : VolumeComponent
    {
        // Add an 'Effect Enabled' checkbox to the Volume Override, with a default value of true.
        public BoolParameter effectEnabled = new BoolParameter(true);
    }
    
  7. В вашем пользовательском пропуске используйте GetComponent API для получения компонента переопределения объёма и проверки значения свойства.

    Например:

    class myCustomPass : ScriptableRenderPass
    {
    
        ...
    
        public void Setup(Material material)
        {
            // Get the volume override component
            MyVolumeOverride myOverride = VolumeManager.instance.stack.GetComponent<MyVolumeOverride>();
    
            // Get the value of the 'Effect Enabled' property
            bool effectStatus = myOverride.effectEnabled.overrideState ? myOverride.effectEnabled.value : false;
        }
    }
    
  8. Передайте значение свойства переменной, которую вы добавили в код шейдера.

    Например:

    class myCustomPass : ScriptableRenderPass
    {
    
        ...
    
        public void Setup(Material material)
        {
            MyVolumeOverride myOverride = VolumeManager.instance.stack.GetComponent<MyVolumeOverride>();
            bool effectStatus = myOverride.effectEnabled.overrideState ? myOverride.effectEnabled.value : false;
    
            // Pass the value to the shader
            material.SetFloat("_Enabled", effectStatus ? 1 : 0);
        }
    }
    

Настраиваемый эффект рендеринга теперь включается, когда камера находится внутри тома, и отключается, когда камера находится за пределами тома.

Дополнительные ресурсы