ジオメトリシェーダを活用した新表現(1)~モーションブラー

ジオメトリシェーダの活用方針の二つ目、「ジオメトリシェーダを活用した新表現」とは、ジオメトリシェーダを用いることで、これまでのGPUでは難しかった表現を行えるようにするものになる。

徐々にユニークなテクニックが登場し始めているが、ここでは最も基本的なものを紹介したい。

比較的、実装がシンプルで、効果の大きいのがジオメトリシェーダを活用したモーションブラーだ。

実は、ジオメトリシェーダを使ったモーションブラーにはいくつかの種類がある。ここではそのうち3パターンを紹介する。

まずはモーションブラーとは何か。この基本を整理しておこう。

リアルタイムのコンピュータグラフィックスは、ある意味、シャッター速度1/∞秒のカメラで撮影しているのと同じであるために、どんなに被写体が高速で動いていても、生成したフレームがボケることはない。これが「いかにもCG」っぽさになっていることも事実で、これをまるでカメラで撮影したような、フォトリアリスティックに見せようと、速い動きに対して"ブレ"のエフェクトを付加するテクニックを「モーションブラー」と呼んでいる。

モーションブラーの副次的効果として、表示フレームレートが一定を維持できなくても、見た目的に分かりにくくする効果もあるため、最近では多くの3Dゲームなどで採用されるようになってきている。

結局、モーションブラーとは、どのような手法で"ブレ効果"を描画していくか……がキーポイントになってくる。

最も基本的なのは、映像フレーム全体に一様にかけてしまう「カメラブラー」だ。

これは、現在の描画フレームを、視点(カメラ)の移動ベクトルにしたがった形で拡大縮小、あるいは回転などを施して、半透明にて重ね描き合成することで実現できる。

このカメラブラーはレースゲームのような画面全体が動くことを主としたケースにはうまくはまる。馬で走ったり、動き回る巨像にぶら下がる、カメラ全体がドラスティックに動くアクションが際だっていたPS2用「ワンダと巨像」とではこの手法を活用し、非常に高い効果を得ていた。

横方向の2次元的な処理のカメラーブラーの概念図

元フレーム(左)とブラー処理したフレーム(右) ※「ワンダと巨像」より引用

奥行き方向の2次元的な処理のカメラーブラーの概念図

元フレーム(左)とブラー処理したフレーム(右) ※「ワンダと巨像」より引用

しかし、このカメラブラーでは、シーン内に存在する1つ1つの3Dオブジェクトが、バラバラに、任意の速い動きを行ったきの、その動きそれぞれにつじつまのあったブラーを出すことができない。これはカメラブラーが表示フレーム(2D映像)を画像処理しただけの「2Dブラー」だからだ。

後に紹介する3つのモーションブラー手法は、それぞれのキャラクター達に個別の立体的なブラーが出せる、いわば3次元ベースのモーションブラーを実現する。そして、この3次元的なブレの生成にジオメトリシェーダを用いることになるのだ。

そのキャラクタの動きにブラーを施す「アクション・ブラー」

キャラクタがパンチやキックなどの高速アクションを行った際に起こるブラー表現に適した技法だ。あえて命名するならば「アクション・ブラー」といった感じの技法になる。最近では「オブジェクト・モーション・ブラー」(OMB)と呼ばれることも多い。

この技法では、3Dのキャラクタの頂点情報に速度ベクトル(速さ、動く方向)の値を持たせ、この情報を元に、ジオメトリシェーダで頂点を引き伸ばすようなイメージでポリゴンを新規に生成する。なお、その動きの過去の軌跡だけでなく、未来の進行方向にもポリゴンを生成するのがミソだ。

ジオメトリシェーダを活用して、動いている速度とその向きにポリゴンを生成。現在位置を中心に、過去の軌跡と未来の軌道にも生成してやるのがミソ

そして、生成したポリゴンに対して、現在を基準として、遠く離れれば離れているほどα値(透明度0~1の値を取り、0が完全に透明、1が完全に不透明)を低くするように設定する。このα情報は近似的には「画面上における各ピクセル単位の速度情報分布に相当する」と見なすことができるので、元のポリゴンに貼り付けるテクスチャに対し、この情報に従ってずらしてテクセルを参照してやり、テクスチャを適用していく。現在時間から遠ければ遠いほど、α値がゼロ(透明)に近づくのでサンプルしたテクセルの色は薄く合成される。これにより一番過去と一番未来のピクセルは薄く、現在に近いほど濃く……といった描画になり、速度感が演出できることになる。(続く)

現在位置から遠ければ遠いほどα値はゼロに。これは近似的に画面上におけるピクセル単位の速度を表していることになる。この値をオフセット値にして、テクスチャからサンプルしてブラーを表現する

マイクロソフト、DirectX 10のデモより。風車は常に等速回転運動をし、モンスターは格闘アクションを披露。それぞれの速度と向きに応じたブラーがちゃんと出ている点がカメラブラーとは大きく異なる点

(トライゼット西川善司)