Doc:JA/2.6/Manual/Game Engine/Logic/Actuators/2D Filters
2D Filter アクチュエータ
2D Filterはイメージフィルタのアクチュエータです。最終的にレンダリングイメージに対して適用されます(FPSゲームのサンプル画像を提供してくれた人々に感謝)。
2D Filter の種類
- 次のフィルターが用意されています
- Custom Filter
- Invert
- Sepia
- Gray Scale
- Prewitt
- Sobel
- Laplacian
- Erosion
- Dilation
- Sharpen
- Blur
- Motion Blur
- Remove Filter
- Disable Filter
- Enable Filter
- どのフィルターもパラメータはひとつだけです
- Pass Number
- フィルターを使うパス番号
- フィルターの詳細については以下の説明をご覧ください。
Motion Blur
(モーションブラー)
Motion Blur を使って動きの表現をするには、以前のフレームの情報が必要です。図"2D Filters: Gmae Logic"はBlenderのウィンドウに表示されたロジックブリックです。
フィルタを有効にするには:
- 適切なセンサとコントローラを追加する。
- 2D Filterアクチュエータを追加する。
- ドロップダウンリストからMotion Blurを選択する。
- Value(モーションブラーの度合い)
フィルタを無効にするには:
- 適切なセンサとコントローラを追加する。
- 2D Filterアクチュエータを追加する。
- ドロップダウンリストからMotion Blurを選択する。
- Enableボタンを押して無効モードにする。
Pythonコントローラを使ってモーションブラーを有効にすることもできます:
from bge import render render.enableMotionBlur(0.85)
無効にするには:
from bge import render render.disableMotionBlur()
註釈
グラフィックハードウェアとOpneGLがアキュムレーションバッファをサポートしている必要があります (
glAccum 関数)。 |
Built-In 2D Filters
(組み込みの2次元フィルター)
2D Filterアクチュエータで見ることができるフィルタはすべて同じアーキテクチャを用いています。すべての内蔵フィルタは最終的なイメージを生成するためにフラグメントシェーダを使います。よって、ハードウェアがシェーダをサポートしている必要があります。
Blur、Sharpen、Dilation、Erosion、Laplacian、Sobel、
Prewitt、Gray Scale、Sepia、Invertが内蔵フィルタとして使えます。これらのフィルタはいくつかのパスで使用できます。
フィルタを使うには:
- 適切なセンサとアクチュエータを作成する。
- 2D Filterアクチュエータを作成する。
- 使用するフィルタ、たとえばBlurを選択する。
- フィルタを適用するパスの番号を指定する。
特定のパスでフィルタを削除するには:
- 適切なセンサとアクチュエータを作成する。
- 2D Filterアクチュエータを作成する。
- Remove Filterを選択する。
- フィルタを削除するパスの番号を指定する。
特定のパスでフィルタを無効にするには:
- 適切なセンサとアクチュエータを作成する。
- 2D Filterアクチュエータを作成する。
- Disable Filterを選択する。
- フィルタを無効にするパスの番号を指定する。
特定のパスでフィルタを有効にするには:
- 適切なセンサとアクチュエータを作成する。
- 2D Filterアクチュエータを作成する。
- Enable Filterを選択する。
- フィルタを無効にするパスの番号を指定する。
Custom Filters
(カスタムフィルター)
カスタムフィルタによって、GLSLを使って好きな2Dフィルタを定義することができます。使い方は内蔵フィルタと同じですが、2D FilterアクチュエータでCustom Filterを選択する必要があります。そしてテキストエディタでシェーダプログラムを書き、アクチュエータにスクリプト名を設定します。
青セピアの例:
uniform sampler2D bgl_RenderedTexture; void main(void) { vec4 texcolor = texture2D(bgl_RenderedTexture, gl_TexCoord[0].st); float gray = dot(texcolor.rgb, vec3(0.299, 0.587, 0.114)); gl_FragColor = vec4(gray * vec3(0.8, 1.0, 1.2), texcolor.a); }