汚さずにポテチを食べたい。DAZE」のビジュアルテイストを特徴付けているグラフィックステクニックを中心に見ていくことにしよう。DAZE」は、アートコンセプトとして、「フレンチコミックの『バンデシネ』を目指す」ということが目標に設定された。DAZE」では、非常に特徴的なレンダリング手法、シェーディング手法を模索することになる。方針として定まったのは、背景オブジェクト達は、リアル系のライティング&シェーディングを適用し、キャラクターモデル達に対しては、目標とされた「バンデシネ」タッチを実現するための「特別なシェーダー」を適用することだった。【バンデシネ風のイメージイラスト】その「特別なシェーダ」は試行錯誤の上完成する。便宜上、本稿では「バンデシネシェーダー」と呼ぶことにするが、実際には幾つかのシェーディングテクニックの複合技で実現されているものである。基本となる部分は、イメージ的にはトゥーンシェーダーに近いもので、オーソドックスなLambert法による拡散反射のライティング計算をして、その明るさを3階調に分断するような仕組みになっている。この処理の擬似コードを開発チームより頂いたので、下に示しておこう。ディレクショナルライト・ポイントライト・アンビエントライト・カメラライト(カメラ側から当てる光)の影響を受ける。:このままだとただのトゥーンシェーダーですが、我々が目指したのはフレンチコミックのバンデシネスタイルです。バンデシネでは、色の塗り分け方こそトゥーンシェーダー的ですが、ボリューム感、絵画的なタッチ感、ディテール感が乗るんです。これを再現するために各キャラクターに対し、特別なライトを追加で焚いています。我々はこれを「女優ライト」と呼んでいました(笑)。この「女優ライト」とは、「物理的には正しくないかもしれないが、望んだ陰影が出るように意図的に追加の光源を適宜置く」という発想が、本連載「バーチャファイター5」編で紹介した「美人光源」とよく似ている。ちなみに、映画撮影でもこうした見映え重視の追加ライティングはよく行なわれる。【女優ライト】ライティング結果はトゥーンシェーダー調の3階調に落とし込まれる。視点の方から女優ライトが焚かれており、これは中間階調と“陰”の境界をやわらかなグラデーションに仕立てることにも貢献している山口氏:女優ライトはカメラ(視点)方向から当てられています。平行光源のライティングのみだと光源の反対側が常に陰色になります。陰色の部分(3段階の一番暗い部分)はテクスチャ色との乗算ではなくアーティストが指定した色そのものが直接出るようになっており、光源の反対側からキャラクターを見た場合にはこの陰色でつぶれた状態、ディテールがなくなった状態になります。そのため、キャラクターにはカメラ方向から追加の光源(女優ライト)をあてるようにしています。陰色に青っぽい色を直接入れるということもこのキャラシェーディングの特徴1つです。DAZE」のキャラクタービジュアルはこうしたライティング&シェーディングシステムによって実現されていたのだ。DAZE」のグラフィックスにおいて、非常に大きな特徴となっている要素に輪郭線がある。キャラクターや背景に対しリアルタイムに、まるでペンで引いたような線が描き込まれていく様は非常に絵画的だ。これは事前にテクスチャ等に描き込まれているものではなく、特殊なシェーダーによってリアルタイムに生成されている。前もって言っておかなければならないのは、キャラクターに対する輪郭線生成と、背景に対する輪郭線生成はアプローチが異なっているという点だ。キャラクターモデルの輪郭線生成の方から。キャラクターモデルはバンデシネタッチでレンダリングして、キャラクターモデルの実体を描画しているというのは上で解説した通りだ。これに続いて、キャラクターに対する輪郭線生成を行なうのだが、これは頂点シェーダで、そのキャラクターモデルを構成する各頂点をその法線方向に膨張させ、視線方向に向いていないポリゴン(裏面)のみを黒で描画することで実践される。そのキャラクターモデルを膨張させた分が、はみ出て黒く残り、それが輪郭線となるという寸法なのだ。膨張させたキャラクターモデルのポリゴンのうち、視線方向に向いているもの(表面)を描かないのは、そのキャラクターモデルの実体を上書きしてしまわないためだ。欲しいのは「キャラクターモデルの実体」と「輪郭線」なので、原寸の実体モデルからはみ出た膨張モデルの裏面だけを黒で描くわけである。輪郭線描画の際にキャラクターモデルに与える膨張率を固定値にしてしまうと、視点からの遠近で生成される輪郭線の太さが変わってしまうので、そのキャラクターモデルの視点からの奥行き位置と視界画角の値を元にして膨張率を調整している。背景オブジェクトに対する輪郭線描画はこの膨張モデルによる手法は用いられていない。いうのも、この膨張モデルの手法は2パスレンダリングとなり、ポリゴン数が膨大な背景オブジェクトを輪郭線描画のために二度描画することは負荷増大に繋がって得策でないと考えられたためだ。横川裕氏:そこで、レンダリング結果に対してポストエフェクトを適用して輪郭線を生成しています。逆にキャラクターモデルに対して、このポストエフェクトによる輪郭線生成を行なわなかったのは、このポストエフェクトによる輪郭生成が若干ノイジーだからです。背景オブジェクトをレンダリングする際、ピクセルシェーダーは、背景オブジェクトに対するライティング&シェーディングの計算をしてRGBにピクセル色を出力すると共に、一緒に視線ベクトルとそのピクセルの法線ベクトルの内積を計算してその結果をαチャネルに仕込んでレンダーターゲットに書き出すようにする。後段のポストエフェクトの処理フェーズでは、レンダーターゲットのαチャネルに対して、画像処理において古くから活用されるエッジ強調フィルタの1つ「Sobelフィルタ」を適用してやるのだ。視線ベクトルと、レンダリング対象ピクセルの法線ベクトル、その2つのベクトルが織りなす角度が小さいほど、その2つのベクトルの内積値は大きくなり、織りなす角度が大きいほど内積値は小さくなる。隣接する内積値同士の差分が大きい場所が輪郭線と見なせるため、これをSobelフィルタにて強調化して顕在化させてやるのだ。図中の赤矢印が視線ベクトル、黒矢印が視線ベクトルになる。2つのベクトルが織りなす角度が小さいほど、その2つのベクトルの内積値は大きく、織りなす角度が大きいほど内積値は小さくなる。法線と視線の内積を格納したαチャンネルの内容を可視化したショット異なる2つのアプローチで生成された輪郭線とはいえ、最終的な映像を見ても背景とキャラクターの輪郭線の出方には大きな違和感はなく、うまく一体化した形で見えている。左が背景に対する輪郭線生成をオフにしたショット。右が背景に対する輪郭線生成をオンにしたショット。遠景は、背景オブジェクトの実体がほとんど見えずシルエットだけとなり、それに対して、「ペン入れ途中」のような輪郭線だけとなるのが実に味わい深い。RANGE)レンダリングパイプラインが採用されている。HDRレンダリングが適用されているのは背景オブジェクト達のみで、キャラクターモデル達に対しては、HDRレンダリングではなく、ここまでで解説してきたような「バンデシネ」シェーダーが適用されている。DAZE」では、背景とキャラクターは、1つのレンダーターゲットに出力されているため、1つのレンダーターゲット内に異なるアプローチのライティング/シェーディングによる結果が混在することになるのだ。背景はHDRレンダリングされているため、背景は低輝度な領域から超高輝度な領域までをFP16で表現できている。Range)なディスプレイ装置なので、RGB各FP16で表現されたレンダーターゲットを直接表示することはできない。そこでLDR表現に変換する必要があるわけだが、そのメカニズムは特に「トーンマッピング」と呼ばれる。トーンマッピングは、HDRレンダーターゲットの下位ビットをただ切り捨てるような単純な減色処理よりも、HDRレンダリングされたレンダーターゲットの平均輝度を取得して、その平均輝度を基軸にして暗い階調と明るい階調をLDRに圧縮するような非線形減色を適用した方が見映えがリアルになるとされる。これをリアルタイムに実行すれば、まるでカメラの自動露出補正の効果や、あるいは眼球の瞳の絞り機構による暗順応(明→暗への順応)や明順応(暗→明への順応)が再現されたような効果までが得られる。Images」を採用している。これは、簡単に言うと、与えられたHDRフレームの平均輝度を対数次元で求め、この対数平均輝度を基準とし、暗部階調に対しては線形に近い階調を与え、一方、明部に行けば行くほど階調変化が鈍くなるような特性でLDRに変換するアルゴリズムになっている。物理的な正確性はさておき、かなり人間が普段見る情景に近くなることから、算術的なアプローチのトーンマッピング手法としては定番とされているテクニックだ。DAZE」では、この対数平均輝度の計算を、負荷低減のために、32×16テクセルにまで縮小した最終映像フレームに対して行っている。この超縮小版の最終映像フレームは、後述するHDRレンダリング効果の1つである「ブルームエフェクト」にも用いるポストエフェクトのタネ映像生成用ワークバッファに作成される。赤丸で囲んだ部分が対数平均輝度を求めるための超縮小版の最終映像フレームただ、このトーンマッピング処理は、非HDRレンダリングされたバンデシネシェーダーベースのキャラクターモデルに対しては除外する必要がある。DAZE」では、そのフレームレンダリングの際にキャラクターモデルを描画する際に、メインレンダーターゲットと同解像度のステンシルバッファにも同時出力し、これをトーンマッピング処理時のマスクとして使って、描画されたキャラクターモデルに対してはトーンマッピング処理の影響が出ないようにしている。VitaのGPUでも、マスクパターンをステンシルバッファに出力した後、トーンマッピング処理時に直接そのマスク内容をピクセルシェーダで参照することができました。「参照できるできない」はステンシルバッファのフォーマットの種類によって違うようです。DAZE」では、このユニークなトーンマッピングにより、適度な明るいシーンではキャラクターモデルが背景に馴染むことになり、やや暗いシーンではキャラクターモデルの存在感を際立たせることができており、本作ならではの特徴的なビジュアルテイストを実現できている。左がトーンマッピングなし。右がトーンマッピングあり。背景の階調は持ち上がっているが、キャラクターモデルの階調はトーンマッピング適用後も変化していない。