Вывод текстуры движения векторов в пользовательском шейдере в 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 переходные эффекты или анимация алюминиевой лампы, что делает резервный вариант устаревшим.
- Резервная логика вызывает непреднамеренные визуальные артефакты для контента, к которому она не применима (например, наклейки, которые не должны рисовать никаких векторов движения объекта).