Valorizziamo la tua privacy. Usiamo i cookie per migliorare la tua esperienza sul nostro sito. Utilizzando questo sito accetti la nostra Informativa sulla privacy.

Shader Personalizzati

Guide su come scrivere i tuoi shader in Wonderland Engine.

Shader di Vertice vs Fragment Shader 

In Wonderland Engine, attualmente forniamo API per scrivere shader di frammento personalizzati.

Struttura del Materiale 

La struttura del materiale definisce le proprietà del materiale da inserire nel tuo shader e generare l’interfaccia utente.

Questa definizione di struttura ci permette di imballare efficientemente gli input del materiale e generare codice di estrazione automaticamente nel segnaposto {{ decoder }} del tuo shader.

Un esempio di struttura del materiale potrebbe essere simile a questo:

1struct Material {
2    lowp vec4 ambientColor;
3    mediump uint diffuseTexture;
4    lowp uint shininess;
5    lowp float ambientFactor;
6    mediump float amplifier;
7};

Tipi di Proprietà 

I seguenti tipi di proprietà sono supportati in combinazione con i specificatori di precisione lowp e mediump:

  • float, uint, int: Valori scalari
  • vec2, vec3, vec4: Vettori a virgola mobile
  • ivec2, ivec3, ivec4: Vettori interi

Precisione 

In Wonderland Engine, lowp risulterà sempre in un tipo codificato a 8 bit per componente, mediump in un tipo codificato a 16 bit (ad esempio, un half float) e highp, se supportato, sarà un tipo codificato a 32 bit.

Suffissi 

I seguenti suffissi hanno un significato speciale:

  • *Color: Genererà un selettore di colori. Usa lowp per i colori LDR.
  • *Texture: Genererà un menu a tendina per risorse texture. Usa sempre mediump.

Allineamento della Memoria 

A causa del funzionamento del confezionamento del materiale di Wonderland Engine, la maggior parte dei tipi di vettore richiede allineamento a 32 bit. Vedi precisione per come contare i bit per componente.

Simboli del Preprocessore 

Per escludere porzioni di un shader per migliorare le prestazioni, abbiamo un’implementazione estesa del preprocessore.

Caratteristiche 

Puoi definire “Simboli di Caratteristica” negli shader per abilitare e disabilitare parti del tuo shader:

1#define FEATURE_ALPHA_MASKED
2#define FEATURE_NORMAL_MAPPING
3#define FEATURE_VERTEX_COLORS
4#define FEATURE_WITH_EMISSIVE

FEATURE_<name> viene usato per definire una caratteristica chiamata <name>. Queste saranno esposte nelle impostazioni Viste > Risorse > Pipeline nella lista “Caratteristiche”. Se una caratteristica è abilitata, un simbolo sarà definito per corrispondere al tuo nome di caratteristica, ad esempio ALPHA_MASKED nell’esempio sopra (non FEATURE_ALPHA_MASKED).

Input di Frammento 

I simboli prefissati con USE_<input> vengono utilizzati per abilitare gli input dello shader. Hai le seguenti opzioni:

SimboloTipoNome
USE_POSITION_WORLDhighp vec3fragPositionWorld
USE_POSITION_VIEWhighp vec3fragPositionView
USE_TEXTURE_COORDShighp vec2fragTextureCoords
USE_TEXTURE_COORDS_1highp vec2fragTextureCoords1
USE_COLORmediump vec4fragColor
USE_TANGENTmediump vec4fragTangent
USE_OBJECT_IDmediump uintfragObjectId
USE_MATERIAL_IDmediump uintfragMaterialId
USE_NORMALmediump vec3fragNormal
USE_BARYCENTRICmediump vec3fragBarycentric

Include 

Wonderland Engine dispone di un sistema di inclusione per shader GLSL. Si prega di fare riferimento agli shader esistenti per quali include sono comunemente richiesti.

Uniform 

Alcuni uniform speciali che sono sempre disponibili:

UniformTipoDescrizione
viewIndexuintIndice della vista corrente in fase di rendering.

Per gli altri, utilizzare come riferimento gli shader forniti con l’editor. Alcuni di essi sono disponibili solo quando abilitati tramite un simbolo del preprocessore.