<DIRECT X 概論>

  02/07/02


1.WINDOWSとは何か?

 Direct X(DX)について語るには、まずはWindows(Win)について話さないとならない。DXとはOSに付加される一種のプログラムであり、Winの機能の一部を補完するものになるからだ。

 そもそもWinとはPC上で何をしているのか? これはPCに詳しく無い人にとっては謎が多い部分かもしれない。OSと呼ばれる管理プログラムというのはわかるが、機能的にはどんな事をしているのかという事である。
 まず基本的なプログラムやシステムの提供というのは誰でも気付く点だろう。例えばファイルの管理をするエクスプローラや、各種システム関連のメンテナンスや管理ツール等、マシンを動かす上でどんなソフトでも使うであろう必須ツール(プログラム)を提供するという役割がある。これらをWin上で動作する各プログラムが全て自前で用意するとなると非常に無駄が多く、OSが提供する物を皆で使用する方が遥かに効率的である。

 ここからが本題になるが、Win(OS)には複数のプログラム(タスクやスレッドとも呼ばれる)を同時に動かすという機能が要求される。もしも動くプログラムが常に一つしかないのならば、マシンのハードウェア全てをそのプログラムが勝手に使えば良い。言ってみれば家庭用ゲーム機というのがこれに当り、あるゲーム(プログラム)が終了したらCDを入れ替えて再起動というシステムなので、マシンの資源(ハードウェア)管理に関しては複雑な問題は生じない。イメージ的に捉えるならば、部屋の中にハードウエアがあってそれを一人しかいない人(プログラム)が自由に使うという風になる。
 しかしここで複数のプログラムが同時に動くとなると、限りあるハードウェアを各プログラムが思い思いに使ってはマシン全体が協調して動く事が出来ない。例えばあるプログラムが使用しているハードウェアを、他の者が割り込んで使用するとかが起きると問題が生じてしまう。これを解決するには2つの方法がある。一つは各プログラムそれぞれがお互いのことを考えて動くというシステムだが、これはそれぞれのプログラムの作成に負担が掛かるし安定性にも欠ける。そこでどうするかというと、管理役のプログラムを置いてそれに資源(ハードウェア)を管理させるというシステムを使う。その役割を果たすのがOS(Windows)である。

 イメージにすると、部屋の一方にハードウェアが存在しており、反対側にプログラムが多数存在している。その中央に仕切りがあって、そこで受付作業をしているのがWinという風に考えてもらえば良いだろう。プログラム側は何かをしたければ窓口を通してWinに要求を出す。Winはそれを自分でハードウェアにやらせて結果を返したり、或いはメモリ等を要求に応じて「この領域だけ使用して構わない」といった許可を出したりするという図式である。
 原則論としては大小含めて何万種類もあるプログラムがどのような組み合わせで何個同時に動こうがWinは安定して動作しないとならず、その為には今マシンで何が起きているかを常に完全に把握している存在がなければならない。その管理者がOS(Windows)という事である。それを実現するには作業の窓口を一本化してやり、勝手に各プログラムが処理をしないようにする必要がある。常に窓口を通してやる方式ならば別のプログラムが同じハードにアクセスした時でもWinはそれを把握出来るので、片方を待たせておいて処理を続ける事が出来るからだ。

 しかしながらこのシステムには一つ大きな欠点がある。何をやるにも窓口を通すというシステムはプログラムが自由に振舞えないという事であり、とにかく速さを要求される処理には向いていない。WPや表計算ソフトのある処理の時間が1/1000秒から1/10秒に遅くなっても気にする人はいないが、高速に画面やサウンド処理をするゲームにとっては何百分の一秒のラグでも致命的な遅れに成りかねない。ゲームのマニュアルに「パフォーマンスに問題がある時は、出来るだけその他の常駐プログラム等を終了させてやるように」とあるのはこの問題を出来るだけ避ける為である。しかしたった一つのプログラムだけにした所で処理をするには窓口を通すという事には変わりは無く、勝手にプログラムがハードウェアにアクセス出来る訳ではない。自分しか動かないから独占的にハードウェアを使用させろという命令はWinには存在しないからである。
 その点家庭用ゲーム機のような形態ではプログラムがハードウェアを独占的に使用出来るので、そのマシンの性能を存分に引き出す事が出来る。よって同じ程度の性能を持ったハードの場合、PCのWinを通す形態では窓口での処理が入る分、高速性を求められるゲームにおいては何割かの性能ダウンは避けられない。その為にWinが出始めてから5年程度の間(1993〜97頃)、高速なアクションゲームはWinを使わずに従来のMS-DOSでの発売が多かったのである(MS-DOSはシングルタスクのOSなので、ゲームは単体でマシンを起動してハードウェアを独占的に使用出来るから)。
 もちろんこういった複数のプログラムを同時に動かすシステムがあるから、日常作業をするのにWPやネットブラウズ等を「逐一使うごとに終了させて他のプログラムを起動する」といった事無く使用できる訳で、その恩恵を考えると別に悪いという事ではなく大きな利点と捉える事も出来る。ゲームにしてもICQやIRCといった通信ソフトやその他の様々なソフトを起動させた状態でもプレイが出来るといった便利さもある訳だ。

 参考までに書いておくと、このWinの支配度にはOSによって差がある。Win95、98に比べるとWin2000やXPはそのOSの支配度が高く、個々のプログラムをより強く縛るというシステムになっている。感覚的にわかると思うが、各プログラムの動作をキツく監視・制限するほどシステム自体の安定性は高くなる。Win2KやXPは安定性を高める事を考えているのでプログラムの動きの自由度は低い。よってマシンは落ちにくいが高速性を求めるゲームには不利なシステムでもある。逆に98系は速さの為には若干の安定性は犠牲にというシステムなので、ゲームは速く動くがOSの安定性は低く、ゲームが落ちるとマシンごと停止するといったケースが多くなるという欠点が存在している。


2.Direct Xとは何か?

 上で述べたようにWinがリリースされても、ゲーム会社は処理が遅くなるという理由で相変わらず単体起動のMS-DOSでのゲーム製作が中心であった。そこでMicrosftが考えたのが高速でハードウェアにアクセス出来て、Win上からでも速いゲームが出来るような仕組みである。それがDirect Xという事になる。
 しかし実際の導入にはかなりの時間が掛かり、Win95がリリースされた95年からリリース自体は始まったのだが、機能的にも安定度にも問題があって普及は進まず、ようやくバージョンが5.0になった頃に性能的にもある程度は確保できて安定度も上がり広く使われるようになった。その98年頃からは一気に広まる形になって現在に至っており、現在ではWinにてゲームをやるには欠かせないシステムにまでなっている。

 DXをイメージ的に捉えるならば、通常のWinの窓口の他にDirect X専用の窓口を別に設けて、高速性を要求される処理に付いてはそちらの窓口から通すという形態になる。これからもわかるようにDXはWinというOSの一部であり、Winの追加仕様プログラムと考えていい。現在のWinには最初からインストールされているが、新しいバージョンが出ればそのプログラムを手に入れて(無料でDownload可能だしゲームのCDにも大抵は入っている)インストールしてやればOK。
 DX側の窓口にはグラフィックカードやサウンドカードを高速で動作させる為の命令が用意されており、高速で動きたいゲームのプログラムはこちらへ専用の命令を使って要求を出す事で、高速なゲームの動作を実現する事が出来るという仕組みである。もちろんハードウェアを高速で使えるという代償に、システム全体の安定度は多少犠牲になる。

 実際にゲームを動かすのに必要な具体例は他の項に譲るとして、ここではDXの意義や利点について話しておこう。DXやWinといったOS部分の役割として、各プログラムの製作の負担軽減という非常に重要な要素がある。
 もし仮にOSという物が存在しない場合、各プログラムは自前で全ての処理システムを用意してやらないとならない。なぜならそういう事をやってくれるプログラムが存在しないからである。しかしどんなプログラムでも使用するような処理を全てのプログラムが独自に用意するというのは無駄であり、作成の為の負荷も非常に大きい。そこでこういった一般的な処理を共通で行う機能を持った物が必要となってきて、それがOSの重要な役割となるというは冒頭にも述べた。つまりOSに用意されている機能ならばそれはOSを呼び出してやってもらえば良い訳で、自分は自分の処理プログラム部分だけを作成すれば良い事になるからだ。実生活に例えるならば、ある種の処理を役所等で行う場合に、必要事項を書いた書類を順に指定された窓口に持って行って後は処理が終わるのを待つだけというシステムの方が普通の人には便利という事。これがもし無人の役所で、処理を行いたい人間はそれに関する法律の本を読んで必要な手続きを学び、自分で必要な書類関係を調べてから処理に必要な場所に行って所定の方法で全て自前で製作して下さいと言う事になったらどうだろうか? 確かに全てがわかっている人間であれば受け付けの職員が処理する時間を待たないで良いので高速で仕上がるかもしれないが、多少完成までの速度は落ちても自分に負荷が掛からない方式の方がほとんどの人にとっては利便性が高いと言う事だ。

 実はDXについても同じ様な考え方で製作されている。各ゲームはDXを通して命令を出すが、これは高速で処理されるとは言えやってくれるのはOS部分(DX)であるのは間違い無い。言ってみればこのやり方でも、直接プログラム自身がハードにアクセスし操作する方式に比べると速度面では劣るという事になる。しかしPCではハードの種類が多く、ビデオカードやサウンドカードの種類は多数存在している。ここでハードを直接アクセスする方式の場合だと、それぞれのハード毎に異なった処理プログラムを用意してやらないとならず、プログラム製作側に掛かる負担は非常に大きい。そこで処理関連を出来るだけ統一してしまい、各プログラムの製作を簡単にするという役割もDXは担っているのだ。
 つまりゲーム側はDXの仕様に則ってプログラムを作成する事で、どんなハードウェアがそのマシンに搭載されているのかを考えないで良いと言う事。ゲームはDXにやってほしい事を要求し、DXはそれをそれぞれのハードのドライバに渡す。ドライバはその処理を自分の受け持つハードウェアにやらせて結果をDXに返し、それをDXがプログラムに返すという仕組みになる。DXは普通にWinを使う時に比べて高速処理を実現すると同時に、ゲーム製作側の負担軽減にも重要な役割を持っているという事になる。これらをまとめると以下のようになる。

◎プログラム側は接続されたハードの種類の事を考えないで済むので製作が楽(あくまで理想論だが)
◎共通した仕様を皆で利用するので無駄が無いし、トラブルも軽減される
◎ハードを買うユーザー側も、ビデオカードやサウンドカードを選択出来る幅が広がる

×直接ハードを制御する事を制限するので速度は犠牲になる。或いは速度を出す為にはシステムは高価になる。
×共通した仕様を使ってプログラムを組むので独自性には欠ける。他社とはまるで違うレベルのゲームというのは作りにくい。



 これとは対照的なのが家庭用ゲーム機である。Xboxなどは上記のPCに近い考えで作成されているが、それ以前のPS2等はPCとは異なった路線になっている。PS2では単体でプログラムが動作するのでハードウェアへも高速でアクセス出来るのだが、その分プログラムの製作には大きな負担が掛かる事になってしまう。PCで言うならばOSに当る部分までそれぞれの会社にて製作可能という意味になり、ゲーム製作はそこから始めないとならない事になるからだ。その為にはゲーム機自体のハードがどんな仕組みで動くのかの解析から始まって、安定して高速でハードを動かす為の高度なプログラミング技術も必要となってくる。ハードウェアというのは高速性を求めて直接制御しようとするほどプログラムするのは難しくなるので、ゲーム製作には多大な時間と大量の人員が必要になる事に。

◎ハードウェアを独占的に使用し直接制御するのでマシンの性能を十分に引き出せる。その為性能の割には安価というのが可能になる。
◎自社に技術力があれば他社には真似出来ないようなゲームの製作も可能
◎搭載するハードの選択の余地は無いが、その分そのハードに合わせたチューニングが可能

×ハードを直接コントロールする分、プログラムやデバッグには膨大な時間と人員の投入が必要でコストが掛かる
×各社が独自に自分達でプログラムを作成するので、業界全体で見ると人的・知的資源の使用効率は悪い
×共通して誰もが使えるプログラムシステムが最初の内はほとんど無いので、中小の製作会社は(少なくとも最初の数年は)参入しにくい


 これらをまとめるとPCのゲーム製作環境のスタンスは、マシンの本来持つパワーを100%は引き出せなくても、DXというシステムを共通のライブラリとして使用する事で、ゲームの製作負担が軽減されてコストが安く収まるという方式を取り入れているという事になるだろう。


  戻る