From BlenderWiki

Jump to: navigation, search

2D Filter アクチュエータ

2D Filters are image filtering actuators, that apply on final render of objects. Thanks Social et.al. for FPS_Template. はイメージフィルタのアクチュエータです。最終的にレンダリングイメージに対して適用されます(FPSゲームのサンプル画像を提供してくれた人々に感謝)。

Motion Blur

Motion Blurを使って動きの表現をするには、以前のフレームの情報が必要です。図"2D Filters: Gmae LOgic"はBlenderのウィンドウに表示されたロジックブリックです。

2D Filters: Motion Blur.
2D Filters: Game Logic.

フィルタを有効にするには:

  1. 適切なセンサとコントローラを追加する。
  2. 2D Filterアクチュエータを追加する。
  3. ドロップダウンリストからMotion Blurを選択する。
  4. Value(モーションブラーの度合い)

フィルタを無効にするには:

  1. 適切なセンサとコントローラを追加する。
  2. 2D Filterアクチュエータを追加する。
  3. ドロップダウンリストからMotion Blurを選択する。
  4. Enableボタンを押して無効モードにする。

Pythonコントローラを使ってモーションブラーを有効にすることもできます:

from bge import render
render.enableMotionBlur(0.85)

無効にするには:

from bge import render
render.disableMotionBlur()
Note
グラフィックハードウェアとOpneGLが亜急務レーションバッファをサポートしている必要があります (glAccum関数)。


Built-In 2D Filters

2D Filterアクチュエータで見ることができるフィルタはすべて同じアーキテクチャを用いています。すべての内蔵フィルタは最終的なイメージを生成するためにフラグメントシェーダを使います。よって、ハードウェアがシェーダをサポートしている必要があります。

2D Filters: Motion Blur.
2D Filters: Sepia.
2D Filters: Sobel.

BlurSharpenDilationErosionLaplacianSobelPrewittGray ScaleSepiaInvertが内蔵フィルタとして使えます。これらのフィルタはいくつかのパスで使用できます。

フィルタを使うには:

  1. 適切なセンサとアクチュエータを作成する。
  2. 2D Filterアクチュエータを作成する。
  3. 使用するフィルタ、たとえばBlurを選択する。
  4. フィルタを適用するパスの番号を指定する。

特定のパスでフィルタを削除するには:

  1. 適切なセンサとアクチュエータを作成する。
  2. 2D Filterアクチュエータを作成する。
  3. Remove Filterを選択する。
  4. フィルタを削除するパスの番号を指定する。

特定のパスでフィルタを無効にするには:

  1. 適切なセンサとアクチュエータを作成する。
  2. 2D Filterアクチュエータを作成する。
  3. Disable Filterを選択する。
  4. フィルタを無効にするパスの番号を指定する。

特定のパスでフィルタを有効にするには:

  1. 適切なセンサとアクチュエータを作成する。
  2. 2D Filterアクチュエータを作成する。
  3. Enable Filterを選択する。
  4. フィルタを無効にするパスの番号を指定する。


Custom Filters

2D Filters: Custom Filter.

カスタムフィルタによって、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);
}