Ir al contenido

Matemáticas

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

Todos los nodos de matemáticas funcionan con números y con vectores: con un vec3 trabajan en cada componente (rojo, verde y azul a la vez). Sus entradas y salidas tienen el tipo genérico T.

Math · math · Matemáticas · g.math(...)

Una operación aritmética entre dos valores (de cualquier tipo: los vectores se procesan por componente).

El nodo Matemáticas tal como se ve en la vista Shader, con su vista previa

Dos valores entran, uno sale. En Python casi nunca lo añades a mano: a + b, a * 2 o a ** 2 sobre puertos añaden nodos Matemáticas por ti. Cada operación es su propia entrada en la barra lateral (Sumar, Multiplicar, Escalón…).

Entrada Tipo Por defecto
a T 0
b T 1
Salida Tipo
result · resultado T
Ajuste Valores Por defecto
op add, subtract, multiply, divide, modulo, power, min, max, step, atan2, snap add

Entradas de la barra lateral

Entrada Qué hace En Python
Sumar a + b g.add(...)
Restar a − b g.subtract(...)
Multiplicar a × b g.multiply(...)
Dividir a ÷ b g.divide(...)
Módulo El resto de a ÷ b (siempre con el signo de b). g.modulo(...)
Potencia a elevado a b. g.power(...)
Mínimo El menor de a y b. g.min(...)
Máximo El mayor de a y b. g.max(...)
Escalón 0 donde b está por debajo del borde a, 1 a partir de ahí. g.step(...)
Atan2 El ángulo del punto (b, a) en radianes: a es y, b es x. g.atan2(...)
Ajustar a redondeado al múltiplo de b más cercano. g.snap(...)
Ejemplo
uv = g.uv()
stripes = g.step(0.5, g.fract(uv["x"] * 8.0))
g.output(g.rgba(stripes * 0.8 + 0.1, 1.0))

Function · func · Matemáticas · g.func(...)

Una función de un valor (los vectores se procesan por componente).

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

Un valor entra, uno sale: redondeos, raíces, potencias, trigonometría y más. Cada función es su propia entrada en la barra lateral (Sin, Fract, Abs…) y un método en Python (g.sin(x), g.fract(x)).

Entrada Tipo Por defecto
x T 0
Salida Tipo
result · resultado T
Ajuste Valores Por defecto
op abs, negate, sign, floor, ceil, round, fract, trunc, sqrt, inverse_sqrt, square, exp, exp2, log, log2, sin, cos, tan, asin, acos, atan, sinh, cosh, tanh, one_minus, reciprocal, saturate, degrees, radians sin

Entradas de la barra lateral

Entrada Qué hace En Python
Abs x sin signo. g.abs(...)
Negar −x g.negate(...)
Signo −1, 0 o 1: el signo de x. g.sign(...)
Floor x redondeado hacia abajo. g.floor(...)
Ceil x redondeado hacia arriba. g.ceil(...)
Redondear x redondeado al entero más cercano. g.round(...)
Fract La parte decimal: x − floor(x). Se repite cada 1. g.fract(...)
Truncar x sin su parte decimal. g.trunc(...)
Raíz La raíz cuadrada de x. g.sqrt(...)
Raíz inversa 1 / √x g.inverse_sqrt(...)
Cuadrado x × x g.square(...)
Exp e elevado a x. g.exp(...)
Exp2 2 elevado a x. g.exp2(...)
Log El logaritmo natural de x. g.log(...)
Log2 El logaritmo en base 2 de x. g.log2(...)
Sin El seno de x (radianes). g.sin(...)
Cos El coseno de x (radianes). g.cos(...)
Tan La tangente de x (radianes). g.tan(...)
Asin El arcoseno de x, en radianes. g.asin(...)
Acos El arcocoseno de x, en radianes. g.acos(...)
Atan La arcotangente de x, en radianes. g.atan(...)
Sinh El seno hiperbólico de x. g.sinh(...)
Cosh El coseno hiperbólico de x. g.cosh(...)
Tanh La tangente hiperbólica de x: una curva en S de −1 a 1. g.tanh(...)
Uno menos 1 − x: invierte 0..1. g.one_minus(...)
Recíproco 1 / x g.reciprocal(...)
Saturar x limitado entre 0 y 1. g.saturate(...)
Grados Radianes a grados. g.degrees(...)
Radianes Grados a radianes. g.radians(...)
Ejemplo
t = g.time()["time"]
wave = g.abs(g.sin(g.uv()["x"] * 10.0 + t))
g.output(g.rgba(wave, 1.0))

Mix · mix · Matemáticas · g.mix(...)

Mezcla de a (t = 0) a b (t = 1): una interpolación lineal.

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

Mezcla dos valores: t = 0 da a, 1 da b, 0.5 mitad de cada uno. El nodo que más usarás para combinar colores.

Entrada Tipo Por defecto
a T 0
b T 1
t T 0.5
Salida Tipo
result · resultado T
Ejemplo
uv = g.uv()
sky = g.mix([0.1, 0.2, 0.5], [0.9, 0.6, 0.3], uv["y"])
g.output(g.rgba(sky, 1.0))

Clamp · clamp · Matemáticas · g.clamp(...)

x limitado entre min y max.

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

Mantiene un valor dentro de un rango, para que un punto brillante nunca pase de 1 ni uno oscuro baje de 0.

Entrada Tipo Por defecto
x T 0
min T 0
max T 1
Salida Tipo
result · resultado T
Ejemplo
v = g.uv()["x"] * 2.0 - 0.5
g.output(g.rgba(g.clamp(v, 0.0, 1.0), 1.0))

Smoothstep · smoothstep · Matemáticas · g.smoothstep(...)

0 por debajo de edge0, 1 por encima de edge1 y una curva suave entre ambos.

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

Un umbral suave: 0 por debajo de edge0, 1 por encima de edge1 y una curva suave entre ambos. Úsalo para convertir una distancia o un ruido en una máscara de borde suave.

Entrada Tipo Por defecto
edge0 T 0
edge1 T 1
x T 0.5
Salida Tipo
result · resultado T
Ejemplo
n = g.noise(scale=6.0)
mask = g.smoothstep(0.45, 0.55, n)
g.output(g.rgba(mask, 1.0))

Remap · remap · Matemáticas · g.remap(...)

x llevado del rango in_min..in_max a out_min..out_max.

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

Pasa un valor de un rango a otro: de −1..1 (un seno) a 0..1 (un color), o de 0..1 a 0.2..0.8.

Entrada Tipo Por defecto
x T 0.5
in_min · entrada mín. T 0
in_max · entrada máx. T 1
out_min · salida mín. T -1
out_max · salida máx. T 1
Salida Tipo
result · resultado T
Ejemplo
s = g.time()["sin"]
v = g.remap(s, -1.0, 1.0, 0.2, 0.8)
g.output(g.rgba(v, 1.0))

Multiply add · multiply_add · Matemáticas · g.multiply_add(...)

a × b + c

El nodo Multiplicar y sumar tal como se ve en la vista Shader, con su vista previa

a × b + c en un solo nodo: escala y desplaza un valor, como sin × 0.5 + 0.5 para llevar −1..1 a 0..1.

Entrada Tipo Por defecto
a T 1
b T 1
c T 0
Salida Tipo
result · resultado T
Ejemplo
s = g.time()["sin"]
g.output(g.rgba(g.multiply_add(s, 0.5, 0.5), 1.0))

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