カスタムシェーダー

Wonderland Engineで独自のシェーダーを書くためのガイド。

頂点シェーダーとフラグメントシェーダー 

Wonderland Engineでは、現在カスタムフラグメントシェーダーを書くためのAPIを公開しています。

Material構造体 

Material構造体は、シェーダーに入力するマテリアルプロパティを定義し、UIを生成します。

この構造体定義により、マテリアル入力を効率的にパッキングし、シェーダーの {{ decoder }} プレースホルダーで自動的にアンパッキングコードを生成することができます。

例として、以下のようなMaterial構造体が考えられます:

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

プロパティタイプ 

次のプロパティタイプは、lowpおよびmediump精度指定子と組み合わせてサポートされています:

  • float, uint, int: スカラ値
  • vec2, vec3, vec4: 浮動小数点ベクトル
  • ivec2, ivec3, ivec4: 整数ベクトル

精度 

Wonderland Engineでは、lowpは常に8ビット/コンポーネントのエンコード型、mediumpは16ビットのエンコード型(例: 半浮動小数点)、そしてサポートされている場合はhighpが32ビットのエンコード型になります。

サフィックス 

次のサフィックスには特別な意味があります:

  • *Color: カラーピッカーを生成します。LDRカラーにはlowpを利用します。
  • *Texture: テクスチャリソースのドロップダウンを生成します。常にmediumpを使用します。

メモリアラインメント 

Wonderland Engineのマテリアルパッキングの仕組みにより、多くのベクトルタイプは32ビットに整列が必要です。コンポーネントごとのビット数をカウントするには、精度を参照してください。

プリプロセッサシンボル 

シェーダーの一部をパフォーマンスのためにコンパイルアウトするために、拡張されたプリプロセッサ実装を提供します。

機能 

シェーダー内で「機能シンボル」を定義して、シェーダーの一部を有効または無効にすることができます:

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

FEATURE_<name><name>という名前の機能を定義するために使用されます。これらはViews > Resources > Pipelines設定の「Features」リストに公開されます。機能が有効になっている場合、シンボルが機能名に一致するように定義されます。たとえば、上記の例ではALPHA_MASKEDFEATURE_ALPHA_MASKEDではなく)が有効になります。

フラグメント入力 

USE_<input>という接頭辞が付いたシンボルは、シェーダー入力を有効にするために使用されます。次のオプションがあります:

シンボルタイプ名前
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

インクルード 

Wonderland EngineにはGLSLシェーダーインクルードシステムがあります。よく必要とされるインクルードについては、既存のシェーダーを参照してください。

ユニフォーム 

常に利用可能な特別なユニフォーム:

ユニフォームタイプ説明
viewIndexuint現在レンダリングされているビューのインデックス。

その他については、エディターに付属しているシェーダーを参考にしてください。一部はプリプロセッサシンボルによって有効にされた場合のみ利用可能です。