Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

Примечание. ShaderLabязык Unity для определения структуры объектов Shader. Подробнее
See in Словарь
на этой странице является устаревшей и задокументирован только для обратной совместимости. Если ваш шейдерПрограмма, работающая на графическом процессоре. Подробнее
См. в Словарь
исходный файл включает код HLSL, Unity полностью игнорирует эти команды. Если исходный файл шейдера не включает код HLSL, Unity компилирует эти команды в обычные программы шейдера при импорте.

Совместимость конвейера рендеринга

Название функции Встроенный конвейер рендеринга Универсальный конвейер рендеринга (URP) Конвейер рендеринга высокого разрешения (HDRP) Пользовательский SRP
Legacy alpha testing Да Нет Нет Нет

После того, как окончательный выходной цвет был рассчитан, цвет может дополнительно иметь свое альфа-значение по сравнению с фиксированным значением. Если тест не пройден, пиксельнаименьшая единица компьютерного изображения. Размер пикселя зависит от разрешения вашего экрана. Пиксельное освещение рассчитывается для каждого пикселя экрана. Подробнее
See in Словарь
не выводится на дисплей.

Синтаксис

AlphaTest Off

Визуализировать все пиксели (по умолчанию) или…

AlphaTest comparison AlphaValue

Настройте альфа-тест так, чтобы отображались только те пиксели, значение альфа-канала которых находится в определенном диапазоне.

Сравнение

Сравнение — это одно из следующих слов:

Greater Отрисовывать только пиксели, альфа которых больше, чем AlphaValue.
GEqual Отрисовывать только пиксели, альфа которых больше или равна AlphaValue.
Less Отрисовывать только пиксели, значение альфа-канала которых меньше AlphaValue.
LEqual Отрисовывать только пиксели, значение альфа-канала которых меньше или равно AlphaValue.
Equal Отрисовывать только пиксели, значение альфа-канала которых равно AlphaValue.
NotEqual Отрисовывать только пиксели, значение альфа-канала которых отличается от AlphaValue.
Always Рендерим все пиксели. Это функционально эквивалентно AlphaTest Off.
Never Не визуализируйте пиксели.

Альфа-значение

Число с плавающей запятой от 0 до 1. Это также может быть ссылка переменной на свойство с плавающей запятой или диапазоном, и в этом случае оно должно быть записано с использованием стандартной нотации квадратных скобок ([VariableName]).

Подробнее

Альфа-тест важен при рендерингепроцессе вывода графики на экран (или в текстуру рендеринга). По умолчанию основная камера в Unity отображает изображение на экране. Подробнее
Посмотреть в Словарь
вогнутые объекты с прозрачными частями. Видеокарта ведет запись глубины каждого пикселя, записываемого на экран. Если новый пиксель находится дальше, чем уже визуализированный, новый пиксель не записывается на дисплей. Это означает, что даже при смешивании объекты не будут просвечиваться.

На этом рисунке дерево слева визуализируется с помощью AlphaTest. Обратите внимание, что пиксели в нем либо полностью прозрачны, либо непрозрачны. Дерево в центре визуализируется с использованием только альфа-смешивания — обратите внимание, как прозрачные части близлежащих ветвей закрывают дальние листья из-за буфера глубиныХранилище памяти, в котором хранится глубина z-значения каждого пикселя изображения, где z-значение — это глубина каждого визуализируемого пикселя из плоскости проекции. Подробнее
См. в Словарь
. Дерево справа визуализируется с использованием шейдера из последнего примера, который реализует комбинацию смешивания и альфа-тестирования, чтобы скрыть любые артефакты.

Примеры

Самый простой пример: назначьте ей текстуру с альфа-каналом. Объект будет виден только там, где альфа больше 0,5

Shader "Simple Alpha Test" { Properties { _MainTex ("Base (RGB) Transparency (A)", 2D) = "" {} } SubShader { Pass { // Only render pixels with an alpha larger than 50% AlphaTest Greater 0.5 SetTexture [_MainTex] { combine texture } } } }

Это само по себе не очень хорошо. Давайте добавим немного освещения и сделаем значение отсечки регулируемым:

Shader "Cutoff Alpha" { Properties { _MainTex ("Base (RGB) Transparency (A)", 2D) = "" {} _Cutoff ("Alpha cutoff", Range (0,1)) = 0.5 } SubShader { Pass { // Use the Cutoff parameter defined above to determine // what to render. AlphaTest Greater [_Cutoff] Material { Diffuse (1,1,1,1) Ambient (1,1,1,1) } Lighting On SetTexture [_MainTex] { combine texture * primary } } } }

Во многих играх при рендеринге растений и деревьев возникают резкие переходы, характерные для альфа-тестирования. Обойти это можно, отрисовав объект дважды. В первом проходе мы используем альфа-тестирование только для рендеринга пикселей, которые непрозрачны более чем на 50%. Во втором проходе мы делаем альфа-смешение графики в тех частях, которые были вырезаны, не записывая глубину пикселя. Мы можем немного запутаться, так как дальние ветки перекрывают близлежащие, но на практике это трудно увидеть, так как в листьях много визуальных деталей.

Shader "Vegetation" { Properties { _Color ("Main Color", Color) = (.5, .5, .5, .5) _MainTex ("Base (RGB) Alpha (A)", 2D) = "white" {} _Cutoff ("Base Alpha cutoff", Range (0,.9)) = .5 } SubShader { // Set up basic lighting Material { Diffuse [_Color] Ambient [_Color] } Lighting On // Render both front and back facing polygons. Cull Off // first pass: // render any pixels that are more than [_Cutoff] opaque Pass { AlphaTest Greater [_Cutoff] SetTexture [_MainTex] { combine texture * primary, texture } } // Second pass: // render in the semitransparent details. Pass { // Dont write to the depth buffer ZWrite off // Don't write pixels we have already written. ZTest Less // Only render pixels less or equal to the value AlphaTest LEqual [_Cutoff] // Set up alpha blending Blend SrcAlpha OneMinusSrcAlpha SetTexture [_MainTex] { combine texture * primary, texture } } } }

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

Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3