ゲームエフェクトマニアックス

モーションブラー

ゲームエフェクトマニアックス (C MAGAZINE)

ゲームエフェクトマニアックス (C MAGAZINE)

買いまちた。
ただ、マニアックス…ではないと思いますが。
3Dゲームを作る際に「使える」エフェクトを集めたものですね。
 
内容のレベルとしては、t-potさんのシェーダープログラミングブックが理解できるなら、
この本はたぶん必要ないと思います。
 
ただ、kenmoは3Dゲーム素人なので、なかなか使える本だと思いました。
とにかく内容が分かりやすい、っていうのがいいと思いました。
 
あと、3Dでなくても使えるエフェクトもいくつか(モーションブラーやモザイク、火花、煙など)あるので、
2Dゲーム製作者にも役に立つと思います。

Pygameでモーションブラー

で、早速モーションブラーを作成。
 
モーションブラーの原理は、
現在の描画内容をテンポラリに取っておいて、
次回描画時にテンポラリをアルファブレンドする、
だけです。
 
Pygameを使うとこんな感じ。

// ゲームループ
while(True):
    // 一連の描画処理
    …
    screen.blit(tmpSurface, (0, 0)) // スクリーンに描画
    tmpSurface.blit(screen, (0, 0)) // テンポラリに確保
    tmpSurface.set_alpha(192)       // アルファ値を設定

アルファブレンドが使えれば、なんにでも使えますね。
 
ただ、使いどころが結構難しいかもしれません。
kenmoがなんとなく思いついた感じでは、、

  • シーン切り替え(戦闘シーンに突入するときなどに回転させながら)
  • 必殺技発動

とか。
…ありがちですが、、(´Д`;
 
なんというか、モーションブラーは、やりすぎるとくどいので、
アクションゲームとかだと、
残像を残す(前フレームの座標を保持しておいてアルファブレンドする)
ほうがいいですね。
 
あと、

  • 画面全体に動きがないと意味がない
  • 小さいオブジェクトにモーションブラーがかかっていても目立たない

ということがあるので、そういった場合は、モーションブラーは避けたほうがいいかもしれません。

Pygameでモザイク

以前、サーフェースのピクセルにアクセスしてモザイクをかける方法を試していたのですが、
それだと速度的に使えないので、
拡大縮小を使ってモザイクをかけるほうがいいみたいですね。
 
Pygameでのサンプルです。

    // スクリーンサイズを(640, 480)とする
    // テンポラリに1/16に縮小描画
    tmpSurface = pygame.transform.scale(
        self.screen,
        (640/16, 480/16))
    // 元のサイズに拡大描画
    self.screen.blit(
        pygame.transform.scale(tmpSurface, (640, 480)),
        (0, 0))