陰影が出過ぎて美人度が下がる(?)VF5のキャラクタ描写を注意深く見ていると、光源がこちらに向いている、逆光気味のシーンでは、本来ならば影となるはずのところで、肌の輪郭付近や、衣服の輪郭から光が漏れてくるような表現が見られる。HDRレンダリングの光あふれ出し(ブルーム)とは違う、まるで表面下散乱シミュレーションの結果のような表現のようにも見て取れる。アキラの衣服や腕にも同様の疑似表面下散乱的な効果が見えるNVIDIAの「Luna」デモでは3Dオブジェクトの厚みに配慮した疑似表面下散乱を実装していたハゲキャラにご注目この「逆光テカリ表現」は、「光源位置が逆光気味」なおかつ「その面の法線の向きから判断してその逆光光源を掠めていると判断できる」という一定条件を満たす箇所が、「視線に対して輪郭として光が溢れ出るはず」と判断され、そこを光源色をブレンドして描くということで実現している。平たく言えば、光源がこちらに向かって輪郭を掠めるときは、その輪郭を光源色で塗って光が溢れているようにするということだ。7800シリーズ発表時に公開した「Luna」デモで実装した疑似的な表面下散乱では対象物の厚みに配慮した光の溢れ出しを実装していたが、VF5では、そうした複雑な処理はしていない。VF5のこの「逆光におけるテカリ」は、実質、簡易的な処理なので、イレギュラーなケースではセルフシャドウとして影である部分から光が出てきてしまったり......というエラーがあったという。これもデザイナー側のパラメータ調整で不自然にならない程度に抑えてしまったとのこと。シーン全体としてみるとかなりいい仕上がりになっている。頭、頬、手や首筋といった肌の透き通った感じはもちろん、衣服にも同様の処理が適用されるので、「布がそれほど厚くない」→「柔らかいものなのだろう」というようなイメージとして伝わってくる。山之内氏「この“光の掠め”を味わいたい人はシュンやレイフェイなどのハゲキャラにご注目下さい。液体金属的な質感を持った最後の敵、デュラルについてはやや例外的にスペシャルなシェーダが動いているという。4体いるデュラル・バリエーションの中で出現条件の厳しい2体にそのスペシャルシェーダが使われている。左から、昔ながらの反射デュラル、薄膜デュラル、屈折デュラル、石デュラル1つは薄膜干渉シェーダのデュラル。視線角度や周りの情景によって不思議な異方性の虹色光沢をする質感になっており、この質感表現には描ききりのテクスチャを用いていない。頂点シェーダを用いて光の回折(Diffraction)シミュレーションを実行して、この虹色を算出している。光は色によって波長が違うが、その異なる波長の光同士の干渉をピクセル単位で計算し、その結果から最終的な色を決定している。Texture)の手法を、ある意味、先取りして実装した例といえなくもない。屈折デュラルは、求めた屈折ベクトルに基づいてデュラル以外のレンダリングされているそのフレームからサンプルしてくるだけで実現できてしまっているというわけだ。ちなみに、この2体のデュラルは一定条件を満たさないと見られないようなので、頑張ってプレイしてみて頂きたい。水面の表現に頂点テクスチャリング(VTF)によるディスプレースメントマッピングを使用VF5のグラフィックスで目を惹く要素の1つに水面がある。VF5における水面は大別して2つ。1つは水位の浅い「水たまり」、もう1つは比較的水かさの高い「水辺」だ。水位の低い水たまりについての水面表現は比較的オーソドックスなアプローチになっている。水面への映り込みは、予め用意した低精度の背景を適当な解像度でテクスチャにレンダリングして「反射マップ」(≒環境マップ)を生成。これを適用することで実現している。反射マップに反射モデルを描画した画面。地面テクスチャのα部に、水溜りか水溜りでないかのマスク情報を格納してある左が法線マップ、右がハイトマップ。キャラが発生させる波紋と、雨による波紋が見て取れるこの水たまりの水面には、ただ周囲の背景やキャラクタが映り込んでいるだけでなく、揺れ動く波紋も描かれる。この波紋は、水位の凹凸を表すハイトマップを波動シミュレーションを行なって動的に生成し、ここから法線マップを生成して、これと先ほどの反射マップを両方使って最終的に環境バンプマッピングを実行して実現している。波動シミュレーションというとなにやら難しい響きがあるが、やっていることは基本的にシンプル。具体的にはその時点での水の高さ、速度、力といった要素をテクスチャに格納し、これらの情報から次の状態の水面の高さを計算したテクスチャを生成。この処理はピクセルシェーダにて実行されるのでCPUは介さない。算出された水面の高さの値は凹凸を表したハイトマップテクスチャとして扱い、これを法線マップへと変換して環境バンプマッピングを行なうわけだ。プレイに夢中だとわからないかもしれないが、キャラクタが水面に足を乗せると、その振動で波紋が広がるという演出が凝っている。これはその波動シミュレーション用のテクスチャに対し、そのキャラクタの足跡の形でハンコを押す感じで更新することで影響を与えている。この時の法線マップとハイトマップの状態。2体のキャラの足跡と、雨による波紋が見て取れるVTF水面ステージそして水かさの高い「水辺」では、さらに頂点レベルで水面が上下する波のアニメーションが加わる。Fetching)を使って実現しています」これにはちょっと驚かされた。VTFは現時点ではほとんど使われていない、いわば盲腸的な機能だからだ。VTFとは頂点シェーダからテクスチャを参照できるようにした機能のこと。テクスチャというと画像というイメージがあるが、プログラマブルシェーダ時代に突入してからはテクスチャの使われ方に革新がもたらされ、用途によっては(シェーダプログラムの設計によっては)汎用のベクトルデータ配列として活用されることも多くなってきているのだ。あれば、汎用記憶領域としてピクセルシェーダからだけではなく、頂点シェーダからもテクスチャアクセスを行ないたいという要望が出てくるのも自然な流れ。この要望を具現化したのがVTF機能だ。NVIDIA制作によるVTFによるディスプレースメントマッピングのデモ。6800シリーズが発表された当時、VTFは「SM3.0ならではの待望の機能」として鳴り物入りで紹介された。X1000シリーズがVTF未サポートで登場。ATI対NVIDIAの戦いの果てに、VTFは盲腸機能となってしまったのだ。補足しておくと、ATIはVTF実装を別に拒絶しているわけではない。10世代SM4.0対応GPUではATIもVTFをサポートする事が確実視されている。7800GTXベースなのでVTFはサポートされている。山之内氏「我々にとってターゲットハードウェアはリンドバーグ1本ですから。そのハードウェアをフルに活用すればいい。ないと泣きます(笑)。波動シミュレーションは、32ビット浮動小数点(FP32)テクスチャ上にてピクセルシェーダで行なう。先ほどの「水たまり」では整数テクスチャで波動シミュレーションをやっていたが、水辺の方でFP32テクスチャを用いる。この理由は単純明解で、VTFではFP32テクスチャに限定されているためだ。水面のモデルをワイヤフレーム表示したMaya画面。Mapping)を実行。このFP32波動ハイトマップを法線マップ化して、これを用いてピクセルシェーダで陰影処理を実行。この時にもう一工夫、アイディアが思いついたのだという。加東氏「近所で弁当を買うと味噌汁が付いてくるんですが、その味噌汁の入ったカップを揺らしながら思いついたアイディアがあって(笑)。VTFで使ったFP32の波動ハイトマップには波の高さとか速度と力の情報があるので、せっかくだからピクセル単位のライティング時に、この情報を活用して濃淡を与えて濁りとか透き通っている感じを出しました。11世代以降に実装の可能性有り)、VTFでディスプレースメントマッピングを適用する際には、その3Dモデル側の頂点数(このケースでは水面の頂点数)を予め分割しておく必要がある。ちなみにVF5では、水面の頂点数は、予め100×100との解像度で分割してある。この「水辺」でも、やはりキャラクタが動くと、波動シミュレーション用テクスチャを摂動させるので、キャラクタの動きにインタラクトされて波が動くことになる。先ほどの水たまりよりもダイナミックに水面が動くので見た目のインパクトはかなり強い。加東氏「蹴り上げた足が水を巻き上げるようなときには水しぶきが発生しますが、これに注目して欲しいです。VTFのおかけで水しぶきの衝突をテクスチャを使って頂点シェーダで検出できるんですよ。水しぶきの1つ1つが着水するとそこから波紋が発生するようにしています。水しぶき自体は1個1個がジオメトリを持ったパーティクルで、着水時の水面へのインタラクトは、前述したキャラクタが足で水面をインタラクトする処理と変わらない。波動シミュレーション用のFP32波動ハイトマップの方に着水したシミュレーション用の初期値(高さ、速度、力)を設定すればいい。加東氏の言うように目立たないことかも知れないが、「何となく全体的にリアル」というような、グローバルなリアリティ感を出す効果としては非常に有用なことだと思う。雪原もVTFでやってます!このVTFによるディスプレースメントマッピングは雪原にも応用されている。水面の波のように動きはしないが、雪面をキャラクタの足で踏むと、FP32テクスチャによるハイトマップがキャラクタの足跡形状で押し下げられることになり、結果的に描かれる雪面が足跡の形で凹む......という寸法だ。左が擬似表面化散乱させる前のディフューズ&スペキュラ結果。右が擬似表面化散乱させた後さらに雪の陰影には簡易的な表面下散乱シミュレーションも適用している。技法としてはATIなどが以前発表していたテクスチャスペースのブラーによるものだ。雪原に照射される光量(実質的にはテカリ、スペキュラ)をテクスチャにレンダリングし、テクスチャ座標系でブラーさせてぼやかす処理を行なう。言い換えると、雪原の凹凸に当たっている光沢を真上から撮影してその画像をぼやかすような処理を行なうイメージだ。踏み荒らされてぐっしょりした感じになっているのが伝わってくる踏まれていない雪面はキラキラと輝いて新雪な感じを表し、踏まれて低くなった雪面はいわば踏まれて“ぐしゃっ”としたシャーベット状になって汚れている感じを表しているわけだ。セガのVTF活用はせかいいちぃぃ!?山之内氏「VTFはもう活用しまくりましたね」フォグステージVTFはフォグ表現にも応用されている。これはちょっとピンとこないかも知れない。一般的なフォグは視点から遠くなる情景を曇らせるような距離フォグだろう。これとは別ケースで、“もや”や煙が立ちこめていたり、またそれが風で流れているような表現をする場合には、半透明の“もや”テクスチャや煙テクスチャを貼り付けたパーティクル(スプライト)を重ね描きしたり動かしたりする。この手法だとそれっぽく見えるが、半透明の重ね書き負荷がかかるのと、他3Dモデルと重なったときに鋭く切り取られエッジが露呈してしまう。そこでVF5ではユニークな「VTFフォグ」なるものを考案して実装した。水辺の水面処理では、水面の高さをグレースケールで表しハイトマップとして活用されていたFP32テクスチャを、VTFフォグでは、霧の濃淡情報を管理する。霧の濃淡の分布をFP32テクスチャで表してやるのだ。チーム内ではこれを「フォグマップ」と呼んでいたそうだ。そのテクスチャをVTFフォグとして適用したファイナルショット実際のレンダリングでは、水辺の水面のようにステージフィールドに対して平行で水平に見えない面を配置し、この見えない水面の各頂点から、そのフォグマップに対してVTFを参照し、取り出した値を「フォグの濃さ」として、その頂点カラーを決定してやる。VTFでフォグマップから取り出した値で高さフォグ(Yフォグ)の処理を頂点単位で実行してやるのだ。この方法ならば、求めたフォグ色を最終的なカラー算出時に線形合成を1回やればよく、半透明の重ね描きは全く不要となる。比較的安い処理で、複雑な霧の濃淡をフィールド上に展開できるというわけだ。このフォグマップをスクロールさせれば、複雑な濃淡の霧が風で流れているように見せられる。加東氏「それだけじゃないんですよ。理屈はキャラクタが水面に影響を及ぼしたときと同じで、キャラクタの行動に応じてフォグマップを摂動してやるわけだ。山之内氏「まあ、吹き飛んだ“モヤ”は、また自動的にまた流れて来て補充されるようなフォグマップアニメーションを適用していますけどね」キャラの周辺のフォグが徐々に晴れていく。ダウンした場所のフォグも吹き飛ぶ。Rendering)だ。VF5でも、当然HDRレンダリングを実装しており、レンダーターゲットバッファはαRGB各16ビット浮動小数点(FP16)の64ビットバッファ(以下FP16-64ビット)を採用している。