GLSL シェーダ

 
 
 

| プログラム | 描画 | プリセット

カテゴリ:[リアルタイム]>[OpenGL]

シェーダ ファミリ: リアルタイム

出力: リアルタイム

高度な OpenGL Shading Language(GLSL)を使用して完全なプログラムを作成します。頂点シェーダおよびフラグメント シェーダは、単一の GLSL シェーダ ノード内の「エンティティ」として定義できます。このシェーダを操作する方法については、「統合Unified GLSLプログラムの設定」(「リアルタイム シェーダ」)を参照してください。

プログラム

ビルド(Build)

GLSL プログラムの[ビルド]オプションを設定します。

  • [無効](Disable)プログラムを無効にします。

  • [コンパイルのみ](Compile): プログラムを実行せずにコンパイルします。

  • [コンパイルと実行](Compile and execute) プログラムをコンパイルして実行します。

デバッグメッセージ(Debug messages)

デバッグ メッセージを有効にします。コンパイル結果は、ログに記録され、スクリプト エディタのログ ウィンドウから確認できます。

スクリプト エディタを表示するには、Softimage インタフェースの下部にあるスクリプト アイコンをクリックします。

GLSL の頂点プログラムとフラグメント プログラム

適切なテキスト エディタに頂点シェーダおよびフラグメント シェーダのコードを入力します。[プリセット]タブからは、プリセット シェーダの 1 つをロードすることもできます。

テキスト エディタでは、テキストのカスタマイズ(フォント、カラー、サイズ)、構文スタイリング、折りたたみ(関数やサブルーチンなどのブロックを非表示にする機能)、自動入力、およびキーワードの強調表示がサポートされています。このテキスト エディタ ウィジェットを独自のプラグインに実装することもできます。詳細については、テキストエディタウィジット『SDK ガイド』を参照してください。

描画

描画オペレーションは GLSL プログラム シェーダ内で直接処理されるため、Render Tree で GLSL プログラム ノードを描画ノードに接続する必要はありません。

ブレンド

RGBA モードでは、ピクセルは関数(glBlendFunc)を使用して描画されます。この関数は、入力される(ソース)RGBA 値をフレーム バッファ(デスティネーション値)に既にある RGBA 値とブレンドします。詳細については、「ブレンド機能の動作」を参照してください。

ブレンド使用(Use Blending)

ブレンドを有効または無効にします。有効の場合、ブレンド関数はブレンドのオペレーションを定義します。

[BlendScr]

ブレンド ソース係数(sfactor)は、ソース カラー コンポーネントのスケーリングに使用される方法を指定します。

ドロップダウン メニューからサポートされている方法を 1 つ選択します。各方法は、4 つのスケール係数(それぞれ赤、緑、青、アルファ)を定義します。すべてのスケール係数の範囲は[0,1]になります。

[BlendDest]

ブレンド デスティネーション係数(dfactor)は、デスティネーション カラー コンポーネントのスケーリングに使用される方法を指定します。

ドロップダウン メニューからサポートされている方法を 1 つ選択します。各方法は、4 つのスケール係数(それぞれ赤、緑、青、アルファ)を定義します。すべてのスケール係数の範囲は[0,1]になります。

アルファ テスト

アルファ テスト(glAlphaFunc)は、入力フラグメントのアルファ値と定数参照値を比較した結果によって、フラグメントを破棄します。アルファ テストは、参照値と比較方法を指定します。比較はアルファ テストが有効な場合にのみ実行されます。

アルファ関数およびアルファ リファレンスは、ピクセルが描画される条件を指定します。入力アルファ値は、[アルファ関数](AlphaFunc)で指定された関数によって[アルファ リファレンス](AlphaRef)と比較されます。値が比較され、続くステンシルおよび深度バッファ テストにも渡された場合、入力フラグメントが描画されます。値が比較に失敗した場合、そのピクセル位置のフレーム バッファでは変更は行われません。

アルファ テストは、すべてのピクセル記述オペレーション(ポイント、ライン、ポリゴン、ビット マップのスキャン変換、およびピクセル描画およびコピー オペレーションのこれらの結果を含む)で行われます。スクリーンのクリア オペレーションには影響しません。

注:アルファ テストは、RGBA モードでのみ実行されます。

アルファ テスト実行(Perform Alpha Testing)

アルファ テストを有効または無効にします。

[AlphaFunc]

アルファ比較方法(func)を指定します。

ドロップダウン メニューからサポートされている比較方法を 1 つ選択します。関数は次のように定義されます。

  • ¥GL_NEVER

    渡しません。

  • GL_LESS

    入力アルファ値が参照値より低い場合に渡します。

  • GL_EQUAL

    入力アルファ値と参照値が同じ場合に渡します。

  • GL_LEQUAL

    入力アルファ値が参照値と同じかそれ以下の場合に渡します。

  • GL_GREATER

    入力アルファ値が参照値より高い場合に渡します。

  • GL_NOTEQUAL

    入力アルファ値が参照値と異なる場合に渡します。

  • GL_GEQUAL

    入力アルファ値が参照値と同じかそれ以上の場合に渡します。

  • GL_ALWAYS

    常に渡します。

[AlphaRef]

入力アルファ値が比較された参照値(ref)を指定します。この値は範囲[0,1](0 は可能性が最も低いアルファ値、1 は可能性が最も高いアルファ値)にクランプされます。

パーティクル クラウド

ポイント スプライトの使用(Use Point Sprites)

OpenGL ポイント ストライプの使用を有効にします。ポイント ストライプと呼ぶテクスチャによって、各ポイント位置で自由な形状で描画します。このシェーダがポイント クラウドに適用されている場合は、ポイントの代わりにストライプがレンダリングされます。

プリセット

パーティクル クラウド

デフォルトシェーダ(Default Shader)

ftransform()関数を使用した現在のモデルビュー マトリクスによって入力頂点を変換するシンプルな GLSL シェーダです。これは固定機能を使用したポイントの変換に相当します。

カラー+サイズ シェーダ(Color + Size Shader)

パーティクル クラウドをさまざまなサイズのカラー ポイントのセットとしてレンダリングします。カラーとサイズの両方とも ICE ツリーの初期化された属性である必要があります。「ICE ツリーでデータを取得し設定する」(「ICE の基本」)を参照してください。

時系列シェーダ(Age Shader)

時系列に応じてざまざまなサイズおよびカラーのポイントとして、パーティクル クラウドをレンダリングします。

速度シェーダ(Velocity Shader)

各パーティクルの速度に応じてさまざまなカラーのポイントとして、パーティクル クラウドをレンダリングします。

このシェーダは PointVelocity ICE 属性を取り、法線レジスタに挿入します。次に、頂点シェーダはベクトルの長さを取り、l_fAbsVel(絶対速度)と呼ばれる浮動小数値を挿入します。このシェーダは次にその値を使用して、各パーティクルの赤成分を処理します。

三角形メッシュ

ポイント ライト シェーダ(Point Light Shader)

ポイント ライト ソースを実装する頂点およびフラグメント シェーダ。

スポット ライト シェーダ(Spot Light Shader)

スポット ライト ソースを実装する頂点およびフラグメント シェーダ。

球面調和関数(Spherical Harmonics)

球面調和関数ライティングを実装する頂点およびフラグメント シェーダ。

Advanced(アドバンス)

グラフィック ハードウェアには通常、標準および汎用の頂点属性を渡すための少数の固定位置があります。したがって、OpenGL Shading Language は、最大 4 つの浮動小数値(vec4)用にスペースを空けて、各非マトリクス属性の変数を定義します。使用できる属性の変数の数には、実装に依存した制限があります。この値を超えると、リンク エラーが発生します。ただし、宣言されているが使用されていない属性の変数はこの制限にはカウントされません。浮動小数属性では、この制限に対して vec4 として同じ数がカウントされるので、属性のパッキング テクニックを使用することもできます。4 つの関連のない浮動小数属性を 1 つの vec4 にグループ化して、基本ハードウェアの機能の利便性を高めることができます。Softimage の[GLSL プログラム]シェーダでは、レジスタにマッピングされるマトリクス属性は無視されます。

ハードウェア属性マッピング

 
  • [デフォルト設定](Set Default) [ポリゴンメッシュ](Polygon Mesh)または[パーティクルクラウド](Particle Cloud)を選択して、ポリゴンメッシュまたはポイントクラウドのデフォルトの属性マッピングを設定します。

  • [すべてクリア](Clear All)を選択し、ハードウェア属性マッピング テーブルを空にします。次に、マッピングのエントリを最初から追加します。

 

各リストで使用できる属性とレジスタを更新します。更新は、シェーダによって読み込まれるポリゴン メッシュまたはポイント クラウドに変更を加えた場合に特に便利です。新しい(または最近初期化された)属性が、属性リストに表示されます。レジスタが割り当てられなくなると、レジスタ リストに再び追加されます。

 

属性およびレジスタ マッピング(行)をハードウェア属性マッピング テーブルに追加します。このマッピングを変更するには、まず属性エントリをクリックし、属性リストから使用可能な属性を選択します。次に、対応するレジスタ エントリをクリックし、レジスタ リストから使用可能なレジスタを選択します。

 

ハードウェア属性マッピング テーブルから選択した属性とレジスタ マッピング(行)を削除します。

属性(Attribute)

ハードウェア属性マッピング テーブルの属性の列には、属性エントリが含まれます。各エントリは、ポリゴン メッシュまたはポイント クラウドにある(または作成可能な)0D コンポーネントをそれぞれ表します。

ハードウェア レジスタ(Hardware Register)

ハードウェア属性マッピング テーブルのハードウェア レジスタの列には、レジスタ エントリが含まれます。各エントリは、ほとんどの OpenGL グラフィック アクセラレータで使用可能なレジスタ位置をそれぞれ表します。

レジスタ マッピング情報

頂点属性を渡すのに使用されたエントリ ポイントのファミリ

タイプ

コンポーネント

ハードウェア レジスタ

追加情報

gl_Color

vec4

r、g、b、a

color0

通常は頂点カラーで使用されます。

gl_SecondaryColor

vec4

r、g、b、a

color1

通常は頂点カラーで使用されます。

gl_Normal

vec3

x、y、z

法線

通常は法線座標で使用されます。

gl_Vertex

vec4

x、y、z、w

位置

通常は頂点座標で使用されます。

gl_PointSize

float

x

psize

通常はポイント サイズ(ピクセル)で使用されます。

gl_MultiTexCoord0

vec4

x、y、z、w

texcoord0

通常はテクスチャ座標で使用されます。

gl_MultiTexCoord1

vec4

x、y、z、w

texcoord1

通常はテクスチャ座標で使用されます。

gl_MultiTexCoord2

vec4

x、y、z、w

texcoord2

通常はテクスチャ座標で使用されます。

gl_MultiTexCoord3

vec4

x、y、z、w

texcoord3

通常はテクスチャ座標で使用されます。

gl_MultiTexCoord4

vec4

x、y、z、w

texcoord4

通常はテクスチャ座標で使用されます。

gl_MultiTexCoord5

vec4

x、y、z、w

texcoord5

通常はテクスチャ座標で使用されます。

gl_MultiTexCoord6

vec4

x、y、z、w

texcoord6

通常はテクスチャ座標で使用されます。

gl_MultiTexCoord7

vec4

x、y、z、w

texcoord7

通常はテクスチャ座標で使用されます。

gl_FogCoord

float

x

fogcoord

通常はフォグ座標で使用されます。

glVertexAttrib

short、

float、

int、

double、

unsigned byte、

unsigned short、

unsigned int

x、y、z、w

attr[0...15]

Softimage の GLSL シェーダでは、汎用頂点属性値を attr ハードウェア レジスタに渡す機能はサポートされていません。

エントリ ポイントの glVertexAttrib ファミリを使用して汎用頂点属性を番号が付いた位置に渡している場合は、attr ハードウェア レジスタを利用できるように独自のアプリケーション コード(シェーダ オブジェクト)を記述する必要があります。

glMultiTexCoord[6]

vec4

x、y、z、w

タンジェント

OpenGL には、タンジェント ベクトル用の定義済み頂点属性はありません。

これは、texcoord6 にエイリアスされたタンジェント レジスタに割り当てることができます。

Softimage はタンジェントを 4-float RGBA 頂点カラーにエンコードします。

glMultiTexCoord[7]

vec4

x、y、z、w

従法線

OpenGL には、従法線ベクトル用の定義済み頂点属性はありません。

これは、texcoord7 にエイリアスされた従法線レジスタに割り当てることができます。

Softimage は従法線を 4-float RGBA 頂点カラーにエンコードします。

D3DDECLUSAGE_BLENDWEIGHT

 

x、y、z、w

ウェイト

Softimage の[GLSL プログラム]シェーダでは、値をこれらのレジスタに渡す機能はサポートされていません。ただし、これらのレジスタは、シェーダの開発者がこのシェーダの実装を書き換えて、DirectX ベースの GPU スキニング機能を利用できるようにする事前処理で使用できます。

D3DDECLUSAGE_BLENDINDICES

 

x、y、z、w

インデックス

 

D3DDECLUSAGE_SAMPLE

 

x、y、z、w

サンプル

 

D3DDECLUSAGE_TESSFACTOR

 

x

tessfactor

 

D3DDECLUSAGE_DEPTH

 

x

深度