GLSL の詳細
PlayCanvas エンジンで使用される GLSL シェーダーは、特定の要件を満たす必要があります。これらの要件により、エンジンはシェーダーを正しく統合し、attributes、uniforms、varyings などの必要なリソースを確実に受け取れるようにします。これらの規則に従うことで、WebGPU で使用するために WGSL にトランスパイルする際に、わずかに異なる要件に対応できるようシェーダーを自動的に処理することもできます。
以下のセクションでは、PlayCanvas 用の GLSL シェーダーを作成する上での主要な側面を概説します。
#version
はシェーダーソースに含めるべきではありません。PlayCanvas は、WebGL2 または WebGPU がターゲットになっているかどうかに基づいて、適切なバージョンディレクティブを自動的に追加します。
アトリビュート
アトリビュートは、頂点ごとの入力データを定義します。それらは以下の構文を使用して宣言する必要があります。
attribute vec2 aUv0;
アトリビュート名は、ShaderMaterial を作成する際に attributes
プロパティで指定された名前と一致する必要があります。
in
キーワード (GLSL 3.3+ で導入) はサポートされていません。
ユニフォーム
ユニフォームは、エンジンからシェーダーにリソースを渡すために使用されます。それらは、数値およびテクスチャユニフォームに対して標準的な方法で宣言されます。
uniform vec3 view_position;
エンジンは、レンダリング時に適切なユニフォーム値を自動的に設定します。
ベアリアブル
ベアリアブルは、頂点シェーダーからフラグメントシェーダーに値を渡すために使用されます。それらは標準的な GLSL 構文を使用して宣言する必要があります。
varying vec2 uv0;
in
/out
構文 (GLSL 3.3+ で導入) はサポートされていません。