11月12日、九州産業大学にてゲーム開発者向けカンファレンス「CEDEC+KYUSHU 2022」が開催されました。
今回はモノリスソフトの舘野圭氏が登壇した講演、「『ゼノブレイド3』のキャラクター表現とアップサンプリング」についてのレポートをお送りします。
『ゼノブレイド3』にてグラフィックの開発に携わった舘野氏が「『ゼノブレイド3』で新たに進化した陰影表現はどのように生まれたのか?」「『ゼノブレイド3』がゲーム全体の解像度を上げつつ不可が減った理由とは?」について語るセッションとなっています。
少し専門的な表現・用語を使っている箇所もいくつかありますが、ゲーム開発に携わっている方もそうでない方も、お楽しみいただければ幸いです。
『ゼノブレイド3』のテーマに沿った陰影表現を生み出すための「2灯トゥーンシェーディング」
モノリスソフトの舘野氏は『ゼノブレイド3』におけるグラフィックスプログラムを担当しており、グラフィックスの中でもキャラクター表現等のタイトル固有の部分の実装を主に担当しているとのこと。
今作のキャラクターのグラフィックはアニメーション、またはイラストや漫画風の作画でレンダリングを行う「トゥーンレンダリング」を使用しており、フィールドは物理ベースのレンダリングを行う「PBRレンダリング」を採用しています。
今回のセッションは「第一部 キャラクター表現」と「第二部 アップサンプリング」にわけて行われました。まずは第一部の「キャラクター表現」から。
『ゼノブレイド3』のアニメーション風なキャラクター表現を可能にしている「トゥーンシェーダー」。その仕組みは「ベースカラー×ランプ(グラデーション)×ライトカラー」から作られており、『ゼノブレイド2』などの過去作も同様の手法が用いられています。
ノアやミオなどのキャラクターが着ている服にこのランプを当てることで、今作のアニメ風なグラフィックを崩すことなく、衣服のリアルな質感を表現しています。
さらに「明所用と暗所用のランプ」がそれぞれ用意されており、たとえば夜のフィールドや洞窟などの暗所では寒色のランプを使用することで、暗所に合わせて彩度を下げたりコントラストを強くしたりする役割を果たしているそうです。
他にも顎下、首元、鎖骨周辺にランプの影色にシフトしやすくする箇所を専用のマスクで固定することで、身体の細かい部分も違和感のない光の表現を可能にしているとのこと。
そしてキャラクターが着ている服にもハッチング(複数の並行線が書き込まれている描画法のこと)状の凸凹のディティールマップを制作することで、上着やズボンのしわを表現することに成功しています。これらがNPR【※1】的な情報量の追加にも繋がっています。
※1「NPR」
「非写実的レンダリング(Non-Photorealistic Rendering)」のこと。写実的レンダリング以外の全てのレンダリング方法を含むため、マンガやイラスト風、水彩やドット絵などのレンダリングもこの「非写実的レンダリング」に含まれています。『ゼノブレイド3』におけるアニメーション風なグラフィックも非写実的レンダリングに含まれるため、今回のセッションではこの「NPR」という単語がちょくちょく登場します。
ここからは今作で特に重要な「ポイント・スポットライトの反映」の解説へ。
『ゼノブレイド3』がメインテーマとしている「命(生と死)」を光の表現……つまり、「キャラクターが持つ影の部分をライティングで表現する必要」が出てきたわけです。
筆者も今作をプレイしていて、「表情の陰影が進化したなぁ……」と感じていたのですが、やはりここも狙って作り込まれていた部分だったとのこと。キャラクターのグラフィックに過去作よりも高いコントラストかつ、はっきりとした陰影をつけることに『ゼノブレイド3』は成功しました。
具体的な例としては、「戦場の戦火によって照らされるキャラクター」を演出するために、「月光」のディレクショナルライト【※2】と「戦火」のポイント・スポットライト【※3】の両方を反映したトゥーンシェーディングを目指す必要があったとのこと。
※2「ディレクショナルライト」
一点から照射する光ではなく、単一の方向から平行に降り注ぎ、シーン全体を照らすことができるライト。「太陽からの光が降り注いでいるシーン」などに用いられる。
※3「ポイント・スポットライト」
全体を照らすディレクショナルライトとは対称的に、「一点を照らす際に使われるライト」を指す。前者の「ポイントライト」は設定する一か所を中央起点として全方向に発生するライト(街灯などに用いられる)。後者の「スポットライト」は演劇でもよく用いられている限られた角度内を照らすライト。
『ゼノブレイド2』などの過去作におけるポイント・スポットライトの反映方法は、キャラクターの表情が誤った形で表現されてしまう嫌な陰影を出さないように、法線を無視し、ランプの方向には影響しないように作られていたとのこと。
少し噛み砕いて言えば、「ライトの当たり方による表情の陰影があまり出ない」ような演出をされていたというわけです。
しかし今作ではメインテーマに合わせて、表情に陰影を持たせる必要が出てきました。そして生み出された技術がこちらの「2灯トゥーンシェーディング」。
2灯トゥーンシェーディングの目的は「ポイント・スポットライトによる色・ランプ方向を出しつつ、ディレクショナルライト(常に存在)の色・ランプ方向も反映させたい」というもの。まさしく先ほどの「夜のフィールドの月光(ディレクショナルライト)と戦場の戦火(ポイント・スポットライト)によって照らされるキャラクター」が例として挙げられます。
そして実装されたのが「メインライト(キャラクターに支配的なライト)を当てて、そのメインライトの『影側』にディレクショナルライトを適用する」という状態。
噛み砕いて説明すると、「キャラクターを対象にしたライトを当て、そのライトに生まれた影にシーン全体を照らすライトを当てている」状態で、先ほどのミオのシーンの場合は、「ミオに対して当たっているライトの影側に、シーン全体を照らす月光のライトを適用している」という演出が行われているのです。
ではここで登場した「メインライト」とは一体何なのかというと、「ポイント・スポットライトとディレクショナルライトの合成によって生まれるライト」のことです。
上記のスライドの図が一番わかりやすいとは思うのですが、左から当たっているランプのライトと夜のディレクショナルライトを単一のライトに合成したのが「メインライト」となっています。
キャラクターがポイント・スポットライトに近い場合はポイント・スポットライトの色や方向が支配的な形となり、逆にポイント・スポットライトから遠い場合はディレクショナルライトの色や方向が支配的になります。
実際の「メインライトのみを適用した状態」「ディレクショナルライトのみを適用した状態」「2灯トゥーンシェーディングを適用した状態」の上記の比較スライドを見ていただければ一番わかりやすいかと思います。
つまり「2灯トゥーンシェーディング」とは、「メインライトとディレクショナルライトの2つのライトを使ったトゥーンシェーディング」だったということです。この新技術が『ゼノブレイド3』の印象的な陰影表現を生み出していました。
しかし、2灯トゥーンシェーディングにもいくつかの問題が。上に吊り下がっているライトから照らされるケースが多い屋内では、常にライトが真上から当たっているような見た目になり、あまりキャラクターの顔の見栄えがよくありません。
そこで「ライト方向の角度制限」を追加したそうです。ワールド空間でのみ、ライト方向の仰角を±40度に固定することで、ライト方向が真下に近い場合でも水平成分があるように見えるように調整したとのこと。これにより、「常にライトが真上から当たっているように見える屋内の陰影」が解決されました。
舘野氏は2灯トゥーンシェーディングの欠点を他にも2つ挙げており、「フィールド上の移動や複数のライトをまたぐ場合にライト方向の変化がうるさく見えることがある」「肌に対する2灯の陰影が嫌な見た目になることがある」の2点がまだまだ改善の余地があるとのことでした。
『ゼノブレイド3』の表情の演技を支える陰影表現
これまでの「ゼノブレイド」シリーズと比較しても、『ゼノブレイド3』は特に「表情の演技」が魅力的なタイトルだと筆者は感じています。たとえばキャラが目配せだけで指示を送るシーンや、些細な表情の変化など、かなり「表情の演技」にこだわりを感じます。
ここからはそんな「『ゼノブレイド3』の表情の陰影表現」を舘野氏が語る「第一部 キャラクター表現」の後半戦となっています
まずは「表情の陰影の調整方法」から。開発途中のキャラクターのモデルは、ライトの角度によっては汚い陰影が出てしまっていたとのこと。特に夜のシーンはコントラストが高く、陰影の境界が目立ってしまいました。
そこでモデルの顔の法線を段階的で、より起伏の少ない物に変更したところ綺麗な陰影になるライト角度の範囲が大きくなり、嫌な陰影になるライト角度の範囲が小さくなったそうです。
続いては「首の接合部分の補間」について。顔と体でライティングの方向が違う今作のキャラクターモデルでは、首の接合部分でシェーディングに境界ができてしまっていました。
しかしこちらも首の接合部分に専用のマスクを当ててライト方向を補間することで、顔と体の接合部分に違和感がないようなモデルを作ることに成功。
続いては「狭い範囲で顔に嫌な陰影が発生してしまう」という問題について。顔の陰影ひとつ取ってもどんどん問題が出てきます。筆者も「自分がプレイしている間はあまり気にしなかった部分も、これほどの工夫が凝らされていたのか……」という驚きを感じました。
キャラの顔の横軸のY回転12度から17度までのわずか5度の角度範囲内にて、不自然な陰影が生まれてしまう自体が発生したそうです。
こちらはキャラの中間陰影にハッチングをかけることで、「嫌な影を表現の1つに組み込んでしまう」ことで解決したとのこと。
次は「唇・鼻のハイライト」。何度か陰影に問題が発生してしまうパターンが続きましたが、こちらは前向きな工夫が凝らされた箇所となっています。
今作のキャラの唇と鼻に当たっているハイライト。実はこれはシェーディングによるハイライトではなく、ハイライトのテクスチャUVをビュー空間法線に応じてオフセット……つまり唇と鼻用のハイライトのテクスチャをつけて視点に応じてそれがズレることで、唇と鼻の自然なハイライトを実現しているそうです。
さらに「眉毛・まつ毛」も、オブジェクト部分のみをくりぬいた描画を行う「ステンシル(テスト)」によって透過処理が加えられており、前髪と顔全体のバランスを整えています。キャラクターのビジュアルも魅力のひとつな『ゼノブレイド3』。唇やまつ毛などの顔の小さなパーツひとつ取っても、しっかり作り込まれています。
ここからは「髪」についての項目です。表情にここまで細かい工夫が凝らされていた今作……もちろん「髪」もかなりの技術が使われています。
ひとつ目は「髪のハイライト」。「天使の輪」と呼ばれている輪っか状のハイライト用テクスチャを球面環境マップでマッピングすることで、ヘアスタイルに合ったハイライトを入れています。
カットシーンなどで髪が横になっても絵的な違和感がないよう、頭の座標でハイライトの反射計算を行い、「ハイライトの向きを頭の向きに合わせる」というものが実現したそうです。
次は「髪の背面散乱」について。「光散乱」という現象について説明しておくと、「光を物質に入射させた時、これを吸収すると同時に光を四方八方に放出する」という現象のことです。
つまり『ゼノブレイド3』はこれをゲーム内の髪においても再現したということで、髪の「背面散乱」をONにすることで逆光による散乱の疑似的な表現に成功しています。
続いては「NPRフィルター」。
髪に「SNNフィルター」【※4】という……「面を刻む」ような効果のフィルターをかけることで髪以外のトゥーンマテリアル(ミオの場合は頭についている赤い紐のようなアクセサリー)との質感の差別化や、髪の一体感の向上に成功しているそうです。
SNNフィルターは「髪の分け目の表現」にも役立っているらしく、分け目状のポリゴンを上乗せした状態がこのフィルターによって髪と馴染むようになっているとのこと。今作のメインキャラクターのひとりでもある「セナ」は、SNNフィルターを前提とした髪のデザインになっているそうです。
※4「SNNフィルター」
もっと簡単に言えば、「絵画調」になるフィルターのこと。こればっかりは「SNNフィルター」で画像検索していただくのが早いような気がするので、気になった方は検索してみてください。
他にも顎のラインなどをわかりやすくする「輪郭線」や、強い光を受けた肌がやわらかく発光しているように見える「スキンブルーム」という表現も紹介されました。スキンブルームはディフュージョン【※5】の肌オンリー版のフィルターと言った感じだそうです。
さて、たっぷり紹介してきたキャラクター編もここまで。舘野氏はキャラクター編のまとめとして、「本作のテーマにあったライティングを実現」「頭座標系を使った顔や髪のNPR表現」に成功したと振り返りました。
一方で、ライトの方向変化に対する顔の陰影の変化が激しかったり、パターン化しすぎてしまうため、もう少し陰影の変化を滑らかにしたいこと。昼間のフィールドの色の変化の乏しさから、もう少し昼間の陰影の情報量を増やすことを今後の課題として上げていました。
※5「ディフュージョン」
撮影する時にフィルターを通して光を拡散させるフィルターのこと。スキンブルームはこれに近いフィルターをキャラクターの肌のみにかける表現となっているそうです。
「高解像度化と負荷の減少」を両立した!? 「テンポーラルアップサンプリング」について
続いては「第二部 アップサンプリング」です。
ここで一度、そもそも「アップサンプリングとはなんなのか?」ついて説明しておくと、「ある周波数でサンプリングされた信号をより高い周波数で再サンプリングする」のがアップサンプリングとなっています。46KHzでサンプリングされた信号を96KHzで再サンプリングすれば、それはもう「アップサンプリング」というわけです。
『ゼノブレイド3』は魅力のひとつでもある広大なフィールドをより高精細に描画するために、開発の中盤で解像度のアップサンプリングの導入の検討が始まったそうです。
そこで採用されたのが「Dynamic Temporal Antialiasing and Upasmpling in Call of Duty【Jimenez2017】」の手法。かなり長めの横文字が出てきて面食らうかもしれませんが、要はこれが「『ゼノブレイド3』にピッタリなアップサンプリング方法」だったということ。以降、今作で使用されたアップサンプリングはこれを略し「テンポーラルアップサンプリング」と呼称されます。
採用の理由としては、「高解像度化の倍率が最大で縦横2倍、解像度比で4倍と高い」「アップサンプリングの適用タイミングがほぼ最後なため、アップサンプリング後の高解像度化の処理が少なく、描画全体の負荷を低減できる」「Nintendo Switchで実装可能であること」が主な理由として挙げられました。
そしてアップサンプリング後の解像度は、TVモードが最大「960×544」だったところから、「1920×1080」へ。携帯モードが最大「776×440」だったところから「1552×880」へ。
しかし携帯モードはこの「1552×880」を出力解像度の「1280×720」へダウンサンプリングし、スーパーサンプリング効果【※6】で画質が向上する仕組みとなっています。
もう少し噛み砕いて説明すると、素のアップサンプリング状態の「1552×880」ではNintendo Switch本体の最大出力解像度の「1280×720」を上回ってしまうため、一度それに合わせたサイズにダウンサンプリングをした後、スーパーサンプリング【※】で結果的に画質が向上しているということです。
※6「スーパーサンプリング」
レンダリングされた画像からエイリアシング(無駄なギザギザ及びピクセル化したエッジ)を削除するために使用される。今回の携帯モードのように、解像度制限がある場合において「一度高い解像度で画像をレンダリングし、そこから縮小することで高品質な解像度になる」という使い方がある。
そしてアップサンプリングの適用タイミングとしては、「ポストエフェクト適用後にアップサンプリングを行う」形としており、HUDはフォントのみを高解像度化しているとのこと。
次は「動的解像度」。GPUの高負荷時にフレームレートの低下を防ぐために、GPU負荷の高い状況ではアップサンプリング後の解像度が低下するようになっているそうです。
『ゼノブレイド3』をプレイした方であれば、「戦闘中にちょっと解像度が下がっている」ことに気付いた方もいると思うのですが、おそらくあれが「GPUの高負荷時に解像度を下げてフレームレートを維持」に該当する場面だと思われます。
高解像度化の目的としては、あくまで「広大なフィールドをより高精細に描画する」ことなので、フィールドの全景が映らない戦闘中などの高負荷時はある程度解像度を下げているというわけです。
上記のスライドは携帯モードとTVモードのテンポーラルアップサンプリング化前と後の比較画像です。直撮りとなっているため写真では少々わかりづらいかもしれませんが、実際の会場では目に見えてフィールドのオブジェクトがくっきりと映っていました。
一方、先ほどのキャラクター表現で紹介した「輪郭線」の途切れがこのアップサンプリングで強調されてしまう……という欠点も発見されたそうです。
他にも「迷路模様のようなアーティファクトが出てしまう」という問題も発生したらしく、現在フレームと1フレーム前で変化の大きい箇所……たとえばブルーム(明るさが一定以上に達したところの周りがうっすら光って見える現象)や被写界深度、瞬間的にフラッシュするエフェクトなどが重なって謎の迷路模様が発生してしまったようです。
このアーティファクトの改善方法として、ブルームや被写界深度、エフェクト箇所を表すマスクを出力し、アップサンプリング時にマスク箇所の近傍4ピクセルを平均化することで解決したそうです。要は過去と現在のフレームのどちらかに偏ってしまうことが原因だったので、その中間とすることでなんとかなったというわけです。
そして次は「負荷削減」。
アップサンプリング時に各ピクセルごとに行っている処理が「現在フレームをサンプリング」「1フレーム前をリプロジェクション」「現在フレームと1フレーム前のリプロジェクションとの隙間をDifferential Blendで埋める」というもの。
これらのアップサンプリング時のパスを分割することで、解像度を上げつつGPU負荷を削減することに成功しました。とにかく「テンポーラルアップサンプリングによって解像度が上がりながらGPU負荷を削減することに成功した」という結果がすごいです。
詳細な数値を改めて整理すると、TVモードのGPU負荷が「6.74ms→5.84ms(₋0.9ms)」、携帯モードが「5.70ms→4.95ms(₋0.75ms)」と、明確な負荷削減に成功しています。
加えて、フィールドでの移動をした際、草の揺れにチラつきが生まれてしまう減少も発生。こちらはアップサンプリング前の現在フレームにテンポーラルフィルタを入れることでチラつきを抑制。
フィールド上の草なども自然で美麗な表現となり、同時に走って髪が揺れた際の画面のチラつきも軽減されました。
これらの様々な改修を行い、テンポーラルアップサンプリングのチラつき軽減アリでの最終的な描画全体のGPU負荷はTVモードが30.35ms、携帯モードが29.41msとなっており、テンポラールアップサンプリングを採用していない過去作と同じ構成の描画全体負荷のTVモード30.73ms、携帯モード32.13msと比較すると明らかに負荷が削減されています。
テンポーラルアップサンプリングの実装時のTipsとして、舘野氏は「実装初期は低解像度でテストを行う」ことを挙げており、これは初めから高解像度で実装しても高解像度化の効果がわかりにくいこと、実装上のミスを見つけやすいことなどのメリットを語りました。
一方、カットシーン中はこのテンポーラルアップサンプリングはOFFとなっているそうです。カットシーンは過去作同様TAA【※7】を使用しており、TVモードは1280×720、携帯モードは960×540の解像度になっているとのこと。
この理由として、「カットシーン中は手ブレカメラが多く、テンポーラルアップサンプリングではチラつきが目立つ」ことを挙げていました。テンポーラルアップサンプリングの導入時点で多くのカットシーンが既に制作済みであり、手ブレカメラの演出が多いカットシーンの場合はTAAのチラつき抑制効果の方が優秀だったと語りました。
※7「TAA」
「テンポーラルアンチエイリアシング」のこと。あるフレームにおけるレンダリング結果を保持し、次のフレームで1ピクセル以内の違う位置にサンプリングポイントをずらした上で、前後のフレームを合成するアンチエイリアス手法の一種……となっていますが、簡潔に言ってしまえばテンポーラルアップサンプリングと同じく画面の解像度を向上させたり、画面の文字や線が斜めに・ギザギザしたりする部分を抑える技術です。『ゼノブレイド2』などの過去作では、こちらのTAAが採用されていたとのこと。
最後に、「第二部 アップサンプリング」のまとめへ。
高解像度化のためにテンポーラルアップサンプリングを導入したことで、解像度を上げつつも描画全体の負荷を低下させることに成功。一部のロケーションでは解像度の低下を抑えることも実現しました。
今後の課題としては、「キャラクターの輪郭線の品質向上」を挙げていました。アップサンプリング前の輪郭線描画の安定化を今後は図っていきたいとのことです。
さて、「『ゼノブレイド3』のキャラクター表現とアップサンプリング」についてお送りした今回のレポート、いかがだったでしょうか。
やや専門的な話もありましたが、『ゼノブレイド3』は光の陰影表現やキャラクターのモデルの小さなパーツ、フィールドに生えた草にまでこれほどの技術と工夫があって完成しているタイトルなのだということを、今回のセッションとレポートを通して少しでも知っていただければ幸いです。