$alphatest
$alphatest - это параметр материала шейдера, доступно для всех игр на движке
Source. Он определяет бинарную маску, используемую для определения непрозрачности. Белый цвет обозначает полную непрозрачность, а чёрный - полную прозрачность. Промежуточные значения округляются к 0 или 1, если совместно не используется параметр $allowalphatocoverage. Этот эффект похож на $translucent, за исключением того, что он не может быть полупрозрачным (без
полосности), визуализируется намного быстрее, и движок всегда правильно оперирует при наложении (а не только исключая мелкие объекты мира).
Синтаксис
$alphatest <булева переменная>
Пример VMT
LightmappedGeneric { $basetexture "glass\window001a" $alphatest 1 $alphatestreference 0.5 $allowalphatocoverage 1 }
Дополнительные параметры
- $alphatestreference <число с плавающей запятой>
- Задает пороговое значение альфа-канала для перехода от непрозрачности к прозрачности. Значение "0.3" даст более широкий переход, а значение "0.7" - более тонкий переход.
Примечания и предупреждения
Важно: Unintuitively, this parameter does not default to "0.5". LightmappedGeneric, UnlitGeneric, and VertexLitGeneric all default to "0.7" instead. To avoid unexpected results, this parameter should always be set.
Баг:Обновление $alphatestreferenceв реальном времени с помощью подменных материалов не работает в игровом процессе и влияет только на проецируемые тени (например, от фонарика).
Совет: Это ограничение можно обойти, используя $alphatestreference 1, и задав значения$alphaпревышающие 1 (предельное значение для нормы), но это может вызвать проблемы с сортировкой).[нужно проверить в ?]
Совет: Для VertexLitGeneric на моделях можно использовать $detailс$detailblendmode 3и изменить значение$detailblendfactor. Детальная текстура должна быть копией$basetextureс отличающимся альфа-каналом.
- $allowalphatocoverage <булева переменная>
- Создаёт ступенчатые изменения прозрачности на основе значений альфа-канала. Может использоваться для получения более плавных краёв, а также значительного снижения эффекта мерцания при просмотре с дальнего расстояния.
Это может быть неочевидным, но параметр$alphatestreferenceприменяется при использовании этого параметра для управления масками проецируемых теней, если у клиента отключено MSAA, а также в стандартной версии Hammer (где сглаживание недоступно).Примечания и предупреждения
Предупреждение: Для работы этого параметра необходимо включить сглаживание MSAA.
Количество переходов зависит от выбора кратности MSAA: при 2x MSAA будет меньше переходов прозрачности, чем при 8x MSAA.
Примечание: При 8x MSAA (Проверено в
Source 2013) будет 7 переходов прозрачности (9 - если считать полную непрозрачность и прозрачность).
Ступени будут разделены следующим образом:
Нормированные значения: полностью прозрачное - 0.06 - 0.18 - 0.31 - 0.43 - 0.56 - 0.68 - 0.81 - 0.93 - полностью непрозрачное
Десятичные значения канала: полностью прозрачное - 15 - 46 - 80 - 110 - 143 - 174 - 207 - 238 - полностью непрозрачное
(значения 0-255 округляются до большего целого. Используется формуланормированное значение * 255)Нужно сделать: Make a table for this. One that considers other MSAA Levels. There are always 1 fewer translucency steps than the number of MSAA samples (or one additional, if including fully transparent and fully opaque).
Совет: Alpha to coverage works best with sharp, high-resolution alpha channels, as this mitigates the inherent banding artefacts caused by the stock shaders' lack of sharpening when magnifying alpha to coverage textures.
Сравнение
$translucent |
$alphatest
|
|---|---|
Обратите внимание, что правый круг, имеющий резкий переход альфа-канала почти не меняется.