Yotsuba Shader
Español

PROCESO DE COMPILACIÓN

Un shader.
De C# a tu API gráfica.

Escribe la lógica de tu shader en C#. Yotsuba Shader produce SPIR-V y después Yotsuba ShaderCross lo traduce al lenguaje de shaders que necesita tu aplicación.

Explora las sintaxis de autoría en C# →

El recorrido de compilación

Iluminación, patrones procedurales, muestreo de texturas y funciones reutilizables parten del mismo proyecto C#. El compilador trabaja con el subconjunto de C# compatible con shaders.

  1. Código del shader en C#

    Tus tipos, funciones y lógica del shader.

  2. Yotsuba Shader

    Análisis con Roslyn → Yotsuba IR → generación de SPIR-V.

  3. SPIR-V

    Un módulo binario de shader compartido por las rutas de salida.

  4. Yotsuba ShaderCross

    Traduce el módulo SPIR-V al lenguaje de shaders de destino.

Elige el lenguaje de salida

GLSL ES

Android · OpenGL ES · WebGL

Código fuente de shaders para aplicaciones OpenGL ES en Android y para WebGL.

GLSL

OpenGL

Código fuente de shaders para un pipeline de renderizado OpenGL.

MSL

Metal

Código fuente Metal Shading Language para plataformas Apple.

HLSL

Direct3D 11 / 12

Código fuente para compilar con un compilador de shaders Direct3D como DXC.

WGSL

Planificado

WebGPU

Previsto para 2027. La salida WGSL todavía no está disponible.

Imágenes ilustrativas de fotógrafos y artistas 3D independientes.

En desarrollo. Este diagrama describe el pipeline de compilación previsto. El recorrido completo C# → IR → SPIR-V todavía se está ensamblando. La salida WGSL está prevista para 2027.

YOTSUBA SHADER

Empieza por el shader que quieres escribir.

La etapa vertex recibe una posición y un color, convierte la posición a coordenadas homogéneas en el espacio de recorte y pasa el color a la etapa fragment. La etapa fragment devuelve el color interpolado.

Este ejemplo contiene el código del shader para ambas etapas. La aplicación configura el pipeline gráfico, proporciona los datos de los vértices y emite las llamadas de dibujo.

BasicColorShader.cs
using Microsoft.Xna.Framework;
using YotsubaShader.Language;
using YotsubaShader.HlslSyntax;

public class BasicColorShader
{
    public struct VS_Input
    {
        [POSITION]
        public Vector2 Position;

        [COLOR]
        public Vector4 Color;
    }

    public struct VS_Output
    {
        [SV_Position]
        public Vector4 Position;

        [COLOR]
        public Vector4 Color;
    }

    [ShaderStage(Stage.Vertex)]
    public VS_Output VS(VS_Input input)
    {
        VS_Output output = new VS_Output();

        output.Position = new Vector4(
            input.Position.X,
            input.Position.Y,
            0.0f,
            1.0f
        );

        output.Color = input.Color;

        return output;
    }

    [ShaderStage(Stage.Fragment)]
    [return: SV_Target(0)]
    public Vector4 FS(VS_Output input)
    {
        return input.Color;
    }
}

SPIR-V

Un módulo intermedio.

SPIR-V almacena instrucciones, tipos, puntos de entrada y bindings de recursos en un módulo binario. Una aplicación Vulkan puede utilizar directamente un módulo compatible; las demás rutas de salida lo envían a Yotsuba ShaderCross.

YOTSUBA SHADERCROSS

Genera el código fuente para tu destino.

ShaderCross lee SPIR-V y genera código fuente GLSL ES, GLSL, MSL o HLSL. WGSL es una salida planificada. Después, tu motor o API gráfica compila el código generado según lo que requiera la plataforma de destino.

Android es una plataforma, no un formato de shaders: utiliza GLSL ES para un renderer OpenGL ES o SPIR-V para uno Vulkan. WebGL utiliza GLSL ES; WebGPU utiliza WGSL.