$alphatest
$alphatest es un parámetro de un shader disponible en todos los juegos de
Source. Especifica una máscara para usar para determinar la opacidad binaria. El blanco representa completamente opaco, mientras que el negro representa completamente transparente. Cualquier valor intermedio se redondea a 0 o 1. Este efecto es similar a $translucent, excepto que no puede ser semi-opaco (sin
banding), es mucho más rápido de renderizar y el motor siempre puede ordenarlo correctamente cuando está en capas (en lugar de solo en detalle worldspawn).
Sintaxis
Ejemplo de VMT
Parámetros adicionales
- $alphatestreference <float>
- Especifica el valor del canal alfa umbral en el que la superficie debe ser transparente en lugar de opaca. Un valor de ".3" creará una forma más gruesa, mientras que un valor de ".7" creará una forma más delgada.
Valor predeterminado "0.5".
Error:Actualizar $alphatestreferenceen tiempo real con proxies solo afecta a las sombras proyectadas (como la linterna).
Consejo: Esta limitación se puede sortear usando $alphatestreference 1 y modificando el valor de $alphaen su lugar. (requiere que $alpha se eleve por encima de 1, su umbral normal, esto puede causar problemas de ordenamiento)
Consejo: Para VertexLitGeneric en modelos puedes usar $detailcon$detailblendmode 3y modificar el valor de$detailblendfactor. La textura de detalle debe ser una copia de$basetexturecon un canal alfa diferente.
- $allowalphatocoverage <boolean>
- Crea pasos translúcidos basados en valores alfa. Se puede usar para bordes más suaves, así como para reducir en gran medida el parpadeo cuando se ve a distancia.
Este parámetro es incompatible con$alphatestreference.
Aviso: MSAA debe estar habilitado para que esto tenga efecto.
La granularidad de los pasos depende de la cantidad de MSAA elegida; 2x MSAA tendrá menos pasos translúcidos que 8x MSAA.
Nota: A 8x MSAA (Probado en
Source 2013) hay 7 pasos de translucidez. (9 si incluyes completamente opaco y completamente transparente)
Los niveles deberían organizarse aproximadamente de esta manera:
Lineal: completamente transparente - 0.06 - 0.18 - 0.31 - 0.43 - 0.56 - 0.68 - 0.81 - 0.93 - completamente opaco
RGB: completamente transparente - 15 - 46 - 80 - 110 - 143 - 174 - 207 - 238 - completamente opaco
(valores 0-255 redondeados al más alto siguiente. La fórmula utilizada esLinearValue * 255)Pendiente: Hacer una tabla para esto. Una que considere otros niveles de MSAA. Siempre hay un paso de translucidez menos que el número de muestras de MSAA (o uno adicional, si se incluyen completamente transparente y completamente opaco).
Consejo: Alpha to coverage funciona mejor con canales alfa nítidos y de alta resolución, ya que esto mitiga los artefactos de banding inherentes causados por la falta de afilado de los shaders estándar al ampliar texturas alpha to coverage.
Comparación
$translucent |
$alphatest
|
|---|---|
Observa cómo el círculo derecho de $alphatest apenas cambia.