Эта страница содержит информацию об использовании блока Name
в вашей ShaderLab Язык Unity для определения структуры объектов Shader. Подробнее
См. в коде Словарь присвоение имени проходу . Для получения информации об определении проходов см. ShaderLab: определение прохода. Для получения информации о том, как Shaderпрограмма работает на GPU. Подробнее
См. в Словарь работы объектов и отношения между объектами шейдеров, субшейдерами и проходами. , см. основные сведения об объекте шейдера.
Паспорт может иметь имя. Вам необходимо ссылаться на Pass по имени в команде UsePass
и в некоторых API C#. Имя прохода отображается в инструменте Frame Debugger.
Совместимость конвейера рендеринга
Название функции | Встроенный конвейер рендеринга | Универсальный конвейер рендеринга (URP) | Конвейер рендеринга высокого разрешения (HDRP) | Пользовательская SRP |
---|---|---|---|---|
ShaderLab: Name block | Да | Да | Да | Да |
Использование блока имени
Чтобы присвоить имя пропуску в ShaderLab, вы помещаете блок Name
внутрь блока Pass
.
Подпись | Функции |
---|---|
Name "<name>" |
Устанавливает имя прохода. |
Внутренне Unity преобразует имя в верхний регистр. Когда вы ссылаетесь на имя в коде ShaderLab, вы должны использовать вариант в верхнем регистре; например, если значение «example», вы должны указать его как EXAMPLE.
Если несколько проходов в одном и том же подшейдере имеют одно и то же имя, Unity использует первый проход в коде.
Использование имени Pass в сценариях C#
Чтобы получить доступ к имени прохода из скриптов C#фрагмента кода, позволяющего создавать собственные компоненты, триггер игровые события, изменяйте свойства компонентов с течением времени и реагируйте на действия пользователя любым удобным для вас способом. Подробнее
См. в Словарь, вы можете использовать такие API, как Material.FindPass, Material.GetPassName или ShaderData.Pass.Name.
Примечание. Material.GetShaderPassEnabled и Material.SetShaderPassEnabled не ссылаются на проходы по имени; вместо этого они ссылаются на проходы, используя значение тега LightMode.
Примеры
В этом примере кода создается объект Shader с именем ContainsNamedPass, который содержит Pass с именем ExampleNamedPass.
Shader "Examples/ContainsNamedPass"
{
SubShader
{
Pass
{
Name "ExampleNamedPass"
// The rest of the code that defines the Pass goes here.
}
}
}
Затем вы можете использовать следующий код C# для запроса имени этого прохода:
using UnityEngine;
public class GetPassName : MonoBehaviour
{
// Place this script on a GameObject with a MeshRenderer component
void Start() {
// Get the material
var material = GetComponent().material;
// Get the name of the first Pass in the active SubShader
// of the Shader object assigned to the material
var passName = material.GetPassName(0);
// Print the name to the console
Debug.Log(passName);
}
}