ニュース
[GDC07#36]髪型・半透明・物理音源,20分セッションあれこれ
■毛髪処理手法のいろいろ
まず,「Hair Styling:A Teenager's Dream, An Artist's Nightmare」では,その題名どおり,髪の毛をいかに実装していくかについてBiowareのPeter Woytiuk氏が講演した。DirectX 10に完全対応するというBiowareの次期RPG「Dragon Age」では,32種類のヘアスタイルに加えてヒゲや毛の生えた生き物などが多数実装されるという。これらはそれぞれ別々にモデリング,シェーディング,アニメーションなどを加えなければならず,制作者側としては手間がかかってしかたない代物のようだ。それゆえ,なんとかして楽にヘアスタイルを作れないかという研究も進むのであろう。今回の講演ではモデリングを中心とした話題が取り上げられた。
Biowareでは,頭髪をいくつかに分類している。
・丸刈り
・ショート
・ロング
・あごひげ
・スタイル優先
「全部一度に解決しようとするな。別の髪型にすると別の問題が出てくる」というのは含蓄の深い言葉だ。
髪型の実装方法に関する細かい話は省略するが,髪型例として出てきたイラストやモデル例には,次回作Dragon Ageのものが交じっているのではないかと思われるので,新作に期待する人はチェックしておくとよいかもしれない。
さて,最近では髪の毛をテクスチャとして書いてポリゴンを重ねる手法が多くなっているが,この場合,透明体のソートが必要になる。少し触れたが,透明体のソートは3D処理では嫌われているテーマの一つなのだ。
■ソートを必要としない半透明体描画
予備知識が必要なので少し詳しく解説しておこう。
3Dグラフィックスで最も基本的な処理の一つに陰面消去がある。これは,後ろにある物体が前に置いてある物体に上書きされないようにするための仕組みで,手前に物体が置いてあって視界がふさがれているときには,その後ろにあるものは表示されてはいけないという,ある意味当たり前のことを実現する処理である。
陰面処理の最も単純なものは,視点から遠い物体から順に描画していくという手法である。これなら近い位置の物体が遠い物体を上書きするので問題は発生しにくい。ただし,前後に長い物体などは,分割して管理するなどの工夫が必要になってくる。多くの場合,ポリゴン単位で描画するので,平面であっても細かいポリゴンに分割しておかないと,自然な描写にならないケースがある。
しかし,扱うポリゴン数が増えると,それを遠い順に並べ換えるソート作業の負荷が非常に高くなる。一般に,ソートの負荷はn個の並べ換えの場合,n×log nのオーダーで増えていく。ポリゴン数が膨大になるとソート処理が重すぎて肝心な処理ができなくなってしまう。また,遠くまで描画される設定の場合,画面を何度も上書きするので,グラフィックスメモリ帯域を食うという問題もある。
GPU処理などで多用されているZバッファは,こういった問題を解決する手法の一つである。ポリゴンを描き込むときに,それぞれのピクセルのZ座標(視点からの距離)を同時にZバッファに書き込んでいく。そうして,これから描き込もうとする場所にすでに書き込まれているZ座標を読み出し,これから書き込む点が手前にある場合のみ描画を行うようにしているので,無駄なメモリ書き込みはあまり発生しない。また,どのポリゴンから描き始めても結果は同じなので,事前のソートは不要である。
ちなみに,プレイステーション(初代)では,Zバッファは搭載されていなかったのだが,ポリゴンをマスクしながら近い順に描画することでメモリ負荷を軽減していたり,ソート法としてバケットソートを使うことでポリゴン数が増えても負荷があまり増えないように(nにのみ比例)するなどの工夫がされていた。
さて,現在主流のZバッファ法で問題は解決されたかというと,完全には解決されていない。Zバッファが有効なのは,あくまでも不透明体に対してのみであり,半透明体があると,原理上そのままでは使えない。半透明体が交じると,旧来のソート法が併用されることになってしまう。半透明体が少なければさほど問題にはならないのだが,昨今は各種エフェクトやパーティクルなどで膨大な数の半透明体が使用されるようにもなってきており,なかなか悩ましい問題となっている。
この講演では,透明体の色演算(RGBカラー+透明度の重ね合わせ)の式を変形し,順番が問題になる部分と関係ない部分に分け,順番が問題になる部分をどのように近似していくかなどを検討し,誤差はどの程度になるか,どのような場合に使えて,どのような場合に問題になるかを示すデモも行われた。結論を言えば,完全ではないが,用途を限ればソートなしで半透明体を扱えるというもの。氏によれば,パーティクル処理に最適という。
実は,講演タイトルからして,DirectX 10のところで言及したA-Bufferに関する話だとばかり思っていたのだが,独自の手法によるものだったのは少々意外であった。
■リアルタイム物理音源
さて物理音源とは,音の発生する原理を数式で表し,振動源や共鳴体などの情報から現実の楽器をシミュレートしていこうという試みである。物理音源というと,かつて,同時に2音しか鳴らないのに50万円くらいしていたヤマハのシンセサイザが思い起こされる。PC用の音源ドライバとしても,物理音源をサポートしたものを発売していたように思う。
物理音源を使えば,サンプリング音源を用意しなくても各種楽器の音を出すことができ,指定次第では,この世に存在しない楽器も構成できる(まあ,たいていのシンセサイザはそうなのだが)。
このセッションで行われていたデモを見る限り,音源といっても音楽用ではなくて,リアルな効果音を実現するためのもののようで,それはそれで需要のありそうな分野である。
厚さ10cmの花崗岩の床を革靴で歩くとどのような音がするのかとか,ありとあらゆる効果音をリアルに再生できるようになる可能性がある。現在,グラフィックスについては,インタラクティブ性のあるものが実現されているが,ゲームの効果音は,たいてい事前に録音しておいた何かの音をその都度再生してやるだけでしかない。
このセッションのデモでは,物理音源の使用によるゲームでのCPU負荷は10%程度で,多くの場合は1%以下だそうだ。もちろん,音数が増えると重くなることは考えられるのだが,最近はGPUを使ってサウンド処理をやろうという動きも出てきており,これまでとは別次元から効果音処理を行うというのも面白いかもしれない。なお,この処理は,Crystal Space 3Dというオープンソースのゲームエンジンで使用されているようである。(aueki)
- 関連タイトル:
Dragon Age: Origins
- この記事のURL:
(C)2008 EA INTERNATIONAL (STUDIO AND PUBLISHING) LTD, ALL RIGHT RESERVED.