Ir al contenido

Grafos de shaders (pyzed.shading)

pyzed.shading es el sistema de shaders por nodos que hay detrás de la vista de shaders del diseñador: grafos .pzshad de nodos que se compilan al WGSL de pz.shader. Mira Grafos de shaders para un recorrido.

from pyzed import shading
fuego = shading.load("shaders/fuego.pzshad")
fuego["speed"] = 2.0 # una variable mutable: no recompila
pz.shader(fuego, width=320, height=200) # o pz.shader("shaders/fuego.pzshad")
load(path, *, fresh=False)

El Shader de un archivo .pzshad, en caché por ruta (fresh=True lo vuelve a leer). Se recarga solo cuando el archivo cambia.

class Shader

Un grafo de shader listo para dibujar, con sus propios valores de las variables: shader["speed"] = 2, shader.set(...), shader.variables, shader.wgsl y shader.widget(...). pz.shader lo acepta directamente.

widget(source, **options)

Un widget pz.shader para una ruta .pzshad, un Graph o un Shader.

class Graph

Un grafo de shader: variables, nodos y las conexiones entre ellos. Llama a un tipo de nodo sobre él para añadirlo (g.noise(scale=4), g.sin(x)), elige salidas con nodo["nombre"] y combínalas con aritmética. save, compile, arrange, connect y los métodos de variables lo editan.

new(name='shader')

Un grafo nuevo con UV alimentando un degradado hacia el nodo Output: la plantilla Blank del diseñador.

load_graph(path)

El Graph de un archivo .pzshad, para editarlo.

@dataclass
class Variable(name, type='float', value=None, mutable=True, min=None, max=None, step=None, description='')

Una variable de un shader: name, type (float, int, bool, vec2, vec3, vec4, color, texture), value, mutable (un uniform) o constante, min, max, step y description.

@dataclass
class Node(id, type, x=0.0, y=0.0, inputs={}, params={}, title='', preview=True)

Un nodo de un grafo: su type, su posición, inputs (valores fijos de las entradas sin conectar), params (ajustes), title y si se muestra su preview.

class NodeRef

Lo que devuelve Graph.add: ref["puerto"] es una salida para conectar en otro sitio; la aritmética usa su primera salida.

class GraphError

Se lanza con conexiones imposibles (tipos, ciclos), tipos de nodo desconocidos y nombres de variable no válidos.

compile(graph, target=None, *, values=None)

Compila un grafo (o la salida de un nodo, para su vista previa) a WGSL: el código Compiled, uniforms, texturas y problemas por nodo.

@dataclass
class Compiled(code, uniforms={}, textures={}, names={}, errors={}, lines={}, uses_time=False)

El resultado de compile: code, uniforms, textures, names (el uniform de cada variable), errors por id de nodo, uses_time, y check(), que ejecuta el compilador de la GPU y pone sus mensajes en el nodo que escribió la línea.

register(node_type, *, preset=True)

Añade un tipo de nodo propio al catálogo (y a la barra Shading del diseñador).

@dataclass
class NodeType(id, title, category, description, inputs=(), outputs=(), params=(), exprs={}, functions=(), min_type='bool', build=None, ports=None, resolve=None, label=None, icon='', keywords='')

Un tipo de nodo: id, título, categoría, entradas, salidas, ajustes y cómo escribe su WGSL.

@dataclass
class Preset(type, title, category, description, params={}, keywords='')

Una entrada de la barra Shading: un tipo de nodo con algunos ajustes (func:sin es el nodo Function con sin).