$distancealpha

From Valve Developer Community
< Es
Jump to: navigation, search
English (en)Español (es)Translate (Translate)

$distancealpha(en) es una técnica de filtrado sencilla para imágenes de patrones poligonales. Da ventaja en métodos de filtrado de texturas en hardware 3D, definiendo una serie de canales alfa(en) por encima, por debajo y entre medias de los efectos aplicados. Esta función se añadió al motor Source Source con el lanzamiento Source 2007 Source 2007. Es ideal para elementos de interfaz, vegetación, vallas de cadenas y otros elementos.

Ventajas
Bordes de vectores en imágenes de patrones poligonales, incluso con aumentos extremos.
Mayor adaptación a gran distancia.
Desventajas
se ve extremadamente pixelado desde ciertos ángulos en algunas situaciones.

Para (mucho) más detalle, véase el papel SIGGRAPH.

Icon-Bug.pngError:Los materiales alfa en la distancia no se renderizan correctamente en la vista 3D de Hammer.  [todo tested in?]

Creación de texturas

Las texturas alfa en la distancia se crean en resoluciones muy altas. Valve usa imágenes en 4096x4096, pero SDK no es capaz de ejecutar VTEX(en) si se superan los 2048x2048, provocando un cuelgue.

La imagen debe ser completamente normal, excepto si el canal alfa puede evitar los gradientes.

Para compilar las texturas, es necesario usar VTEX(en); herramientas de terceros no soportan la distancia alfa aún.

Tu archivo .txt debe ser similar a este aspecto:

// Enable distance alpha compiling
alphatodistance 1

// Scale the image down to 1/nth its original size. '8' takes 2048 down to 256
reduce 8

// Size of 'spread' zone between alpha values of 0 and 1. This is the area the shader works with.
// Bear in mind that higher numbers exponentially increase texture compile time!
distancespread 4

// To prevent artefacting:
nomip 1
nolod 1
nocompress 1

Creación de material (class_spy_outline)

Canal alfa de $basetexture (zum al 100 %).
El material en el juego (zum al 50 %).

Este material se mustra en Team Fortress 2 Team Fortress 2 cuando un Spy se disfraza o se quita el disfraz. Como debe ocupar toda la pantalla, sin importar su resolución, esta textura (vista a la izquierda) es solo de 256 píxeles.

UnlitGeneric(en)
{
	$basetexture(en)	hud\class_spy_outline
	$translucent(en)	1
	$distancealpha	1
	
	$softedges		1
	$edgesoftnessstart	.5
	$edgesoftnessend	.46
	$scaleedgesoftnessbasedonscreenres 1
	
	$glow		1
	$glowcolor	"[0 0 0]"
	$glowalpha	.4
	$glowstart	.1
	$glowend	.5
	//$glowx	.98
	//$glowy	.98

	$vertexcolor(en)	1
	$vertexalpha(en)	1
	$no_fullbright(en)	1
	$ignorez(en)	1
}

Los comandos más interesantes aquí son start y end. Sus valores determinan el rango de los valores alfa en los que cada efecto se aplica.

  • $softedges se aplica del 50 % al 46 % de opacidad
  • $glow se aplica del 10 % al 50 % de opacidad

Con $glowcolor para el negro y $glowalpha al 40 %, el efecto brillo se verá como una sombra.

Efectos

$softedges

Desvanece todos los canales de color de $edgesoftnessstart (opaco) a $edgesoftnessend (transparente).

$scaleedgesoftnessbasedonscreenres <bool(en)>
Pendiente: Describir

$glow

Crea un gradiente monótono de $glowstart (opaco) a $glowend (transparente).

$glowcolor <RGB>
Color del brillo.
$glowalpha <normal(en)>
Opacidad del brillo.
$glowx <normal>
$glowy <normal>
Contraste del brillo; bueno para efectos de sombras.
$glowstart <normal>
$glowend <normal>
Canal alfa. $glowstart tiene intensidad total, $glowend es cuando se hace invisible.

$outline

Igual que en el brillo, pero con la opción añadida de definir la aspereza de los bordes.

$outlinecolor <RGB>
Color del contorno.
$outlinealpha <normal(en)>
Opacidad del contorno.
$outlinestart0 <normal>
$outlinestart1 <normal>
Define el borde exterior del contorno. Cualquier hueco entre dos valores será un gradiente.
0 es de exterior a exterior, mientras que 1 es de interior a exterior.
$outlineend0 <normal>
$outlineend1 <normal>
Define el borde interior del contorno.
0 es de exterior a interior, mientras que 1 es de interior a interior.
Note.pngNota:¡Ambos valores deben diferir en al menos 0,02 o desaparecerá el contorno!
$scaleoutlinesoftnessbasedonscreenres 1
Escala la suavidad del contorno según la resolución de pantalla del usuario.