Ir al contenido

Vectores y UV

Cada ejemplo de esta página se ejecuta después de estas dos líneas y termina enviando un color al nodo Salida:

from pyzed import shading
g = shading.Graph("demo")

Los vectores son grupos de 2, 3 o 4 números: una posición (x, y), un color (r, g, b) o un color con alfa (r, g, b, a). Estos nodos los crean, separan y miden.

Compose · compose · Vector · g.compose(...)

Construye un vector a partir de sus componentes.

El nodo Componer tal como se ve en la vista Shader, con su vista previa

Construye un vector a partir de números sueltos: tres valores en un color RGB, dos en un punto. El ajuste type elige vec2, vec3 o vec4 (la barra lateral también tiene Componer vec2 y Componer vec4).

Entrada Tipo Por defecto
x float 0
y float 0
z float 0
Salida Tipo
vector vec3
Ajuste Valores Por defecto
type vec2, vec3, vec4 vec3

Las entradas siguen el ajuste type: x e y para vec2, hasta w para vec4.

Entradas de la barra lateral

Entrada Qué hace En Python
Componer Construye un vector a partir de sus componentes. g.compose(...)
Componer vec2 Construye un vec2 a partir de x e y. g.compose_vec2(...)
Componer vec4 Construye un vec4 a partir de x, y, z y w. g.compose_vec4(...)
Ejemplo
uv = g.uv()
rgb = g.compose(uv["x"], uv["y"], 0.5)
g.output(g.rgba(rgb, 1.0))

Decompose · decompose · Vector · g.decompose(...)

Los componentes de un vector (x, y, z y w; r, g, b y a para colores).

El nodo Descomponer tal como se ve en la vista Shader, con su vista previa

Separa un vector en sus componentes: x, y, z, w (el rojo, verde, azul y alfa de un color).

Entrada Tipo Por defecto
vector T (0, 0, 0, 1)
Salida Tipo
x float
y float
z float
w float
Ejemplo
c = g.color("#f97316")
parts = g.decompose(c)
g.output(g.rgba(parts["x"], 1.0))

Swizzle · swizzle · Vector · g.swizzle(...)

Elige y reordena componentes: “yx”, “zzz”, “rgb”, “x”…

El nodo Reordenar tal como se ve en la vista Shader, con su vista previa

Elige y reordena componentes con una máscara: yx intercambia x e y, rgb quita el alfa, xxx repite uno. En Python, puerto.yx o puerto.rgb lo añade por ti.

Entrada Tipo Por defecto
vector T (0, 0, 0, 1)
Salida Tipo
result · resultado vec2
Ajuste Valores Por defecto
mask text yx
Ejemplo
uv = g.uv()["uv"]
g.output(g.rgba(g.compose(uv.y, uv.x, 0.0), 1.0))

Dot · dot · Vector · g.dot(...)

El producto escalar de a y b: cuánto apuntan en la misma dirección.

El nodo Producto escalar tal como se ve en la vista Shader, con su vista previa

El producto escalar: cuánto apuntan dos direcciones hacia el mismo lado (1 igual, 0 en ángulo recto, −1 opuestas). p · p es la longitud al cuadrado.

Entrada Tipo Por defecto
a T (1, 0)
b T (1, 0)
Salida Tipo
result · resultado float
Ejemplo
p = g.uv()["uv"] - 0.5
d = g.dot(p, p)
g.output(g.rgba(1.0 - d * 4.0, 1.0))

Cross · cross · Vector · g.cross(...)

El producto vectorial de dos vec3.

El nodo Producto vectorial tal como se ve en la vista Shader, con su vista previa

El producto vectorial de dos vectores 3D: una dirección perpendicular a ambos. Sobre todo para trucos de iluminación.

Entrada Tipo Por defecto
a vec3 (1, 0, 0)
b vec3 (0, 1, 0)
Salida Tipo
result · resultado vec3
Ejemplo
n = g.cross([1.0, 0.0, 0.0], [0.0, 1.0, 0.0])
g.output(g.rgba(n, 1.0))

Length · length · Vector · g.length(...)

La longitud de un vector.

El nodo Longitud tal como se ve en la vista Shader, con su vista previa

Lo largo que es un vector. La longitud de UV centrado es la distancia al centro: un círculo en un nodo.

Entrada Tipo Por defecto
vector T (1, 1)
Salida Tipo
length · longitud float
Ejemplo
d = g.length(g.centered_uv()["centered"])
g.output(g.rgba(1.0 - d, 1.0))

Distance · distance · Vector · g.distance(...)

Lo lejos que están a y b.

El nodo Distancia tal como se ve en la vista Shader, con su vista previa

A qué distancia están dos puntos. Por defecto a es el UV del píxel, así que mide del píxel a b.

Entrada Tipo Por defecto
a T UV (contexto)
b T (0.5, 0.5)
Salida Tipo
distance · distancia float
Ejemplo
d = g.distance(b=[0.5, 0.5])
g.output(g.rgba(g.smoothstep(0.3, 0.0, d), 1.0))

Normalize · normalize · Vector · g.normalize(...)

El vector con longitud 1.

El nodo Normalizar tal como se ve en la vista Shader, con su vista previa

La misma dirección con longitud 1: para direcciones, vectores de luz y reflejos.

Entrada Tipo Por defecto
vector T (1, 1)
Salida Tipo
result · resultado T
Ejemplo
n = g.normalize(g.uv()["uv"] - 0.5)
g.output(g.rgba(g.compose(n.x, n.y, 0.5) * 0.5 + 0.5, 1.0))

Reflect · reflect · Vector · g.reflect(...)

La dirección i reflejada en una superficie orientada a n.

El nodo Reflejar tal como se ve en la vista Shader, con su vista previa

Hace rebotar la dirección i en una superficie orientada hacia n, como una pelota en una pared.

Entrada Tipo Por defecto
i T (1, -1)
n T (0, 1)
Salida Tipo
result · resultado T
Ejemplo
r = g.reflect(g.uv()["uv"] - 0.5, [0.0, 1.0])
g.output(g.rgba(g.compose(r.x, r.y, 0.5) + 0.5, 1.0))

polar · Vector · g.polar(...)

La distancia y el ángulo del píxel alrededor de center (respeta la proporción): ángulo en radianes (−π..π) y de 0 a 1.

El nodo Polar tal como se ve en la vista Shader, con su vista previa

Distancia y ángulo alrededor de un centro: la clave de lo radial, como barridos de radar, gráficos de tarta, rayos de sol y espirales. angle01 va de 0 a 1 alrededor del círculo.

Entrada Tipo Por defecto
uv vec2 UV (contexto)
center · centro vec2 (0.5, 0.5)
Salida Tipo
radius · radio float
angle · ángulo float
angle01 · angle 0..1 float
polar vec2
Ejemplo
p = g.polar()
rays = g.step(0.5, g.fract(p["angle01"] * 12.0))
g.output(g.rgba(rays, 1.0))

Los nodos UV cambian dónde miran los nodos siguientes, no el color: conecta su salida uv a la entrada uv (o p) de un patrón, un ruido o una forma para moverlo, repetirlo, girarlo o deformarlo.

Tiling and offset · tiling_offset · UV · g.tiling_offset(...)

uv × tiling + offset: repite y mueve lo que lo use.

El nodo Repetición y desplazamiento tal como se ve en la vista Shader, con su vista previa

Repite y mueve lo que viene después: tiling (2, 2) lo muestra dos veces en cada dirección, offset lo desplaza.

Entrada Tipo Por defecto
uv vec2 UV (contexto)
tiling · repetición vec2 (2, 2)
offset · desplazamiento vec2 (0, 0)
Salida Tipo
uv vec2
Ejemplo
uv = g.tiling_offset(tiling=[4.0, 4.0])
g.output(g.rgba(g.fract(uv["uv"]).x, 1.0))

Scroll · scroll · UV · g.scroll(...)

Mueve uv con el tiempo: uv + speed × time.

El nodo Desplazar tal como se ve en la vista Shader, con su vista previa

Mueve las coordenadas con el tiempo: ponlo antes de un ruido o un patrón para que se desplace como nubes o una cinta transportadora.

Entrada Tipo Por defecto
uv vec2 UV (contexto)
speed · velocidad vec2 (0.1, 0)
time · tiempo float Tiempo (contexto)
Salida Tipo
uv vec2
Ejemplo
uv = g.scroll(speed=[0.1, 0.0])
n = g.fbm(uv["uv"], scale=3.0)
g.output(g.rgba(n, 1.0))

Rotate · rotate · UV · g.rotate(...)

Gira uv alrededor de center un ángulo angle (radianes).

El nodo Rotar tal como se ve en la vista Shader, con su vista previa

Gira las coordenadas alrededor de center angle radianes (conecta el Tiempo para que gire solo).

Entrada Tipo Por defecto
uv vec2 UV (contexto)
center · centro vec2 (0.5, 0.5)
angle · ángulo float 0.5
Salida Tipo
uv vec2
Ejemplo
uv = g.rotate(angle=g.time()["time"])
s = g.stripes(uv["uv"], count=8.0)
g.output(g.rgba(s, 1.0))

Twirl · twirl · UV · g.twirl(...)

Retuerce uv alrededor de center, más cuanto más lejos.

El nodo Remolino tal como se ve en la vista Shader, con su vista previa

Retuerce las coordenadas alrededor de un centro, más cuanto más lejos: remolinos y portales.

Entrada Tipo Por defecto
uv vec2 UV (contexto)
center · centro vec2 (0.5, 0.5)
strength · intensidad float 6
Salida Tipo
uv vec2
Ejemplo
uv = g.twirl(strength=8.0)
c = g.checker(uv["uv"], cells=[8.0, 8.0])
g.output(g.rgba(c, 1.0))

Pixelate · pixelate · UV · g.pixelate(...)

Ajusta uv a una cuadrícula de celdas, para un aspecto pixel art.

El nodo Pixelar tal como se ve en la vista Shader, con su vista previa

Ajusta las coordenadas a una cuadrícula de celdas, así lo que viene después parece pixel art.

Entrada Tipo Por defecto
uv vec2 UV (contexto)
cells · celdas vec2 (48, 32)
Salida Tipo
uv vec2
Ejemplo
uv = g.pixelate(cells=[24.0, 16.0])
g.output(g.gradient(g.noise(uv["uv"], scale=4.0)))

Barrel · barrel · UV · g.barrel(...)

Curva uv como una pantalla CRT; inside es 0 donde el uv curvado sale de la pantalla.

El nodo Barril tal como se ve en la vista Shader, con su vista previa

Curva las coordenadas como el cristal de un CRT antiguo. Multiplica el color por inside para oscurecer las esquinas que se salen de la pantalla.

Entrada Tipo Por defecto
uv vec2 UV (contexto)
amount · cantidad float 0.25
Salida Tipo
uv vec2
inside · dentro float
Ejemplo
b = g.barrel(amount=0.3)
c = g.checker(b["uv"], cells=[10.0, 8.0])
g.output(g.rgba(c * b["inside"], 1.0))

Kaleidoscope · kaleidoscope · UV · g.kaleidoscope(...)

Refleja uv alrededor de center en segmentos.

El nodo Caleidoscopio tal como se ve en la vista Shader, con su vista previa

Refleja las coordenadas en segments porciones alrededor de un centro, como un caleidoscopio.

Entrada Tipo Por defecto
uv vec2 UV (contexto)
center · centro vec2 (0.5, 0.5)
segments · segmentos float 6
Salida Tipo
uv vec2
Ejemplo
uv = g.kaleidoscope(segments=8.0)
n = g.noise(uv["uv"], scale=6.0)
g.output(g.rgba(g.palette(n), 1.0))

Flip · flip · UV · g.flip(...)

Refleja uv en horizontal, en vertical o en ambos.

El nodo Voltear tal como se ve en la vista Shader, con su vista previa

Refleja las coordenadas en horizontal (x), en vertical (y) o en ambas.

Entrada Tipo Por defecto
uv vec2 UV (contexto)
Salida Tipo
uv vec2
Ajuste Valores Por defecto
axis x, y, both x
Ejemplo
uv = g.flip(axis="y")
g.output(g.gradient(uv["uv"].y))

Repeat · repeat · UV · g.repeat(...)

Repite el espacio en celdas alrededor de (0, 0): dibuja una forma y obtén una cuadrícula de ellas. Cell indica en qué celda está el píxel.

El nodo Repetir tal como se ve en la vista Shader, con su vista previa

Repite el espacio en celdas: dibuja una forma y obtén una cuadrícula entera. cell dice en qué celda está el píxel, para dar a cada copia su color.

Entrada Tipo Por defecto
p vec2 Centrado (contexto)
cell · celda vec2 (0.25, 0.25)
Salida Tipo
p vec2
cell · celda vec2
Ejemplo
r = g.repeat(cell=[0.25, 0.25])
d = g.circle(r["p"], radius=0.08)
g.output(g.rgba(g.fill(d), 1.0))

Ver también: Primeros pasos · La vista Shader · Recetas · Grafos de shader en Python