В Unity вы используете язык программирования HLSL для написания шейдерапрограммы, работающей на графическом процессоре. Подробнее
См. в Словарь программы.
Этот раздел руководства содержит информацию об использовании HLSL для Unity. Общие сведения о написании HLSL см. в документации Microsoft по HLSL.
Примечание. Первоначально Unity использовала Cg. язык, отсюда и название некоторых ключевых слов Unity (CGPROGRAM
) и расширения файлов (.cginc
). Unity больше не использует Cg, но эти имена все еще используются.
Добавление кода HLSL в код ShaderLab
Вы помещаете код HLSL в блоки кода в ShaderLabязык Unity для определения структуры объектов Shader. Подробнее
См. в коде Словарь. Обычно они выглядят так:
Pass {
// ... the usual pass state setup ...
HLSLPROGRAM
// compilation directives for this snippet, e.g.:
#pragma vertex vert
#pragma fragment frag
// the shader program itself
ENDHLSL
// ... the rest of pass ...
}
Дополнительную информацию о блоках кода шейдера см. в разделе ShaderLab: добавление шейдерных программ.
Синтаксис HLSL
HLSL имеет два синтаксиса: устаревший синтаксис в стиле DirectX 9 и более современный синтаксис в стиле DirectX 10+. Разница в основном в том, как работают функции выборки текстур:
- В устаревшем синтаксисе используются функции sampler2D, tex2D() и аналогичные функции. Этот синтаксис работает на всех платформах.
- В синтаксисе DX10+ используются функции Texture2D, SamplerState и .Sample(). Некоторые формы этого синтаксиса не работают на платформах OpenGL, поскольку текстуры и сэмплеры не являются разными объектами в OpenGL.
Unity предоставляет библиотеки шейдеров, содержащие макросы препроцессора, которые помогут вам справиться с этими различиями. Дополнительные сведения см. в разделе Встроенные макросы шейдеров.