OpenGL Particle Shader(OpenGL パーティクル シェーダ)

 
 
 

[OGL パーティクル シェーダ タイプ](OGL Particle Shader Type) | タイプ(プリミティブ) | タイプ(HW 高速化 スプライト) | タイプ(ビルボード) | タイプ(速度ベクトル) | タイプ(密度) | タイプ(線の軌跡) | ライティングとブレンド | Render Tree の使い方

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

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

出力: リアルタイム

OpenGL パーティクル シェーダを使用すると、OpenGL ディスプレイ モードに設定されている 3D ビューでパーティクルのリアルタイム シェーディングが可能になります。このリアルタイム パーティクル シェーダは、1 つのノード内で複数のシェーダ タイプを実装します。各シェーダ タイプは、さまざまなリアルタイム エフェクトをパーティクル クラウドに適用します。

注:OpenGL パーティクル シェーダは、Softimage で独自のリアルタイム パーティクル シェーダを記述することで表示属性をオーバーライドするためのお手本になります。OpenGL Particle シェーダのソース コードは<Install_Path>¥XSISDK¥examples¥realtimeshader¥Particles¥OGLから入手することができます。

タイプ(プリミティブ)

シェーダタイプ(Shader Type)

[プリミティブ](Primitive): 各パーティクル ポイントを、球、雪片、立方体などの特定のプリミティブ タイプとして描画します。

プリミティブ

プリミティブタイプ(Primitive Type)

パーティクルを描画するのに使用するプリミティブのタイプを指定します。[ポイント]、[立方体]、[球(ソリッド)]、[球(ワイヤフレーム)]、[雪片]、[破片]、[四角形]、または[矢印]を選択できます。

ポイント サイズ(Point Size)

ポイント プリミティブのサイズ(幅)をピクセル単位で設定できます。デフォルトは 1.0 です。

[プリミティブタイプ](Primitive Type)が[ポイント]に設定されているときに設定できます。

ポイントのスムース(Smooth Point)

プリミティブ アンチエイリアスを有効にします。

[プリミティブタイプ](Primitive Type)が[ポイント]に設定されているときに設定できます。

速度に応じてストレッチ(Stretch Along Velocity)

各パーティクルの速度ベクトルの長さに応じてプリミティブをストレッチします。

[プリミティブタイプ](Primitive Type)が[立方体]、[球(ソリッド)]、[球(ワイヤフレーム)]、[雪片]、[破片]、[四角形]、または[矢印]に設定されているときに指定できます。

GPU インスタンス使用(Use GPU Instancing)

GPU インスタンスは、特に大きなパーティクル クラウドなどでレンダリングの速度を倍にすることができる GPU を使用してパーティクルを変換する方法です。CPU でプリミティブの頂点を変換する(基本的に各パーティクルを配置してからインスタンスをレンダリングする)代わりに、GPU はインスタンスをレンダリングしてから、頂点の属性として位置を渡します。パーティクルの位置は、頂点シェーダで取得され、変換されます。

無効の場合、プリミティブは CPU でインスタンスを変換する従来の方法でレンダリングされます。

[プリミティブタイプ](Primitive Type)が[立方体]、[球(ソリッド)]、[球(ワイヤフレーム)]、[雪片]、[破片]、[四角形]、または[矢印]に設定されているときに指定できます。

カスタムフラグメントシェーダ(Custom Fragment Shader)

フラグメント シェーダのコードを入力するテキスト エディタを開きます。ここでは、パイプラインの固定機能部分を、ユーザ独自のカスタム フラグメント シェーダ コードで上書きできます。

[プリミティブタイプ](Primitive Type)が[立方体]、[球(ソリッド)]、[球(ワイヤフレーム)]、[雪片]、[破片]、[四角形]、または[矢印]に設定されているときに指定できます。

フラグメント シェーダ(Fragment Shader)

テキスト エディタ ウィジェットでは、テキストのカスタマイズ(フォント、カラー、サイズ)、構文スタイリング、折りたたみ(関数やサブルーチンなどのブロックを非表示にする機能)、自動入力、およびキーワードのハイライトがサポートされています。

このテキストエディタウィジットをユーザ独自のプラグインに実装する場合は、「Text Editor Widget」『SDK ガイド』を参照してください。

スプライト設定

スプライトレイアウト(Sprite Layout)

スプライトとしてテクスチャを使用する場合は、イメージ全体をタイル(シングル)として使用するか、テクスチャを 2x2、3x3、4x4、または 8x8 のタイルに分割することができます。テクスチャの座標は、このオプションで指定されたタイル部分のみが使用されるように更新されます。

これは、複数イメージのテクスチャ(以下のイメージなど)を使用して、スプライトにテクスチャ アニメーションを作成する場合に特に便利です。

タイプ(HW 高速化 スプライト)

シェーダタイプ(Shader Type)

[HW 高速化スプライト](HW Accelerated Sprites): 各ポイント位置に OpenGL ハードウェアの高速化ポイント スプライトを描画します。

プリミティブ

ポイント サイズ(Point Size)

ポイント プリミティブのサイズ(幅)をピクセル単位で設定できます。デフォルトは 1.0 です。

スプライト設定

ポイントサイズ最小

減衰された最小ポイント サイズを設定します。デフォルトは 0.0 です。ゼロ未満の値は無効です。

注: 最大ポイント サイズよりも大きい最小ポイント サイズを設定した場合、ポイント サイズは未定義の状態になります。

ポイントサイズ最大(Point Size Max)

減衰された最大ポイント サイズを設定します。ゼロ未満の値は無効です。

フェードしきい値(Fade Threshold)

アルファ減衰のしきい値を設定します。この設定を行うと、指定されたしきい値よりポイント幅が低い場合にポイント アルファがフェードします。ゼロ未満の値は無効です。

減衰(Attenuation)

減衰は、ポイントの表示サイズが距離の関数として減少するエフェクトです。各ポイントには、ポイントサイズが計算されたときに考慮されるコンスタント、リニア、およびクワドラティック減衰係数があります。

コンスタント(Constant)

ポイントのサイズが、コンスタントの距離による減衰に応じて変化するようにします。

リニア(Linear)

ポイントのサイズが、リニアの距離による減衰に応じて変化するようにします。

クワドラティック(Quadratic)

ポイントのサイズが、クワドラティックの距離による減衰に応じて変化するようにします。

タイプ(ビルボード)

シェーダタイプ(Shader Type)

[ビルボードスプライト](Billboard Sprites): OpenGL ポイント ストライプ エクステンションを使用して、各ポイント プリミティブのビルボード スプライトを描画します。このシェーダは、ハードウェア高速化スプライト シェーダと似ています。ただし、ビルボード スプライトは CPU で拡張された後、GPU に送信されます。つまり、スプライトのサイズは、表示角度にかかわらず同じになります。

スプライト設定

スプライトレイアウト(Sprite Layout)

スプライトとしてテクスチャを使用する場合は、イメージ全体をタイル(シングル)として使用するか、テクスチャを 2x2、3x3、4x4、または 8x8 のタイルに分割することができます。テクスチャの座標は、このオプションで指定されたタイル部分のみが使用されるように更新されます。

これは、複数イメージのテクスチャ(以下のイメージなど)を使用して、スプライトにテクスチャ アニメーションを作成する場合に特に便利です。

タイプ(速度ベクトル)

シェーダタイプ(Shader Type)

[速度ベクトル](Velocity Vectors): 各ポイント プリミティブの後ろのライン(パーティクルの速度に応じた長さ)を描画します。

スプライト設定

スプライトレイアウト(Sprite Layout)

スプライトとしてテクスチャを使用する場合は、イメージ全体をタイル(シングル)として使用するか、テクスチャを 2x2、3x3、4x4、または 8x8 のタイルに分割することができます。テクスチャの座標は、このオプションで指定されたタイル部分のみが使用されるように更新されます。

これは、複数イメージのテクスチャ(以下のイメージなど)を使用して、スプライトにテクスチャ アニメーションを作成する場合に特に便利です。

タイプ(密度)

シェーダタイプ(Shader Type)

[密度](Density): 各ポイントを描画し、カラーとしてエンコードされたクラウドの密度を表示します。各ポイントで、密度シェーダは隣接するパーティクルの距離をチェックし、[密度減衰](Density Falloff)および[密度制限](Density Limit)に応じて[低密度](Sparse)または[高密度](Dense)カラー設定を使用してポイントをシェーディングします。このシェードは、パーティクル クラウドの密度を視覚化するときに便利です。

プリミティブ

ポイント サイズ(Point Size)

ポイント プリミティブのサイズ(幅)をピクセル単位で設定できます。デフォルトは 1.0 です。

ポイントのスムース(Smooth Point)

プリミティブ アンチエイリアスを有効にします。

密度フィールド

密度減衰(Density Falloff)

[高密度](Dense)カラーから[低密度](Sparse)カラー(およびその逆)にパーティクル カラーをブレンドするレートを設定します。

密度制限(パーティクル数で)(Density Limit (in # of particles))

(隣接するパーティクルへのハードコーディングされた距離に基づいて)相互への近接が高密度と見なされるパーティクルの数を設定します。

低密度(Sparse)

相互への近接に関して低密度と見なされるパーティクルをシェーディングするカラーを設定します。

高密度(Dense)

相互への近接に関して高密度と見なされるパーティクルをシェーディングするカラーを設定します。

タイプ(線の軌跡)

シェーダタイプ(Shader Type)

[線の軌跡](Line Trails): パーティクル トレイルを線として描画します。

プリミティブ

GPU インスタンス使用(Use GPU Instancing)

GPU インスタンスは、特に大きなパーティクル クラウドなどでレンダリングの速度を倍にすることができる GPU を使用してパーティクルを変換する方法です。CPU でプリミティブの頂点を変換する(基本的に各パーティクルを配置してからインスタンスをレンダリングする)代わりに、GPU はインスタンスをレンダリングしてから、頂点の属性として位置を渡します。パーティクルの位置は、頂点シェーダで取得され、変換されます。

カスタムフラグメントシェーダ(Custom Fragment Shader)

フラグメント シェーダのコードを入力するテキスト エディタを開きます。ここでは、パイプラインの固定機能部分を、ユーザ独自のカスタム フラグメント シェーダ コードで上書きできます。

フラグメント シェーダ(Fragment Shader)

テキスト エディタ ウィジェットでは、テキストのカスタマイズ(フォント、カラー、サイズ)、構文スタイリング、折りたたみ(関数やサブルーチンなどのブロックを非表示にする機能)、自動入力、およびキーワードのハイライトがサポートされています。

このテキストエディタウィジットをユーザ独自のプラグインに実装する場合は、「Text Editor Widget」『SDK ガイド』を参照してください。

ライティングとブレンド

OpenGL ライティング使用(Use OpenGL Lighting)

ライティングのオン/オフを切り替えます。GL ライティングは、各頂点の 1 次および 2 次カラーを生成します。有効な光源からのエフェクトは、サーフェイス マテリアル プロパティと組み合わせて使用され、特定の頂点のライト カラーを特定します。

ブレンド

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 は可能性が最も高いアルファ値)にクランプされます。

Render Tree の使い方

ここでは、OGL パーティクル シェーダを使用した一般的な Render Tree の設定について説明します。