西川善司の3Dゲームファンのための「ソニック・ワールド・アドベンチャー」グラフィックス講座 -GAME Watch

「ソニック・ワールド・アドベンチャー」と「ヘッジホッグエンジン」のロゴ

■ 「ソニック・ワールド・アドベンチャー」のグラフィックスペック~ソニックもいまや18,000ポリゴンキャラに!

【ソニックのクローズアップショットとそのワイヤーフレームショット】
【敵キャラクターのクローズアップショットとそのワイヤーフレームショット】

<1ステージを構成する建物などの背景物の総ポリゴンは、ステージ構成にも依存するとのことだが、大体400万~500万くらい。1フレームあたりだと、背景だけで10万~13万ポリゴン数くらいだとのこと。

【実際のプレイシーンとワイヤーフレームショット】
株式会社セガ、第二CS研究開発部、第一プログラムセクション、ゲームディレクターの橋本善久氏
株式会社セガ 第二CS研究開発部 第一プログラムセクション プログラマー 荻野晃史氏

橋本氏「LODについては、ほとんど何もやっていません。というのも、『ソニックWA』の場合、ジオメトリ面での負荷がほとんど問題にならなかったんです。LOD用に多ポリゴン、低ポリゴンモデルを用意するといった準備だけはしていたんですが、費用対効果を考えた場合、不要だろうということで実装は見送りました。LOD的なもので「ソニックWA」に実装したのはテクスチャのミップマップくらいですかね」

荻野氏「PS3版もPlaystation Edgeを使ったのでジオメリパフォーマンスに不安はありませんでした。PS3の場合はメインメモリ容量がきついので、LODの導入によって低ポリゴンモデルがメモリを占有することも考えられましたから、結果的に導入しないで済んでよかったです(笑)」

【HAVOK5】
HAVOK Physicsは主に動的キャラクタ同士の衝突検出や、破壊したときの破片の散乱などの挙動制御に利用
キャラクタと背景のインタラクションの際の姿勢制御のIK処理にはHAVOK Animationを利用

■ ピクサーCG映画のアンビエント感をゲームグラフィックスに

「3Dゲームグラフィックスでピクサータッチを目指す」という発言は時々聞かれることがある。VALVEの「TEAM FORTRESS2」のビジュアルもピクサータッチを再現するために独特なライティング技法を考案して導入した

橋本氏「今世代のゲームグラフィックスはとてもシェーダーリッチにはなったと思いますが、平行光源(太陽光などのシーン全体に降り注ぐ光源)、点光源(局所的に全方位を照らす光源)が直接当たらない箇所の陰影が省略されてしまっていることが、“物足りなさ”となってるのでないか、と思い始めたことがきっかけですね。そして、その後、長編CG映画制作スタジオとして著名なピクサーの作品群の雰囲気を再現することを目標にリアルタイムGIの開発に乗りだしたんです」

現実世界におけるグローバルイルミネーションの例。実態としての光源はオフィスの天井にある蛍光灯だけだが、その光が赤いファイルに反射して、この赤いファイルが2次光源として白いハリネズミの紙人形を赤く照らしている。グローバルイルミネーションとは端的に言えば間接照明や相互反射といった照明事象のことCGで再現されたグローバルイルミネーションの例。実態としての光源は天井照明だけのシーンだが、その光は左右の赤と青の壁に反射し、これらが二次光源となって部屋の中のオブシェクトを淡い赤と青の光で照らしているのがわかる

■ 「ソニックWA」のGIテクニック(1)~静的オブジェクトへのGI

【GIテクスチャ】
GIテクスチャのみを表示した特殊なショット。よく見るとポツポツという斑点のようなものが見えるはず。これがGIテクスチャの計算単位
【GIテクスチャ その2】
まず、光のネットワークの形成を行なう
【GIテクスチャ その3】
画像テクスチャのテクセルサイズとGIテクセルのサイズは違うので本来ならば平均値を求めるといった処理が必要だが、「ソニックWA」ではこの計算は省略している。「ソニックWA」ではGIテクセルの中心と重なる画像テクスチャの代表テクセルの色を採択している光源として用いるのは、平行光源、点光源、天球光の3タイプ実際にシーンに全ての光源を配置して、光を前述した光の伝達ネットワークに流すというイメージ
(4)は「光量の総計」×「素材ごとの反射率」×「係数」÷「このテクセルと結ばれるGIテクセルの数」で求める
株式会社セガ、第二CS研究開発部、第一プログラムセクション プログラマー岩崎浩氏

岩崎氏「GIテクスチャの計算単位は可変設定ができるのですが大体1辺2cm~3cmくらいですかね。昼間のシーンは大ざっぱでもあまり目立たないのですが、夜のシーンは街灯などの照明が及ぼすGIが、見た目に分かりやすく出てくるので、調整には気を使いました」

西川善司の3Dゲームファンのための「ソニック・ワールド・アドベンチャー」グラフィックス講座 -GAME Watch

橋本氏「500m×500mの地形に対して1台のPCで計算させると2日間掛かってしまいました。できあがったGIテクスチャは約100MB。1ステージあたり約15kmあるところもありますから、単純に見積もるとGIテクスチャサイズは数百MBから1GB程度にまで上り、計算時間は数カ月となってしまうことがわかったんです(笑)。これではまずいと言うことで、GIテクスチャを生成するツールを分散コンピューティングに対応させました」

【GIテクスチャ その4】
生成されたGIテクスチャの例

橋本氏「このGIテクスチャ計算用の分散コンピューティングのために部内にPCを何十台も拡充したんです。そうしたら電力が足りなくなってしまって、なにかの機材の電源を入れるタイミングで職場のブレーカーが落ちるようになってしまいました(笑)。結局電力増強工事をするハメになってしまいましたよ」

MI-TRACERの画面

岩崎氏「その代わり、ゲーム中のBGMやサウンドはオンメモリなんですよ。ちょっとサウンド関係には容量制限を与えてしまいましたが、それでも40MBくらいは割り当てたので1ステージで使用するBGMやサウンドの量には事足りましたね。ソニックは秒速100m以上で走るのでGIテクスチャの読み出しが間に合うか不安だったのですが、机上の計算で間に合うようにGIテクスチャのストリーミング読み込みを設計したところ、結果的には問題は出ませんでした」

【GIテクスチャ その5】
GIテクスチャのみGIなしの通常のライティングのみ(多くの一般的なゲーム画面がこんな感じ)GIを付加した完成ショット
【GIテクスチャ その6】
GIテクスチャのミップマップレベルを色分けして可視化した画面
【GIテクスチャ品質の違い】
上段がリリース版のGIテクスチャ品質で、下段がDLC版のGIテクスチャ品質

■ 「ソニックWA」のGIテクニック(2)~動的キャラクタへのGI

半球ライティングの概念図

橋本氏「いろいろ検討はしたんですが、我々は半球ライティングよりも一歩進んだ概念を導入することに踏み切りました。チーム内では『ライトフィールド』と呼んだ技法で、半球ライティングの2方向の環境光よりも多くの方向からの環境光が空間内に自動的に計算されて配置されるものです」

【ライトフィールド】
ライトフィールドなし(一般的なゲームグラフィックスはこんな感じ)
ライトフィールドだけを表示した画面
ライトフィールド適用後の完成ショット
【ライトフィールドの模式図】
ライトフィールドの模式図。この図では設定される環境光はただの●になっているが、この各●が8方向に光を放つイメージだ
Valveの環境キューブの概念とよく似た「ソニックWA」のライトフィールド

橋本氏「『ソニックWA』では、ライトフィールドの各点にはデータとしては8方向の環境光を持たせているのですが、ピクセルシェーダーの定数仕様の関係でx、y、zの直交6方向に換算してから、ライティングしています。8個のライトフィールド環境光をまたぐようなケースには、ちゃんと直近の複数のライトフィールドをサンプルして加重平均を求めて後段のライティングを行なっています」

岩崎氏「背景や小道具/大道具オブジェクト用のGIテクスチャを生成したあと、そのGIテクスチャを適用したシーンを基にしてライトフィールドの値も算出します。ライトフィールドの間隔はシーンにも依存しますが、大体2m~3mを基本としていて、オブジェクトが多く配置された建物の近隣だともうちょっと細かいところもあるかもしれません。ただ、隣接するライトフィールド同士が変化が乏しい場合は1つにまとめてしまう処理を入れているため、実際には各ライトフィールド間の距離は可変長になっています」

【ライトフィールドの区間図】
ライトフィールドの区間を可視化した画面。ライトフィールドが異なる間隔で設定されていることがわかるだろうか
GIリムライト(Light Field Rim Light)の概念図

橋本氏「実は材質によっては、ライトフィールドは法線方向だけじゃなくて、視線ベクトルに相対する反射ベクトル方向のライトフィールドも参照しているんです。こうすることで向こう側の環境光が浸透してこちらにも溢れ出てきているような、微妙な味わいの陰影効果が出せるんです」

【GIリムライト】
リムライトなしGIリムライトのみ完成画面

岩崎氏「このライトフィールドを球面調和関数(SH:Spherical Harmonics)を用いて実装する案も検討したんですが、使用するメモリ容量、得られる効果のバランスを考えたときにあまり意味はない事がわかって採用は見送りました。我々の実装のような8方向の環境光を持つ実装だと、SHを用いなくても十分なクオリティが得られるようです」

【完成シーン】
背景がGIテクスチャのみの状態ソニックはライトフィールドのみの状態
GIテクスチャの静的な影完成画面
【ライトフィールドのデモ】
GIテクスチャの静的な影→GIテクスチャのみ→GIテクスチャ+通常ライティング(ライトフィルード無し)→ライトフィールドも適用→繰り返しという流れのデモ映像

■ 「ソニックWA」におけるHDRレンダリング技法

岩崎氏「『ソニックWA』のHDRレンダリングは整数8888の8ビット整数32ビットバッファ仕様で、Xbox 360、PS3共通です。0-255に0.0-2.0を割り当てる、いわゆる疑似HDRレンダリングになっています。開発最初期にFP16-64ビットを使ってみたんですけどパフォーマンス的にきつくて、今の仕様にしました」

【HDRレンダリング表現】
上段がHDRレンダリング表現オフ、下段がHDRレンダリング表現オン

橋本氏「『ソニックWA』の場合、そんなに高輝度に振られるシーンがなかったので、最大輝度2.0で十分でした。マッハバンドが目立たないのは、あまりのっぺりとした面表現がなされたオブジェクトが少なかったせいでしょうか」

【トーンマッピング】
明るいところから暗いところへ、そして暗いところから明るいところへ。トーンマッピングの効果に注目

橋本氏「これはプレイしやすくする配慮、しっかりシーンを見せるための演出的な理由など、いろいろあるのですが、やはり調整は必要になるんですよね。そもそもデザイナが描画するテクスチャは、デザイン時点で適当な色で着色されるわけですが、それは階調レベル的に、ある状況下で適切な発色になっていない可能性もあるんです」

【ポストプロセス効果】
夜のシーンはブルームやスターなどのHDRレンダリングならではのポストプロセス効果が分かりやすい。ゲームプレイ時にはそのあたりにも注目!

■ 夜のソニック「ウェアホッグ」の毛皮の秘密

岩崎氏「ファーの積層数は大体15レイヤーくらいです。開発時にはデザイナーがレイヤー数や毛の密度なども調整可能としていました。ファーを適用するためのシェル・ポリゴンはエンジン側で動的に生成する仕組みとしたので、モデリング段階のキャラクターには多層の外皮ポリゴンはありません。イベントシーンとゲーム中でレイヤー数は変えていて、イベントシーンではキャラクターのアップショットになることが多いためレイヤー数を多くしています」

【ファーシェーダー】
毛断面テクスチャの例オーサリング段階の毛なしウェアホッグ
デバッグ画面に登場させた毛無しのウェアホッグ毛を適用したウェアホッグ
【ファーシェーダー
NVIDIAのデモより。毛の生えていないモデルシェル方式のファーシェーダーだけ
毛ヒレによって植え込まれた毛最終ショット

岩崎氏「毛ヒレは我々も開発段階では入れて試してみたんですけど、『ソニックWA』のウェアホッグは、シェル方式のファーの積層数を多くしたことで、それほど毛の密度不足感もなかったので採用を取りやめました」

【ファーシェーダー その3】
ウェアホッグの毛並に注目。逆毛になっているのはファーシェーダーの工夫による

橋本氏「この他、毛先方面にスペキュラーが出るような陰影処理をやっていますし、また内側の下層シェルほど周りに遮蔽されていると言うことで、毛先が明るく、根本の方が暗くなるような陰影調整も入れていますよ。『ソニックWA』のファーはなかなかうまくいったと思いますが、しかし、課題もあって被写界深度の表現でボカしたときに、毛もぼけてしまってちょっと不自然になるんですよね。これがシェル方式のファーシェーダーの弱点というか、解決すべき今後の課題でしょうね」

【被写界深度効果】
左が被写界深度効果オフ。毛並がよく見える。右が被写界深度効果オン。背景と一緒に毛並もぼけてしまう

■ 「ソニックWA」における影生成

【「ソニックWA」における影表現】
「ソニックWA」における影表現は動的生成された影と事前生成された静的影とのハイブリッド技法
【影生成】
GIテクスチャとしての影(左)と、完成画面(右)
【影生成 その2】
GIテクスチャの影範囲内にいて、動的キャラクタに背景の影が投射されているシーン
【影生成のデモ】
具体的にいうとソニックの影とソニックに落ちている木の影は動的生成。地面に落ちている木の影はGIテクスチャによる静的生成されたもの。見ていて普通は区別できない。お見事。欲を言えばもうちょっと静的影がぼけているとよかったか
【影生成 その3】
左上から順番に、GIテクスチャの事前生成影のみ、LSPSMの影のみ、全ての影をLSPSMで生成した場合のテストショット(製品版ではこちらは採用されていない)、GIテクスチャの事前生成影とLSPSMの影を合成した完成画面

岩崎氏「万が一、静的オブジェクトの影を全描画したとしても、GIテクスチャ上の影とは、およそは合いますが一致はしません。ですが、例えば、地面に落ちている木の影と、ソニックに投射されている木の影が一致しているかどうかなんて、プレイヤーは気にも止めないでしょう。また、静的オブジェクトのシャドウマップ生成も動的キャラクターとが交錯するであろう狭い範囲で済みます」

橋本氏「ちなみに、ソニックの尖った後ろ髪の根本の辺りの影は3ds MAXで焼き込んだ陰影を修正したものなんです。凄く局所的でわかりきった陰影は見た目重視で焼き込んでしまったものもあるんです」

【影生成 その4】
上段が素の状態。下段がオーサリング段階で焼き込んだ局所的な陰影

■ その他の「ソニックWA」のグラフィックスの見どころ

Valveの開発したハーフランバートライティング
【ハーフ・ランバート・ライティング】
左が通常のランバートライティングのテストショット。陰影が濃く出過ぎていて人肌の色としては黒ずんでいて不自然。右が製品版で採用されたハーフランバート・ライティングの画面
【カメラライト】
上段がカメラライト・オフ。下段がカメラライト・オン。壁や床の法線マップにハイライトが出てより立体的に見える。映画における照明に近い効果をもたらしている

岩崎氏「開発当初はさざ波表現に視差マッピングを使って、かなり立体的なさざ波表現を実現していたんですよ。でも、GPU負荷的な問題もあって現在の法線マップによるさざ波表現に落ち着きました」

【水面表現】
「ソニックWA」は水面表現が美しい。フレネル反射の効果も、動的キャラクタの鏡像もちゃんと出ているので観察してみよう

■ おまけ-PS3版とXbox 360版の開発苦労話

図を描いて説明する橋本氏

荻野氏「PS3版の開発はかなり大変でした。Xbox 360に用意されているライブラリに相当する機能や関数をかなりPS3上に移植したり。メインメモリの取り扱いも大変でした。PS3ではDMAの都合上、データが128バイトボーダーでアラインされないとパフォーマンスが出ないんです。しかも、Xbox 360の512MBを自由に使えるのと違って、PS3ではメインメモリ256MB、グラフィックスメモリ256MBと用途別に分かれてしまっていますし……」

荻野氏「今回のPS3版の開発ではSCE提供のライブラリ、Playstation Edgeにかなり助けられました。これに含まれる、CELLプロセッサ内のSPE(Synergistic Processor Element)を頂点シェーダー的に活用するEdgeジオメトリの活躍が著しかったです。カリングはもちろんですが、特にスキニングの効果が凄くてPS3のRSXだけで処理させた場合の10倍はパフォーマンスが向上しましたね(笑)。Xbox 360版と多くのデータは共通化していますが、このEdgeジオメトリを活用している関係で、3DモデルデータなどはPS3専用の最適化を施しています」


■ 3DゲームグラフィックスのライティングはGIの方向へ進化する

橋本氏は丁寧にデモで実演しながら各実装テクノロジーの解説を行なってくれた

橋本氏「GI関連についていうと、スペキュラ(鏡面反射)の情報を取り扱えるようになれたらいいなと思いますね。現在の我々のGIテクニックで取り扱っているのは拡散反射系だけですからね。球面調和関数なんかを使って、シーン内のオブジェクトの各面単位とかについてどういう光がやってきているのかみたいな情報が盛り込められれば非常に綺麗な光沢なんかが出せると思うんですよね。キューブマップなどを手動で多数空間に配置する方法もあるようですが、ここでもやはりアーティストが手動で設定するのではなくて、全自動でデータを生成するシステムを作りたいと考えています。その上でアーティストが調整する余地があるのがベストだと思います。


(C) SEGA