$alphatest

From Valve Developer Community
< Ru
Jump to navigation Jump to search
English (en)Español (es)Русский (ru)中文 (zh)Translate (Translate)

$alphatest - это параметр материала шейдера(en), доступно для всех игр на движке Source Source. Он определяет бинарную маску, используемую для определения непрозрачности(en). Белый цвет обозначает полную непрозрачность, а чёрный - полную прозрачность. Промежуточные значения округляются к 0 или 1, если совместно не используется параметр $allowalphatocoverage. Этот эффект похож на $translucent(en), за исключением того, что он не может быть полупрозрачным (без полосности), визуализируется намного быстрее, и движок всегда правильно оперирует при наложении (а не только исключая мелкие(en) объекты мира(en)).

Синтаксис

$alphatest	<булева переменная(en)>

Пример VMT

LightmappedGeneric(en)
{
	$basetexture(en)		"glass\window001a"

	$alphatest		1

	$alphatestreference	0.5

	$allowalphatocoverage	1
}

Дополнительные параметры

$alphatestreference <число с плавающей запятой(en)>
Задает пороговое значение альфа-канала для перехода от непрозрачности к прозрачности. Значение "0.3" даст более широкий переход, а значение "0.7" - более тонкий переход.
Примечания и предупреждения
Icon-Important.pngВажно: 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.
Icon-Bug.pngБаг:Обновление $alphatestreference в реальном времени с помощью подменных материалов(en) не работает в игровом процессе и влияет только на проецируемые тени (например, от фонарика).
Tip.pngСовет: Это ограничение можно обойти, используя $alphatestreference 1, и задав значения $alpha(en) превышающие 1 (предельное значение для нормы), но это может вызвать проблемы с сортировкой).
Tip.pngСовет: Для VertexLitGeneric на моделях можно использовать $detail с $detailblendmode 3 и изменить значение $detailblendfactor. Детальная текстура должна быть копией $basetexture(en) с отличающимся альфа-каналом.
  [нужно проверить в ?]
$allowalphatocoverage <булева переменная(en)>
Создаёт ступенчатые изменения прозрачности на основе значений альфа-канала. Может использоваться для получения более плавных краёв, а также значительного снижения эффекта мерцания при просмотре с дальнего расстояния.
Это может быть неочевидным, но параметр $alphatestreference применяется при использовании этого параметра для управления масками проецируемых теней, если у клиента отключено MSAA, а также в стандартной версии Hammer (где сглаживание недоступно).
Примечания и предупреждения
Warning.pngПредупреждение: Для работы этого параметра необходимо включить сглаживание MSAA(en).
Количество переходов зависит от выбора кратности MSAA: при 2x MSAA будет меньше переходов прозрачности, чем при 8x MSAA.
Note.pngПримечание: При 8x MSAA (Проверено в Source 2013 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).
Tip.pngСовет: 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
Исходное изображение, обработанное с помощью $translucent
Анимированный просмотр того же изображения, но с $alphatest. Первый кадр показывает эффект $allowalphatocoverage 1 (при 4x MSAA). Остальные показывают $alphatest с $alphatestreference в диапазоне от 0.1 до 0.9

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

Смотреть также