しかしそんな不安定すぎるWindowsを使っていると、そういえば思い出すあのゲーム機・・・といってもまだ発売もされてないけど。最近なにかと話題のドリームキャスト。あれにくっついてくるWindowsCEはどうなってるの?っていうかどうなんだ!!!
|
|
市場には二種類のゲームがあって、ひとつはマイクロソフトのDirectXを使ったもの。もうひとつは件のGlideやNECのPowerVR2専用のSGLを使ったゲーム・・・・だいたいはどれでも動くんだけど、Glideでの画面が一番奇麗だっていうのが通説だ。
Glideというのはいわずとしれた3Dfx社のvoodooシリーズ用の専用3DグラフィックAPIだ。
Glide専用ゲームのほうが奇麗だというのは現状ではだいたい正しい(なかにはSPEC OPSみたいなとんでもない画面のものもあるけどね/Glide専用)。
でも、それじゃあ他のAPI・・・たとえば汎用3D-APIのDirectXやOpenGLでああいった奇麗な画面を出すことはできないのだろうか?
少し前までは・・・・たしかにそうだった。3Dfx社は以前からアーケードゲーム用の3Dチップを作っていたし、そのチップをそのままWindowsに持ってきたときに、当時はまだ未熟だったDirectXのAPIからはすべて使うことができない状態もあった。
だけど、今は違う。DirectX6ではVoodooチップが持つすべての機能をAPIとして実装できている。しかもそれは高度な抽象化に成功していて、まったく同じプログラムがVoodooでもRivaTNTでも同じように動作する。
いや、むしろ現在ではDirect3DのほうがGlideよりも豊富な機能を持っている、とさえ言える。世界は好むと好まざるとに関わらず、Direct3Dの目指す方向へ技術革新を続けているのだ。
たとえばジオメトリ演算ハードウェアなどはDirect3Dでは次のバージョンで対応の予定だ。対するGlideは・・・もとよりそんな機能については想定さえしていない。
だからどちらが良いのか・・・と聞かれたとき、答えに詰まることがある。特にこれは、ゲームユーザーではなくてプログラマに問われたときに、答えるのは難しい。しかし一つだけ言えることは、重要なのは手法ではなくて結果だということだ。
たとえばあるプログラムで一秒間に300万ポリゴン描画できるとしよう。しかしそのプログラムができることは、数千ポリゴンのポットを20個程度描画できるだけだったとする。これをGlideではなくてDirectXで書いたら、たとえばモロモロのオーバーヘッド(仮想ハードウェアを想定することによるオーバーヘッド)によって290万ポリゴンに落ちたとする。この、10万ポリゴンの差にどれだけの意味があるのだろうか。
10万ポリゴンは大きいだろうか。しかしゲームの3Dモデルやテクスチャを実際に描いてみれば良く分かるけど、はっきりいって書き方次第でまるで同じに見える物体を、いくらでもポリゴンをケチることができる。それによって一秒間に10万や20万のポリゴンなどはすぐに稼げるのだ。
APIをパフォーマンスだけで比較することはたやすいが、それよりも大事なことは、そこに至るまでの過程、そして将来ではないだろうか。
僕はプログラムが組み易いことが第一だと思う。そう考えればGlideは確かに使いやすい。しかし永久にGlideでいいのかというと、それには疑問が残る。現在はVoodooが世界最速の3Dチップというわけではないからだ。そしてVoodoo以外のチップは、たいていがDirectXとOpenGLにしか対応していない。しかもOpenGLといってもフル機能に対応しているわけではない。
実際にすべてのハードウェアの潜在能力をフルに引き出す可能性を秘めているのは、正しくDirectXだけなのである。
僕は勉強が好きではない。Glideは確かに口当たりが良い。いかにもわかりやすいし、チュートリアルも豊富で魅力的だ。そしてすぐにマスターできる。そのぶんの時間を、API自体の学習とは関係のない部分に費やすことができた。つまり、Glide対応ゲームが美しい画質を実現しているのは、API自体の持つ機能というよりも、APIが簡単なものだったからそのぶん画質の向上に注力できたということにすぎない。
翻ってDirect3Dは、きわめてとっつきにくい。まずサンプルがマズい。わけがわからない。そして難解なWindowsプログラミングを理解しなくてはならない。
しかし、一度使い方を覚えてさえしまえば、喉元過ぎればなんとやらでまるっきり忘れてしまうことができる。実際、僕だってDirect3Zの初期化ルーチンのことなんて殆ど覚えていない。vectorStormシステムをつくるときにほんのちょっと思い出した程度だ。そしていったん使い慣れてしまえば、Direct3Dほど強力なツールはない。実際、Direct3Dのゲームとしても、最近ではGlideを使ったものと比べてまるで遜色ないどころか、むしろより美しい画面を構成することに成功したものもある。G-POLICEやSHOGOの画面を見て、GlideやOpenGLを使ったゲームよりどこが劣るのか、具体的に指摘できる人は何人居るだろう(そして最新のものは、劣るどころかより優る部分のほうが多いのだ)。Glide神話に騙されてはいけない。Glideは、遠からず過去の存在となるのだ。
さらにDirect3Dならではの特徴は、意外にも僕のような小規模学生プログラマにも多大な恩恵を与える。
たとえばちょっとしたノートパソコン(それこそVAIOのサブノートでもいい)を使って、思い付いたときにその場でアルゴリズムを試すことができる。HELでも動作するDirect3Dならではの技だ。実際、僕はいま旧型のLet's Noteで3DFC用のプログラムを組んでいる。電車の中や仕事の待ち時間の暇つぶしにはちょうどよい。無駄な待ち時間を効率的かつ楽しくすごせるのだ。たまに喫茶店でプログラムに夢中になってしまうことさえある。Direct3Dを使う限り、家にこもってオタク族になる必要はどこにもないのだ!(そして奇しくもMicrosoftのDirect3Dプログラマは皆伊達男揃いであることも付け加えておく)
また、なにより、Direct3DならVoodooのような特殊なマニアックハードを持ってない人であってもすぐに使いはじめることができる。せっかく作ったプログラムを、自分とごく小数の仲間でしか共有できないなんて・・・なんと悲しいことだろう。クリエイターであるなら、自分の成果はできるだけ広く、大袈裟に喧伝してまわりたいよね。
そして・・・・Direct3DはGlideよりも圧倒的な頻度で、そして劇的にバージョンアップが繰り返される。そのたびに未来のコンピューティングを垣間みせる魅力的な新機能を搭載して、だ。嘘だと思ったらいどMeltdownTokyoなどのセミナーセッションに参加してみるとよい。Direct3Dがいかにホットなテクノロジーかわかるはずだ。
そしてDirect3Dのコミュニティは限りなく広い。マイクロソフトはどこかのメーカーのように自社のゲーム製品にだけ有利な仕様を盛り込んだり、意図的にメーカーを選んでSDKの配布を遅らせたりということは絶対にしない。正規版がリリースされた時点では完全に同じスタートラインだし、βテストにはどんな人でも参加できる。それだけオープンな姿勢で開発を進めているのである。
大切なのは、Direct3Dを使うこと、学ぶこと、作ること、配ること、そのすべてにおいて長期にわたる実績と、これからの安定性が保証されていることだ。
僕は以前Direct3Dの入門に関する本を書いたが、現在はより高度な応用のためのガイドブックを執筆中である。しかしこれは相手がDirect3Dだからできる商売であって、ユーザーが圧倒的に少ないGlideでは成り立たない。すなわち今後もこの体制はずっと続くだろうし、Direct3Dが世間に遅れをとっていた時代は終わりを遂げ、むしろハードウェアの進化を促し、牽引する方向へと時代が流れはじめたのは紛れもない事実だ(特にX6でのステンシルバッファへの対応の影響は計り知れない)。
僕に言わせれば、もはやGlideとDirectXのパフォーマンス云々を論じること自体がそもそもナンセンスなのである。重要なのは自分自身の3Dシステムをいかに構築し、いかにフォトリアリスティックな(またはゲームに適した)表現を可能にするかということだ。そしてそれは、プログラマ自身の「パフォーマンス」に依存するわけである。
プログラマとしての誇りがほんの少しでもあるのならば、API自体のパフォーマンスを口実に自身の努力を怠るようなことはしたくないものだ。
|
|
|
|
|
とにかくあれだよ。最悪だよ。マイクロソフトのWindowsって奴は。いや、もうさ。そんな話、聞き飽きていると思うけど、それでも敢えて、言わせてくれよ。やっぱ、これ、最悪だわ。
だってね、君、すぐに吹き飛ぶし、せっかくのマルチタスクというのに、フォルダ・ウィンドウのうちひとつでも落とせばすべてのフォルダが閉じちゃうし、エクスプローラもしかりで、ひとつの作業が中断されるのはある程度しかたないにせよ、それをリカバリしようとするとすべての作業が御破算になってしまうのはどうにもいただけない。
これにはきちんと対応してくれないと、マジで困る。
安定しているといわれてるWindowsNTですらこの有り様。DirectXもいいけど、こういう普段からの部分にもっと注力して欲しいよね。
しかしそんな不安定すぎるWindowsを使っていると、そういえば思い出すあのゲーム機・・・といってもまだ発売もされてないけど。最近なにかと話題のドリームキャスト。あれにくっついてくるWindowsCEはどうなってるの?っていうかどうなんだ!!!
翻ってみるに、WindowsCE for Dreamcastのせいでハングアップした記憶はまるでない。ハングアップしたことがあるといえば、それは自分のプログラムが悪いときくらいで、WindowsCE for Dreamcastに限っていえば、けっこう・・・・いやものすごく安定しているのではないだろうか。
もともと嫌われ者のマイクロソフトが作ったWindowsというのは、考えてみればまさに招かざる客でしたよ本当に。しかし憎まれっ子なんとやら。いまやすっかり我々のメインストリームにまでなってしまったWindowsシリーズ。しかし最初からの恨みつらみもあってか「なんだこのクソOSは!」とか「X-Windowならフツー落ちねーぞコラ!」などの正当な批判をものともせず、結局いまでも多数のバグ入りでリリースされまくってるんだよねぇ。
だけど、まぁやっぱり組織的に複雑なものを作り上げるというのがいかに難しいかということだと、僕は思う。
Linuxをはじめとするunix系OSが極めて安定性が高いのは、それぞれの分野のスペシャリスト達が時間をかけて其々好き勝手にコラボレーションして洗練させていった結果だと思うわけ。それに比べたら、WindowsNT開発にかかっている期間や人手なんて、微々たるものだよね。そのうえガチガチの帝国主義。帝国主義がデモクラシーに負けた、というあたりまえの歴史を繰り返しただけなのかもしれない。
まぁだけどね、かといってWindowsCEが同様にヤバイOSなのかどうか、考えてみたいわけだ。例えばカーネルのサイズ。Windows95は全てのシステムを合計すると約24MBになるといわれている。これだけのメモリが常に常駐するわけだ。いわく、Windows95はCPUよりもメモリを積んだほうが高速化する、といわれているのはこのため。
考えてみれば、8MBや16MBのメモリでWindows95が(一応)ちゃんと動いていたというのは殆ど奇跡だと思う。なぜなら、Pentium・・・というかi386のプロテクトモードが要求する仮想メモリ管理用のテーブルが、実に4MBもあるからだ。つまり、4MBは確実にワークエリアとして必要なわけである(厳密にはもっと少なくてもよいが、フルに使うなら4MBは必要になる)。
初期のWindows95マシンはメモリが高価だったこともあって16MBくらいが標準搭載の限度だった。しかし、これではカーネルも全部入りきらない。Windows95をまともに使うには32MBのメモリが必要といわれていたのは至極当然のことだったのである。
そして現在、たとえば128MBのメモリを積んだマシンでWindows95を使うと、殆どスワップがないのでものすごく快適である。これはもうメモリが有り余っているせいで、この状態でようやくWindows95も「枯れた」存在になったわけだ。
たとえばDreamCastに関して、メインメモリがたった16MBしかないというのにWindowsを載せるなんて馬鹿げている、たかが知れている、という観測が強いが、これはまったくのデタラメだ。
なぜなら、DreamCast専用WindowsCEのシステム部分はわずか1.2MBしかないからだ。つまりシステムと搭載メモリの比率は1.2 : 16、つまりシステムの14倍ものメモリを搭載しているということだ。
128MBのRAMを搭載したパソコンで24MBのシステム領域を要求するWindows95を使う場合は、約5倍程度だから、WindowsCEとパソコンとを同列に比較するのはナンセンスだ。むしろDreamcastのメモリにWindowsCEを載せてもなおあまりすぎて困っちゃうくらいだといえる。
まぁしかし、WindowsCEという呼び方はじつにまったくなんというかエキセントリックでまったりとした、営業的にいえば誤解を招きやすい呼称だよなぁと思う。はやくいえばむしろWindowsという言葉の持つネガティブなイメージが強調されガチなんじゃないかと思う。
実際のところ、DreamcastにおけるWindowsCEはどうなのかというと、これはもうDreamcast以外のマシンではまるで動かない、専用OSになってしまっている。コードもすべてイチから書き直しているので僕らが普段使ってるマジかよ本気かよなんでここで飛ぶんだよUSB認識しろよコノヤローまたリセットかよ再インストールかよインシデントかよ勘弁してくれよみたいな苦言爆発街道邁進中のダメOSとはまるで違う!のだ。
理由は簡単。さっきも出たけど、それはWindowsCEシステム全体が非常にコンパクトにまとめられているということだ。
マイクロソフトの悪評がたったのはいつ頃だっただろうか・・・・MS-DOSを売りはじめた頃?でも思い出して欲しい。僕らがMS-DOSでゲームを作っているとき、マイクロソフトに不満を感じただろうか?MS-DOSの機能に不満があっただろうか?僕らの作ったゲームプログラムを、MS-DOSはなにひとつ咎めずにささやかに見守ってくれていたし、そもそもMS-DOS上のプログラムが暴走する原因はほぼ100%アプリケーションの責任だったはずなのである。
システムが十分小さければ、マイクロソフトほどの企業力をもってすれば目立ったバグをほぼすべて駆逐することは決して不可能ではないのだ。
ところがWindows9xやNTともなると、システム全体があまりにも膨大すぎて、これは人類には手出しのしようがないくらいにまで増大している。なにしろ総コードは数百万行にも及ぶ。とても一人の人間が把握できないくらいに巨大なシステムなのだ。
WindowsCEは安定性の面でいえばかなりMS-DOSに近い。APIを信頼のおける相棒として使用し、かつ安定したスレッド・プログラミングができ、さらに高度な統合環境デバッガを使ってプログラミングできるのだ。
そもそも、どうしてWindowsは不安定なのか?ちょっと考えてみて欲しい。僕らにWindows95を作ることはできるだろうか?
これはほぼ絶望的なまでに難しい。あれほど巨大で大規模なシステムを個人の力で作り上げるのはほとんど神業である。マイクロソフトは人類が為し得る最大の研究に力を注いでいるという事実を否定することは誰もできない。マイクロソフトは他者を抑圧するかもしれないが、そもそもソフトウェアを作る権利は誰にでもあるはずだ。しかし、マイクロソフトのようなリスクを賭してまで、あれほど大規模でユーザビリティを考慮し、完成されたシステムを作り上げる企業は世界でマイクロソフトとアップル、そしてBeだけである。
これだけの大事業をしているのだから、穴があるのはむしろ当然である。いや、そもそも数百人の人間の意志と仕事、アルゴリズムをひとつにまとめあげることは不可能に近いのだ。文句を言うのは簡単だが、翻って自分が実際に実装する立場になったことを想像してみるといい。マネージメント、設計、プログラム・・・どれもが想像を絶する激務となるだろう。
反Windows派の見解として、LinuxとX-Windowが安定しているというが、Linuxのなんと小さいこと。Windowsの複雑さに比べればLinuxはきわめて単純明快である。しかしそのおかげでコンピュータの構造をさらけ出し、エンドユーザに薦めることは難しいし、呪文のようなスクリプトを書かなくてはならない。なんのことはない。Unixは本来OSメーカーがコストを賭してしなければならないことをすべてユーザーに押し付けているだけなのだ。
Linuxが唯一Windowsに優るのは堅牢性である。これはWindowsにはまるで勝ち目がない。逆にいえば世界最大のコンピューターソフトメーカーがあらゆる努力を払ってしても完成させることができるのはこの程度のOSであるというこだ。それほどまでに、大規模システムの開発は厳しいのである(経験したことがある方なら肯いていただけるだろう)。
話が脱線してしまったけど、そう考えると、WindowsCEはそれほど悪くない。・・・・いや、むしろそのサイズでWin32相当のAPIとDirectX5の機能をフルセットで使えるなんて、実は、無茶苦茶スゴイんじゃないの!?って感じだ。そう思わない?
翻って考えてみよう。果たして・・・・・果たして、だよ。僕らがそんな仕事をできるかってこと。CRISC型プロセッサを使って、約24MBにまで膨れ上がる膨大なOSを、僅か1.2MB・・・しかも命令が単純なために莫大な容量を使ってしまうRISC型プロセッサで・・・・殆どの機能の互換性を保ったまま(そしてDirectX5については完全に)移植するなんて・・・・・まさに神業だよ!!!!
少なくとも僕にはそんなことは到底真似できない。
セガとマイクロソフトが組むことのメリットについて疑問を持つ人が結構いるけど、こんな離れ業を果たしてゲームばっかり作ってたセガにできるのか?この点だけ考えても、マイクロソフトがWindowsCEという名のDreamcast専用オペレーション・システムを作る意義は大きかったのだと思う。
まぁ、これは結果論だけどね。
|
|
|
|