Unity 6.3
0 онлайн 85 гостей 3 в системе
Вход

Вывод текстуры движения векторов в пользовательском шейдере в URP

Для того, чтобы URP отображал проход MotionVectors для шейдера ShaderLab, убедитесь, что его активный SubShader содержит проход со следующим тегом LightMode:

Tags { "LightMode" = "MotionVectors" }

Например:

Shader “Example/MyCustomShaderWithPerObjectMotionVectors"
{
    SubShader
    {
        // ...other passes, SubShader tags and commands
    
        Pass
        {
            Tags { "LightMode" = "MotionVectors" }
            ColorMask RG
            
            HLSLPROGRAM
            
            // Your shader code goes here.
            
            ENDHLSL
        }
    }
}

Для примера добавления поддержки движения векторных проходов для таких функций, как альфа-клипинг, LOD cross-fade или анимация alembic, см. реализацию прохода MotionVectors в URP предварительно созданных ShaderLab шейдерах, например, файле Unlit.shader. Рендирование вашего прохода MotionVectors должно соответствовать вашим проходам без движения вектора и должно отражать любую настраиваемую деформацию и/или вершинную анимацию, выполняемую проходом.

Если пользовательский шейдер предназначен только для объектов с трансформационным движением или анимацией с оболочкой, без использования альфа-клиппинга, LOD переходного затухания, анимации в амбарной камере, пользовательской деформации или вершинной анимации, резервного шейдера вектора движения, предоставляемого URP, может быть достаточно. Чтобы добавить предустановленный резервный шейдер, добавьте следующую команду ShaderLab в блоки SubShader:

Shader “Example/MyCustomShaderWithPerObjectMotionVectorFallback"
{
    SubShader
    {
        // ...other passes, SubShader tags, and commands
    
        UsePass "Hidden/Universal Render Pipeline/ObjectMotionVectorFallback/MOTIONVECTORS"
    }
}

Примечание: В версиях Unity, предшествующих 2023.2, URP автоматически использовал резервный проход для всех блоков SubShader, которые не имеют прохода, помеченного тегами MotionVectors LightMode. Начиная с Unity 2023.2, эта логика резервного прохода отключена по следующим причинам:

  • Резервная логика была только первоначальной деталью реализации, предназначенной для собственных Материалов URP.
  • URP Материалы теперь используют векторные проходы движения, специфические для типа материала, для поддержки таких функций, как альфа-клипы, LOD переходные эффекты или анимация алюминиевой лампы, что делает резервный вариант устаревшим.
  • Резервная логика вызывает непреднамеренные визуальные артефакты для контента, к которому она не применима (например, наклейки, которые не должны рисовать никаких векторов движения объекта).