カスタムシェーダー
Wonderland Engineで独自のシェーダーを書くためのガイド。
頂点シェーダーとフラグメントシェーダー
Wonderland Engineでは、現在カスタムフラグメントシェーダーを書くためのAPIを公開しています。
Material構造体
Material構造体は、シェーダーに入力するマテリアルプロパティを定義し、UIを生成します。
この構造体定義により、マテリアル入力を効率的にパッキングし、シェーダーの {{ decoder }}
プレースホルダーで自動的にアンパッキングコードを生成することができます。
例として、以下のようなMaterial構造体が考えられます:
プロパティタイプ
次のプロパティタイプは、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ビットに整列が必要です。コンポーネントごとのビット数をカウントするには、精度を参照してください。
プリプロセッサシンボル
シェーダーの一部をパフォーマンスのためにコンパイルアウトするために、拡張されたプリプロセッサ実装を提供します。
機能
シェーダー内で「機能シンボル」を定義して、シェーダーの一部を有効または無効にすることができます:
FEATURE_<name>
は<name>
という名前の機能を定義するために使用されます。これらはViews > Resources > Pipelines
設定の「Features」リストに公開されます。機能が有効になっている場合、シンボルが機能名に一致するように定義されます。たとえば、上記の例ではALPHA_MASKED
(FEATURE_ALPHA_MASKED
ではなく)が有効になります。
フラグメント入力
USE_<input>
という接頭辞が付いたシンボルは、シェーダー入力を有効にするために使用されます。次のオプションがあります:
シンボル | タイプ | 名前 |
---|---|---|
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 |
インクルード
Wonderland EngineにはGLSLシェーダーインクルードシステムがあります。よく必要とされるインクルードについては、既存のシェーダーを参照してください。
ユニフォーム
常に利用可能な特別なユニフォーム:
ユニフォーム | タイプ | 説明 |
---|---|---|
viewIndex | uint | 現在レンダリングされているビューのインデックス。 |
その他については、エディターに付属しているシェーダーを参考にしてください。一部はプリプロセッサシンボルによって有効にされた場合のみ利用可能です。