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.
Componer
Sección titulada «Componer»Compose · compose · Vector · g.compose(...)
Construye un vector a partir de sus componentes.

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(...) |
uv = g.uv()rgb = g.compose(uv["x"], uv["y"], 0.5)g.output(g.rgba(rgb, 1.0))Descomponer
Sección titulada «Descomponer»Decompose · decompose · Vector · g.decompose(...)
Los componentes de un vector (x, y, z y w; r, g, b y a para colores).

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 |
c = g.color("#f97316")parts = g.decompose(c)g.output(g.rgba(parts["x"], 1.0))Reordenar
Sección titulada «Reordenar»Swizzle · swizzle · Vector · g.swizzle(...)
Elige y reordena componentes: “yx”, “zzz”, “rgb”, “x”…

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 |
uv = g.uv()["uv"]g.output(g.rgba(g.compose(uv.y, uv.x, 0.0), 1.0))Producto escalar
Sección titulada «Producto escalar»Dot · dot · Vector · g.dot(...)
El producto escalar de a y b: cuánto apuntan en la misma dirección.

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 |
p = g.uv()["uv"] - 0.5d = g.dot(p, p)g.output(g.rgba(1.0 - d * 4.0, 1.0))Producto vectorial
Sección titulada «Producto vectorial»Cross · cross · Vector · g.cross(...)
El producto vectorial de dos vec3.

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 |
n = g.cross([1.0, 0.0, 0.0], [0.0, 1.0, 0.0])g.output(g.rgba(n, 1.0))Longitud
Sección titulada «Longitud»Length · length · Vector · g.length(...)
La longitud de un vector.

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 |
d = g.length(g.centered_uv()["centered"])g.output(g.rgba(1.0 - d, 1.0))Distancia
Sección titulada «Distancia»Distance · distance · Vector · g.distance(...)
Lo lejos que están a y b.

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 |
d = g.distance(b=[0.5, 0.5])g.output(g.rgba(g.smoothstep(0.3, 0.0, d), 1.0))Normalizar
Sección titulada «Normalizar»Normalize · normalize · Vector · g.normalize(...)
El vector con longitud 1.

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 |
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))Reflejar
Sección titulada «Reflejar»Reflect · reflect · Vector · g.reflect(...)
La dirección i reflejada en una superficie orientada a n.

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 |
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.

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 |
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.
Repetición y desplazamiento
Sección titulada «Repetición y desplazamiento»Tiling and offset · tiling_offset · UV · g.tiling_offset(...)
uv × tiling + offset: repite y mueve lo que lo use.

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 |
uv = g.tiling_offset(tiling=[4.0, 4.0])g.output(g.rgba(g.fract(uv["uv"]).x, 1.0))Desplazar
Sección titulada «Desplazar»Scroll · scroll · UV · g.scroll(...)
Mueve uv con el tiempo: uv + speed × time.

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 |
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).

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 |
uv = g.rotate(angle=g.time()["time"])s = g.stripes(uv["uv"], count=8.0)g.output(g.rgba(s, 1.0))Remolino
Sección titulada «Remolino»Twirl · twirl · UV · g.twirl(...)
Retuerce uv alrededor de center, más cuanto más lejos.

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 |
uv = g.twirl(strength=8.0)c = g.checker(uv["uv"], cells=[8.0, 8.0])g.output(g.rgba(c, 1.0))Pixelar
Sección titulada «Pixelar»Pixelate · pixelate · UV · g.pixelate(...)
Ajusta uv a una cuadrícula de celdas, para un aspecto pixel art.

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 |
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.

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 |
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))Caleidoscopio
Sección titulada «Caleidoscopio»Kaleidoscope · kaleidoscope · UV · g.kaleidoscope(...)
Refleja uv alrededor de center en segmentos.

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 |
uv = g.kaleidoscope(segments=8.0)n = g.noise(uv["uv"], scale=6.0)g.output(g.rgba(g.palette(n), 1.0))Voltear
Sección titulada «Voltear»Flip · flip · UV · g.flip(...)
Refleja uv en horizontal, en vertical o en ambos.

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 |
uv = g.flip(axis="y")g.output(g.gradient(uv["uv"].y))Repetir
Sección titulada «Repetir»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.

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 |
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