ニュース

ゲームキャラクターに最小のリソースで最大の効果を与える秘訣とは

スクウェア・エニックスの外国人開発者が教える古くて新しいアプローチ

2月27日~3月3日開催

会場:San Francisco Moscone Convention Center

スクウェア・エニックスのAdelle Bueno氏

 GDC 2017も残すところ2日となった3月2日、スクウェア・エニックスは、「Achieving High-Quality, Low-Cost Skin: An Environment Approach」と題して、ゲームキャラクターのテクスチャについてのセッションを行なった。セッションの内容は、皮膚を表現するテクスチャを節約しつつも、クオリティの高いキャラクターを実現することにある。

 この矛盾する命題を、登壇したAdelle Bueno氏は“古くて新しい”方法で解決している。本セッションで解説されたテクニックが、多くの開発プロジェクトにとってメリットであったことと、開発者向けではあるものの、基本的な考え方はテクニカルアーティストやビジュアルを担当するプログラマでなくても理解可能なものであったことから、本稿で是非ゲーマーにも紹介していきたい。

 リソースをケチっておきながら、クオリティの高キャラクターを作る。さて、そんなうまい話はどこに転がっているのだろうか。そのココロは、“使い回し”にある。複数のキャラクターに、同一のテクスチャリソースを使い回すこと、小さいタイルのテクスチャをタイリングして使い回すこと、このテクニックの骨子は、この2点にある。

 このテクニックを公開してくれたBueno氏は、「Uncharted 3: Drake's Deception」、「The Last of Us」、「Bloodbone」、「FINAL FANTASY XV」(以下、「FF XV」)といった華々しいプロジェクトに参加した経験を持っており、現在はスクウェア・エニックスの東京で、Advanced Technology Divisionに籍を置いている人物だ。冒頭の自己紹介が終わった時には、名だたるビッグプロジェクト、スクエニの先端技術部門、といったキーワードから、いかなる新進のテクノロジの話題が提供されるのか、と身構えていたところ、Bueno氏の口から語られていったのは、要するに“使い回し”のテクニックである。いい意味で、予想を裏切られた格好だ。

 大前提として、モダンなPBRでは、光源の影響がない状態の色、反射、拡散の3要素に分けてテクスチャを用意する。これらがレンダリング時にシーン中のライトの影響を受けて最終的に画面に表示される色が決まる。加えて、人間の肌では、透明感を表現するために、皮膚の表面の場所によって光を皮膚の内側に透過する度合いを制御するテクスチャが用意される。また、ポリゴンの形状では表現しきれない皮膚の凹凸を追加して人相に個性を出すために、凹凸用にもテクスチャを用意する。

 本セッションで取り扱われたのは、これらのテクスチャのうち、肌の色合いを決定する3要素や、肌の透明感といった要素ではなく、人相を決定づける凹凸表現、つまりノーマルテクスチャ(マップ)の部分だ。

 Bueno氏が、このテクニックを試みる契機となった背景には、「FF」のキャラクターのノーマルには、2K、4Kのテクスチャは当然のこととして、カットシーンなどではさらに高解像度のマップが、しかもキャラクターごとに専用のものが使用されていたということがある。このことは“豪華だな”と思う反面、「FF」クラスのクオリティを求めるタイトルなら当然かな、と素直に受け入れてしまうような話だ。それほど、リアルな表現といえば、高解像度のテクチャを惜しげもなく使うというイメージが筆者の中にはある。

 3Dキャラクターがカメラに寄った際に、キャラクターから受ける印象を左右するのは情報量の差にある。リアルテイストなキャラクターの場合、表皮や衣服などの素材の質感を強調するために、可能な限り多くのピクセル数を割り当てることで、間違いなく描写が向上すると言える。十分な解像度が割り当てられたキャラクターと、そうでないキャラクターを比較すると、その差は一目瞭然だ。カットシーンなどもあり、アップで画面に表示されることが多いRPGのキャラクターでは、その傾向はより顕著で、質感という意味ではノーマルマップの解像度を上げれば上げるほど、キャラクターのクオリティは、ほぼリニアに向上すると言える。

 ところが、ノーマルの解像度を上げても解決できていない問題点もある。スカルプトによる2段階のサーフェースでカバーしなければならない要素の範囲が大きすぎて、十分に毛穴などのディティールが表現できないことや、逆に毛穴のバリエーションを豊富にしようとすると、毛穴のためだけに、凹凸とはまた別途2Kのテクスチャを用意しなければならないということになりかねない。ノーマルが確かに凹凸によりディティールを増やすとは言え、実際にはノーマルだけではBueno氏が満足できるほどのリアルな肌の表現はできていない。

 また、さらにミクロなレベルのディティールに調子を加えるために、従来は汎用のタイリング可能なノイズテクスチャが用意されていたのだが、人間には、それぞれ個性的な毛穴というものがある。本当の意味では、これらを1種類の汎用ノイズのマップだけで表現することはできていなかった。

 他方、ランドスケープの地面などのテクスチャに注目してみると、キャラクターと比較して、より多くの要素を相対的に少ないテクスチャでカバーしている。これは、注目点であるキャラクターに対して優先的に多くのリソースを割り当てるのがセオリーだということもあるが、広大な背景に対してそのエリア専用のテクスチャを用意することが現実的でないということから、そもそもタイリング前提でループテクスチャを使用していたり、マルチマップをブレンドして、限られたテクスチャリソースでも変化をもたせることを当たり前に行なっている。

 では、キャラクターに対してタイリングテクスチャを使用することはできないのだろうか。Bueno氏は、従来のアプローチでも、リッチなカラーテクスチャ以外に、皮膚の質感に調子をもたせるためにタイリング前提のノイズテクスチャを使用していることから、同様に、毛穴やタイリング可能ではないかと考えた。

 そこで、まず身近な開発者の顔写真を撮り考察してみたところ、毛穴、縦ジワ、横ジワ、鼻の変化の4要素に対して、それぞれ専用のタイリング可能なノーマルマップを用意すれば良いということに気がついた。

 さらに、人間の毛穴には、規則的な“流れ”の方向があることに気がついた。そこで毛穴の流れを制御するためのマップも用意することにしたのた。

【人間の皮膚に見られるディティール分析】

 従来の超高解像度マップに代えて、4要素の局所と毛穴の流れのマップを用意することで、まず人相を司るノーマルマップの解像度が512で良くなった。この部分のテクスチャメモリが従来が2Kだとすると、単純に1/16になる。

 さらに、スカルプトによる凹凸表現に含める範囲も、大きなシワやたるみ、傷だけで良くなった結果、2段階のサーフェースで十分間に合うようになった。また、毛穴を含めないことにしたおかげで、スカルプトの作業時間を40%削減することができたのだ。

ディティールに応じたノーマルを用意
ノーマルはバーテックスカラーに置いたARGM値の色深度で適用度がコントロールされる

 一方で、毛穴などの4要素の局所用のノーマルがそれぞれ128に、また毛穴の流れ用のノーマルが256に増加しているが、その増加量は、削減できた量と比較してごくわずかだ。加えて、NPCなどのあまり重要ではないキャラクターでは、4要素の局所用マップを共有とし、流れ用マップは基本は同一として共有し、必要なキャラクターだけに用意することにした。

バーテックスカラーのペイントには「UE4」のエディタを使用しているとのこと。DCCツールでもペイント可能だ

 トータルの作業時間が削減できたほか、作成しなければならない数量が減ったことで、よりクオリティの高いマップを用意できるようになったため、結果的として、ほとんど品質が下がらないばかりか、むしろ品質を向上させることに成功した。1キャラクターあたりのテクスチャメモリの占有量が減ったおかげで、同時にテクスチャバッファに載るキャラクターが増え、転送しなければならない場合でも、データ転送効率は向上している。少ないデータ量、少ない作業量で、高品質のキャラクターが誕生したのである。

【新旧方式比較】
レギュレーションの新旧比較
データ量が削減できているのはノーマルの面積を比較すれば明らか
写真ではホワイトバランスの関係で色味が異なってしまっているが、会場では両者のクオリティに大きな差は見られなかった。どちらも高品質だ

 本セッションの内容は、実に示唆に富んでいる。というのも、本セッションのテーマは現在のトレンドとは真逆であるからだ。ゲームグラフィクスに関するGDCのトレンドは、リアリティを追求するために、現在の計算機パワーが許す限り物理的に正しく、メモリが許す限りリソースリッチに、という傾向が続いており、あたかも先進的なアプローチの“競技会”の様相を呈している。

 もちろん、そうした発表がGDCの魅力であるし、最先端の開発者からヒントを得て自分たちで自己のプロジェクトに落とし込むことで、フォロワーにも新しい技法が浸透していくのは間違いのないところだ。その一方で、GDCに参加する数多くの開発者のうち、いったい何割の開発者が即座に先進的な技法を取り込むことができるだろうか?

 筆者は、その数が決して多くないと考える。GDCで見聞したことを持ち帰ってチームメンバーと対話しても、技術力の壁に阻まれて、自分たちのプロジェクトでは“不可能”だという結論に達することが多いのではないだろうか。他の開発者にヒントを与えることができる開発者が少ないのと同様、ヒントだけで自前の実装が導き出せるようなタレントがいるチームは、やはり少ないのだ。

 その点、本セッションの肝は“着眼点”にあり、すでに一般化した技法の範疇にある。今や誰もが触れることができるゲームエンジンやDCCツールが標準的にサポートする機能だけで実現することが可能だ。また、PBRをサポートするゲームエンジンを使用していなくても、ノーマルやマルチテクスチャのサポートさえあれば同種のテクニックを採ることができる。

 なによりアーティストなら誰もが、単独で、すぐさま実践できて、しかも間違いなく効果が得られるというのが大きい。このセッションで解説されたテクニックは、技能レベルに関わらず、多くの開発者にとって本当に有益なものだと思う。本セッションを行ってくれたスクウェア・エニックス、そしてBueno氏に感謝の意を表したい。