GDC2008のプリカンファレンス「チュートリアル」2にちめには、Microsoftがスポンサーをつとめる1にちコース「MicrosoftGameDevloperDay」がかいさいされた。
このなかの、しょうらいのDirectXのほうこうせいがかたられた「DirecXFutures」と、ぜんじつの「AdvancedVisualEffectswithDirect3D」のなかでおこなわれた「Direct3DTechniquesandFutures」のセッションはひじょうにかんれんがふかく、そしてきょうみぶかいないようだったので1つにまとめてレポートする。
なお、この2つのセッションではともに、MicrosoftWindowsDisplay&Graphicsで、DirectXのアーキテクトをつとめるChas.Boydしがとうだんした。
■きんみらいのじせだいDirectXはこうなる!
「DirectX」はWindowsかんきょうかのマルチメディアコンポーネントのプログラミングインターフェイスだが、そのなかでも3Dグラフィックスをとうかつする「Direct3D」は、じっしつてきにWindowsかんきょうにおけるさいしん3Dグラフィックスぎじゅつのしんかをささえるそんざいとしてしんかしてきたけいいがある。Direct3DはDirectXのなかでも、もっともしんかのいちじるしいものであるため、いまやPCぎょうかいでは「Direct3D=DirectX」というにんしきとなっている。さいしんWindowsのWindowsVistaでは、GUIやデスクトップびょうがをDirect3D9Exがたんとうするなど、OSコアぶぶんにくみいれられており、DirectX(Direct3D)のしんかのほうこうせいは、Windowsかんきょう、もっといえばPCかんきょうのしんかのほうこうせいをけっていづけるものといってもかごんではないわけだ。
DirectXアーキテクトであるBoydしは、このDirectXのしんかのほうこうせいをきめるじんぶつであり、まいとしかれがおこなう「DirectXFutures」にまつわるこうえんはちゅうもくどがたかい。
こんかい、Boydしのこうえんでは、みらいのDirectXについて、「きんみらいのDirectX」と「とおいみらいのDirectX」と2つにわけてかたられた。
まずは「きんみらいのDirectX」について、だ。
「MediumRangeFuture」……これはBoydしのくちからはめいかくなひょうげんはなされなかったが、おそらくは「DirectX11」のような、ひかくてき、リアリティのたかい、きんみらいのはなしにそうとうするものだとおもわれる。うけてとしては、じきDirectXへのじっそうのけんとうがなされているテーマのしょうかい……としてりかいすればとっつきやすいはずだ。
・SupportforMulti-CoreCPUs
まず、ユーザーやかいはつしゃからのようぼうでおおくよせられるのが「マルチコアCPUへのせっきょくたいおうをおこなってほしい」というもの。げんざい、ミドルレンジクラスのPCでは、デュアル(2x)コアがあたりまえで、ハイエンドになるとクワッド(4x)コアやオクタ(8x)コアのCPUをとうさいしたPCまでがいっぱんユーザーのもとにふきゅうしつつあり、DirectXないのかくしゅAPIタスクのマルチコアさいてきかがのぞまれているのだ。
・HigherOrderSurfaces
もう1つはハイ・オーダー・サーフェイス(こうじきょくめん)へのたいおう。3Dモデルデザインツールなどにおけるキャラクタさくせいこうていでは、なだらかなきょくめんひょうげんのためにもちいられるこのテクニックを、リアルタイムレンダリングのフェイズにもくろうなくシームレスにもっていくしゅほうがのぞまれているというのだ。
じっさいに、リアルタイムレンダリングじにこうじきょくめんせいせいをおこなうのは、どうてきな3Dモデルのへんけいやぶつりシミュレーション、しょうとつはんていなどをおこなうゲームアプリでのじっそうもげんじつてきではないため、ソリッドなポリゴンモデルへのサブディビジョン(ポリゴンぶんかつ)のじっそうがふかけつになるとされる。サブディビジョンといえば、ATI(AMD)がせっきょくてきにとりくんできたテーマで、ふるくはRadeon8000/9000シリーズのTRUFORMきのう、さいきんではXbox360のGPUやRadeonHD2000/3000シリーズのDedicatedTessellatorユニットがていきょうされているが、それほどせっきょくてきなかつようはなされていない。
しかし、ここすうねん、Boydしのセッションではかならずといっていいほど、サブディビジョンやテッセレーションのわだいがのぼり、じっさいになんどかじせだいDirect3Dのかそうパイプラインずでテッセレータユニットのブロックがしめされているので、Microsoftとしてもしんけんにけんとうしているということなのだろう。
・BetterTextureCompression
3Dグラフィックスパイプラインのしゅりゅうがハイダイナミックレンジ(HDR)レンダリングにいこうをかんりょうしたといえるげんざいにおいて、ゆいいつかんきょうせいび(?)がなされていないのがHDRテクスチャのあっしゅくメソッド。S3がかいはつしてMicrosoftがひょうじゅんかしたテクスチャあっしゅくメソッド「DXTC」はじつようかされてからやく10ねんがたつが、ふどうしょうすうてんテクセルからなるHDRテクスチャや、ほうせんマップのようなしきじょうほうではないベクトルじょうほうをかくのうしたベクトルテクスチャのあっしゅくにはDXTCがふむきなことがしてきされているのにうごきがない。AMD(ATI)の3Dc/3Dc+のようななかつぎてきなテクノロジーもていしょうされたが、こんぽんてきかいけつにはいたっていないのだ。だからこそ「そろそろテコイレをしてほしい」というようぼうがおおくきているというわけだ。
ちなみに、OpenGLほうめんではDXTCよりもこうひんいなテクスチャあっしゅくがかのうとされるしんメソッド「ETC:EricssonTextureCompression」がせいしきさいようされるなどうごきがみられている。
・ShaderLanguageEvolution
3Dグラフィックスしょりをソフトウェアじっそうするというプログラマブルシェーダがいっぱんかし、そのプログラマビリティはプログラマブルシェーダしよう(ShaderModel:SM)のしんかとともにこうじょうしてきた。じっさい、げんじょう、SM4.xであれば、かなりふくざつなアルゴリズムのシェーダプログラムをぐげんかすることがかのうになっている。これからもめいれいセットのかくちょうはSMバージョンのかくしんとともにしんかがなされるだろうが、Boydしによれば、Microsoftによせられているのは、シェーダめいれいセットかくじゅうのようぼうではなく、べつのかくどのふまんがよせられているのだそうだ。
それはシェーダプログラムモジュールをじざいにくみあわせられるじゅうなんどのじっそうのしくみだという。
たとえば、あるマテリアルをさいげんするのにきょうめんはんしゃ、かくさんはんしゃ、ほうせんマッピングといったシェーダをくみあわせてひょうげんするが、じっこうじにはそうしたシェーダモジュールを1つにまとめたシェーダとしてこうちくしてはしらせなければならない。とうろくしておいたシェーダプログラムモジュールをじっこうじにじざいにくみあわせてかつようするというしくみは、げんざいのプログラマブルシェーダアーキテクチャではじっそうされていないのだ。だから、げんじょうでは、あるどういつアルゴリズムのシェーダプログラムでも、そのシェーダないでとりあつかうこうげんのかずがことなれば、“べつのシェーダプログラム”としてよういしておかなければならない。だから、じっさいにじっそうしたシェーダアルゴリズムはすうじゅうしゅるいでも、シェーダプログラムじたいはすうひゃく、すうせんというバリエーションをよういしなければならなくなっている。
これは“のこされたかだい”としてそうきゅうにかいぜんしたいとしている。
・GeneralProcessing
GPUのプログラマビリティがこうじょうしたことでこれまでCPUでやらせていたようなはんようけいさんからふくざつなアルゴリズムまでをGPUでじっそうできるようになってきた。こうしたGPUをとりまくソフトウェアパラダイムを「はんようもくてきのGPUかつよう」のいをこめた「GPGPU:GeneralPurposeGPU」というなでよぶようになってきている。
Boydしによれば、じせだいDirectXでは、こうしたGPGPUむけのたいおうがつよくようぼうされているのだという。
GPUでやりたい3Dグラフィックスしょりいがいのテーマとしてはヒストグラムせいせいのような2Dがぞうしょり、たたみこみえんざん、フーリエへんかんのようなたりょうなデータにたいするこうみつどけいさん、ぶつりシミュレーション、りゅうたいぶつりシミュレーション、キネマティックス(うんどうがく)のようなベクトルデータにたいするせんけいだいすうしょりなどがあげられている。げんじょうでもいちぶのテーマについてはじつようかがなされつつあるが、GPUの3Dグラフィックスにとくかされたハードウェアつごうがじゃまになり、じっそうにはそのGPUとくゆうのつごうをかいひしたりきゅうしゅうするようなくふうがひつようになっている。じせだいDirectXでは、GPGPUのためにはいりょしたしくみのじっそうをけんとうしたいということのようだ。
・FutureTrendsinDisplays
さいきんとうじょうしはじめたHDRディスプレイやひろいろいきディスプレイへのたいおうを、そうしたディスプレイメーカーとともにおこなっていることがしさされた。
げんざい、AVかでんのぶんやではDEEPCOLORやXV.YCCといったひろいろいきフォーマットがていしょうされたいおうききもとうじょうしつつあるが、セルソフトがこれにたいおうしてくるかのうせいは、ごかんせいのかんてんからきびしいといわれている。
これにたいし、どうてきなリアルタイムしょりがかのうなPCコンテンツ、つまりは3Dゲームのようなものでは、そうしたたいおうはむずかしくない。たとえば3DゲームグラフィックスにおいてHDRレンダリングされているフレームを、ひろいろいき/HDRディスプレイききとせつぞくされているばあいにかぎり、トーンマッピングのだんかいでひろいろいきフレームとしてしゅつりょくしたり、あるいはHDRフレームとしてしゅつりょくしたりすることはよういだからだ。
じせだいDirectXでは、そうしたしんせだいのディスプレイききへのたいおうがけんとうされているのだ。
■5ねんさきよりさらにとおいみらいのDirectXは?
ちょうきてきなてんぼうのわだいでは、みらいのDirectXは、3Dグラフィックスのはんちゅうをとびこえたコンピューティングにたいおうするかのうせいがしさされた。
IntelやAMDのようなCPUメーカーは、CPUのマルチコアかをおしすすめ、2ねんで2ばいのペースでコアすうをふやしている。また、CPUメーカーは、CPUとGPUとのとうごうをおしすすめるけいかくをうちだしており、そうなればげんざいのような、GPUをきじくとした3DグラフィックスAPIのスタイルでしんかさせていただけでは、みらいのコンピューティングモデルやソフトウェアモデルとのずれがでてきてしまうかもしれない。そもそもそうした、あたらしいコンピューティングモデルやソフトウェアモデルをDirectXでカバーすべきなのかというぎろんもでてくるだろう。
CPUは10ねんいないにはすうコアからじゅうすうコアの「マルチコア」から、すうじゅうコア、さらにはすうひゃくコアの「メニーコア」へしんかすることがかくじつしされている。
さらにぜんじゅつしたようなCPUとGPUとのとうごうのこともかんがえると、ぜんしゅつのGPGPUというテーマも、GPUでどうじっそうするか……というほうさくろんをこえた、よりいっぱんかしたじげんでぎろんするひつようがある。
げんざい、ベクトルコンピューティングのプログラミングげんごとしてMicrosoftは「Accelerator」をていしょうしはじめているし、Intelは「Ct」をアピールしだしている。Rapidmindもしゃめいとどうめいのベクトルプログラミングげんご「Rapidmind」をマルチコアCPU、GPU、Cellプロセッサにたいしてていきょうをかいしした。
よりプロセッサ(CPU、GPU)にちかいローレベルげんごとしてはNVIDIAは「CUDA」、AMDは「ClosetoMetal」をだしてきている。
これらが、もしかすれば、そうしたコンピューティングテーマのためのプログラミングモデルのひょうじゅんをかちとるかもしれないが、いずれにせよ、BoydしはDirect3Dのようなじっそうがむいていることをかくしんしている。りゆうは4つあるとBoydしはのべた。
・1つ、ぼうだいなプロセッサすう(コアすう)のぞうかへのたいおうがよういである
プロセッサすう(コアすう)が2ねんおきに2ばいになっていくというじょうきょうかでは、アプリケーションのかんてんからすればさくせいしたプログラムが、つぎのとしのCPU/GPUではスケーラブルにパフォーマンスがこうじょうすることがきたいされる。そのばあい、アプリケーションはとくていのCPU/GPUにとくかしていてはだめで、しょうらいにわたってCPU/GPUのとくちょうをきゅうしゅうするエンジンてき(≒API)なそんざいがふかけつになる。
こうしたテーマはDirectX(Direct3D)は'90ねんだいのなかばからとりあつかってきたものであり、いちにちのちょうがあるというわけだ。
・2つ、へいれつデータプログラミングモデルへのたいおうがすでになされている
CPUはマルチコアかが、そしてGPUはえんざんきのかずがふやされていくなかで、CPUとGPUはたがいにあゆみよるようなしんかをとげていくことになる。ぐたいてきにはCPUはよりへいれつかしょりをとくいとするようになり、GPUはよりこうどでふくざつなロジックをしょりできるようになるということだ。いずれにせよ、このじだいのCPUやGPUをつかったコンピューティングでは、ともにへいれつデータしょり(DataparallelProcessing)をじっこうさせることがじゅうようになってくるはずだとBoydしはいう。もちろんそうはいってもCPUはそうごいぞんかんけいのつよいちいさなデータのかたまりをふくざつなロジックでしょりすることがまかされやすく、GPUはそうごいぞんかんけいのよわいおおきなデータのかたまりをたんじゅんなロジックでしょりすることがまかされやすい。
おなじへいれつデータしょりではあるが、びみょうにことなるコンセプトのへいれつデータしょりをどうじにこなせるしくみが、とおいみらいのコンピューティングにはひつようになってくるというのだ。それにはやはりびみょうにちがうプログラミングモデルのさいをきゅうしゅうするしくみがひつようになってくる。
Boydしは、それがDirectX(Direct3D)になるのではないか、としゅちょうする。
・3つ、メモリせいのうせいやくのなかでのきわだかのパフォーマンスがえられる
メモリたいいきのこうじょうりつは、えんざんきのしゅうせきこうじょうりつとひかくするとひじょうにゆるやかだ。コンピューティングにおけるスループットはこれからもとうめんはメモリそくどによってあしをヒッパラれるみらいがかくていてきだ。そのためCPUやGPUは、それぞれのとくいとするコンピューティングテーマにさいてきなメモリシステムのじっそうをこれからもしていくことになる。
おそいメモリのよみかきをなげいてもはじまらず、このじゃくてんをいんぺいするようなコンピューティングがますますじゅうようになってくる。
メモリレイテンシのまにあっとうてきなかずのえんざんきをこくしして、さいこうのスループットをじぞくさせるストリーミング・データにゅうしゅつりょくがじゅうようになるのだ。
DirectX(Direct3D)はもともとそうしたストリーミングデータにゅうしゅつりょくをぜんていにせっけいされてきておりユウイなのだとBoydしはいう。
・4つ、じせだいコンピューティングでひつようなきのうをいちはやくじっそうしてきている
CPUにしろGPUにしろ、プロセッサのしんかはたしかにこうどなけいさんをかのうにしたり、たりょうのデータしょりをじつげんかするが、そのしんかのためのモチベーションはなにかといえばじつはこたえはたんじゅん。「あたらしいアルゴリズムをげんじつてきなじっこうそくどでしょりしたり、かいはつしたソフトウェアをよりこうそくにうごかしたい」というところにげんどうりょくがあるのだ。
ゲームアプリケーションは、そのじだいにおいてもっともこうどなコンピューティングテーマをげんじつてきなかたちでリアルタイムじっそうしたけいたいであり、かいはつしゃやユーザーからはとどめなくこうどなきのうやあたらしいひょうげんのじっそうがのぞまれつづける。いわば、じせだいコンピューティングになにがひつようなのかが、ちょっかんてきにわかりやすいかたちでようきゅうされつづけるのがゲームアプリケーションなのだ。
DirectX(Direct3D)はゲームアプリケーションのためのAPIであり、いわばじせだいコンピューティングにひつようなテーマをいちはやくとりいれるまどぐちになってきた。だからこそ、DirectX(Direct3D)は、じせだいコンピューティングのしんかのためのプラットフォームとしてゆうようでありつづけるだろうとBoydしはよけんする。
■まとめ〜じせだいDirectXはじせだいコンピューティングシのちゅうかくをになうものとなる?
こんかいのBoydしのこうえんは、ぜんはんは、げんざいのDirectX(Direct3D)のわかりやすいしんかがたのはなしであった。
しかし、こうはんは、かなりアグレッシブなないようで、じっしつてきに「DirectX(Direct3D)を、マルチメディアコンポーネントAPIから、じせだいのベクトルコンピューティングおよびへいれつデータしょりコンピューティングのプラットフォームとしてしんかさせていきたい」といしひょうめいしたようにもとれて、センセーショナルできょうみぶかい。
CPUとGPUのさかいめがうすれ、なおかつCPUとGPUがとうごうされたみらいにおいても、DirectX(Direct3D)はこんかんAPIとしていきのころうとしているいしがつたわってくる。
げんざいのDirect3Dは、げんじてんでのMicrosoftのさいしんOS「WindowsVista」のGUIコアシステム「AERO」じつげんのためにとうごうじっそうされたが、こんかいのBoydしのはなしを100%そのままうのみにしていいならば、じせだいいこうのWindowsでは、GUIだけでなく、DirectXがコンピューティングシのちゅうかくをになうものとしてとうごうされるようなみらいずがおぼろげながらみえてくる。
(C)2008SampleInc.Allrightsreserved.
-->