たいていのADVシステムは3Dを使っていても3Dではない

ある種当たり前のようなことを言っているようですが、当たり前でないような気がしているので書いてみます。この場合の「3D」の意味について考えてみてください。

 

そもそも3Dとは?

普通に「3D」と言われれば言われるまでもなく三次元空間、つまり「縦」「横」「奥行き」の三方向の状態があることを意味します。コンピュータグラフィクスの場合はそれをディスプレイのような二次元平面上に投影する、という作業をフレーム単位で行い、その差分によって人間は奥行きを追加したような見え方を覚えるわけです。ちなみに最近では3DVisionのように左右の目で異なった映像を見せることで実際に奥行きがあるように脳に錯覚させることもできるようになっていますが。

ただ、この「3D」を作り出すときにはグラフィックにものすごい負荷が発生します。一般的には「空間上の座標を平面上の座標に変換する」「スクリーンにオブジェクトが持っている画素を投影してゆく」を繰り返すことで描画を行いますが、この数がシミュレーションの度合いを上げれば上げるほど莫大な数の描画が必要になったり、描画法が特殊になったりするためにそれをサポートするために3Dとして描画を行うグラフィックカードのプロセッサはその作業を高速に行えるような作りになっています。

 

ADVシステムはその副産物を借りることで高速化+きれいな描画を行っている

実際には副産物なんですね。昔からある紙芝居形式のADVシステムで、たとえば各レイヤーが持つべき情報としては

  • サイズ(キャンバスの縦、横)
  • 2D平面上で描画するべき位置(x,y)
  • 透過率(たとえばフェード状態などで使用)
  • 各軸に対する拡大率
  • オブジェクトの中心に対する回転角

となります。拡大や回転はADVシステム上ではエフェクトとしてよく使うのでレイヤーに対してパラメータとして持たせることが多いです。

そのうち、下の三つ(透過率、拡大率、回転角)は昔はCPU(ADVシステム)側で処理していたのですが、3Dの描画が普通のPCでもできるようになって以来、グラフィック側で行った方が圧倒的にきれいで早い、という状態になりました。特に拡大率と回転角の場合が顕著で、中途半端な倍率や回転角にすると「どの画素を参照するか」「参照すべき画素が整数座標にならない場合、どのような画素値を返すべきか」というのがCPU(ADVシステム)で実装すると非常に面倒かつ重かったのですが、3Dの場合はその中途半端な状態が大量に現れるので補間は基本処理として実装されるくらいであり、高速に処理できるので、そちらに任せてしまった方が良いわけです。さらに言うなら拡大なんかの場合はこのblogでも紹介しているようにPixelShaderを使用することで三次補間Lanczosを使ってフレーム単位で処理ができるわけです。これをCPUだけでやろうとすると最新のCPUを使ってもかなり厳しいです。

 

ADVシステムで3Dの状態を使っているのはまれ

というわけでこういう話になります。内部的に3Dの描画(絵をテクスチャに展開してポリゴンに貼り付けて描画)を行っていても、その3Dオブジェクトの座標を見ると3D座標ではない、もしくはZ座標を一定に固定して等倍変換を作り出して処理をしている、ということになります。ちなみにこれを確認できるおもしろい方法が3DVisionを併用する方法です。対象のADVシステムを無理矢理3DVisionを有効にして動かせばおもしろいものが見られるかもしれません。動かすには変わったツールが必要なので難しいかもしれませんが。

もちろん、3DVisionを使ったときに立体視すらされず平面的に描画されているからと言って内部的に3D座標がない、とは断言できません。Direct3D9以上を使っていなければ反応しないですし、画面に描画する最終形態が3D座標系でないと立体視がかからないので。マルチパスレンダリングを使い3Dで描画した後で補間処理で拡大描画をするために奥行き情報が飛んでいるという可能性があります。

そうなってくるとレイヤーで効果を扱うADVシステムで3D座標系を使う意義はたぶんほぼないと思いますので、たいていのADVシステムは3Dを使っている(描画の補間などの目的で3Dテクスチャを描画している)が、3Dではない(3D座標系をまともに使っている状態ではない)と思います。あと、AndroidやiOSなどにあるOpenGL ESを使ったときに同じようなことを考えてももちろん似たような結論が得られます。

 

なお、単に個人的な見解なので反証は認めます。(というか反証がないと微妙)

LINEで送る
[`fc2` not found]
このエントリーを Google ブックマーク に追加

コメントを残す

メールアドレスが公開されることはありません。

*

この記事のトラックバック用URL