Shaders Personalizados
Guías sobre cómo escribir tus propios shaders en Wonderland Engine.
Shaders de Vértice vs Fragmento
En Wonderland Engine, actualmente exponemos APIs para escribir shaders de fragmentos personalizados.
Estructura del Material
La estructura del material define las propiedades del material para ingresar a tu shader y generar una interfaz de usuario para ello.
Esta definición de estructura nos permite empaquetar eficientemente las entradas del material y generar
código de desempacado automáticamente en el marcador de posición {{ decoder }}
de tu shader.
Un ejemplo de estructura de material puede verse así:
Tipos de Propiedades
Los siguientes tipos de propiedades son compatibles en combinación con los especificadores de precisión lowp
y mediump
:
float
,uint
,int
: Valores escalaresvec2
,vec3
,vec4
: Vectores de punto flotanteivec2
,ivec3
,ivec4
: Vectores enteros
Precisión
En Wonderland Engine, lowp
siempre resultará en un tipo codificado de 8 bits por componente,
mediump
en un tipo codificado de 16 bits (por ejemplo, un medio flotante) y highp
, donde sea compatible,
será un tipo codificado de 32 bits.
Sufijos
Los siguientes sufijos tienen un significado especial:
*Color
: Generará un selector de color. Usalowp
para colores LDR.*Texture
: Generará un desplegable de recursos de textura. Siempre usamediump
.
Alineación de Memoria
Debido a cómo funciona el empaquetado de materiales de Wonderland Engine, la mayoría de los tipos de vectores requieren alineación a 32 bits. Consulta precisión para ver cómo contar bits por componente.
Símbolos del Preprocesador
Para compilar partes de un shader por motivos de rendimiento, permitimos una implementación extendida del preprocesador.
Características
Puedes definir “Símbolos de Característica” en shaders para habilitar y deshabilitar partes de tu shader:
FEATURE_<name>
se usa para definir una característica llamada <name>
. Estas serán expuestas en los
ajustes de Views > Resources > Pipelines
en la lista de “Features”.
Si una característica está habilitada, se definirá un símbolo que coincida con el nombre de tu característica, por ejemplo, ALPHA_MASKED
en el ejemplo anterior (no FEATURE_ALPHA_MASKED
).
Entradas de Fragmento
Los símbolos prefijados con USE_<input>
se utilizan para habilitar entradas del shader. Tienes las siguientes opciones:
Símbolo | Tipo | Nombre |
---|---|---|
USE_POSITION_WORLD | highp vec3 | fragPositionWorld |
USE_POSITION_VIEW | highp vec3 | fragPositionView |
USE_TEXTURE_COORDS | highp vec2 | fragTextureCoords |
USE_TEXTURE_COORDS_1 | highp vec2 | fragTextureCoords1 |
USE_COLOR | mediump vec4 | fragColor |
USE_TANGENT | mediump vec4 | fragTangent |
USE_OBJECT_ID | mediump uint | fragObjectId |
USE_MATERIAL_ID | mediump uint | fragMaterialId |
USE_NORMAL | mediump vec3 | fragNormal |
USE_BARYCENTRIC | mediump vec3 | fragBarycentric |
Includes
Wonderland Engine viene con un sistema de inclusión de shaders GLSL. Por favor, consulta los shaders existentes para saber qué includes son comúnmente requeridos.
Uniforms
Algunos uniformes especiales que siempre están disponibles:
Uniforme | Tipo | Descripción |
---|---|---|
viewIndex | uint | Índice de la vista actual siendo renderizada. |
Para otros, por favor, utiliza los shaders proporcionados con el editor como referencia. Algunos de ellos solo están disponibles cuando se habilitan a través de un símbolo de preprocesador.