4,3 VRMLの表示が遅くなる理由
これまでVRMLを紹介してきたが、3D立体画像になれば確かによりリアルに表現は出来る。が、まだこれまで一般的にはあまり広まっていないのが現実である。
特に、Netscapeでは立ち上げるとJavaを起動してしまうし、表示をするのに時間がかかる。
では、なぜそうなのか。立体を表示するのに時間がかかる理由を検討してみる。VRMLには次の4つのサブシステムがある。
- User Interface
描画するVRMLコンテンツのレイアウトを制御するサブシステム。VRMLブラウザのボタンやメニュー、描画エリアの位置決めなどを行い、ビジターがいずれかのボタンをクリックしたり、メニューからアイテムを選んだり、描画エリア上のモデル上にマウスを動かしたりすると反応する。
- World loader
VRMLコンテンツ内のテキスチャ・イメージや音声、スクリプトのローディングを行うサブシステム。また、読みこんだVRMLファイルに記述ミスなどがないかどうか調べるのも、このサブシステムの役割でもある。
- World management
ビジターの視点や行動の特徴を随時追跡したり、管理したりするサブシステム。例えば、ビジターがVRMLコンテンツ内にあるモデルと衝突したりすると、ビジターに対して衝突したことが伝わるように対処する。さらに、センサーやスクリプト、音声、イベント伝達回路の状態を管理するのがこのサブシステムである。
- World drawing
「World management」サブシステムと連携して、モデルをディスプレイ上に表示できるように変換するサブシステム。ビジターによって何か変化したり、アニメーションが変更になったりする度にロードされたコンテンツの情報を再スキャンしてモデルの再構築を行う。
ここでは、4番目のWorld drowingでピクセルで画像を用いるシステムについて次のように述べてみた。
3次元をブラウザ上で表示するのに一連のプロセスがある。(下図) 高度に最適化されたVRMLコンテンツでは、3次元モデルの情報はVRMLを表示するのにスムーズにいくが、最適化がうまく行かないと流れがうまくすすまなくなってしまう。
このプロセスはアニメーションをかけたりすると、はじめからプロセスする、

図1 Cubeノードでの3角形の分割 |
立体画像の表示は全部3角形で構成されている。箱、円錐、球のノードは左図のように3角形の構成となっている。
なぜこういうことを述べたか言うと、それぞれの形は左図のように3角形に分割して送っているからである。各ステージの働きを下の表にあらわした。
ステージ |
主なデータ の種類 |
主なノード・タイプ |
Transform |
頂点座標、座標変換マトリクス |
Geometry, Billboard, Transform, Viewpoint |
Backface cull |
頂点座標 |
Geometry |
Compute lighting |
頂点座標、 色値、光度 |
Geometry, Appearance, Color, DirectionalLight, Fog, Material, Pointlight, SpotLight |
Texture transform |
イメージ座標、 イメージ変換マトリックス |
Geometry, TextureTransfor |
View cull and clip |
頂点座標、 イメージ座標 |
Geometry |
View project |
頂点座標 |
Geometry, Viewpoint |
Rastarize |
頂点座標、 色値、 イメージ座標、 ピクセル値 |
Geometry, Background, Imagetexture, MovieTexture, PixelTexture |
|

図2 Sphereノードでの3角形の分割 |

図1 Coneノードでの3角形の分割 |
それぞれの各プロセスを説明すると、
- Transform
3角形のそれぞれの頂点座標を、並行移動や回転、スケーリング等を用いて、ビジターを中心として特別な座標へ変換する。
- Backface cull
受け取った3角形が見ている人に接してる面をさぐる。モデルの背面側と内側は表示する必要がないので、表面に値する部分を次のプロセスに持って行く。
- Compute lighting
分割した3角形に対して、光の強度を計算する。これにより立体表示を計算している。
- Texture transform
3角形にテキスチャ・イメージ(jpg, gif等の画像ファイルと考えていいだろう)をマッピングするときの座標地を計算するときに用いる。3角形がテキスチャ・マッピングと関係なければ、次のプロセスに進むことができる。
3角形がテキスチャ・マッピングと対応していれば、そのイメージの座標に対して、平行移動や回転、スケーリングを行い、その後はイメージの座標値は、3角形の3つの角に合致するように計算される。
- View cull and clip
このプロセスには、3角形が見ている人に視界に入っているかどうかチェックし、視界に入っていなければそれは排除され、視界に入っていれば次のプロセスに進む。
もし一部であれば、視界でない部分を切り取り、次のプロセスへ送る。
- View project
それぞれの3角形を2次元の平面状に投影する。
- Rasterize
3角形をピクセル・データに変換し、ディスプレイに表示する。それぞれの3角形に色をつけるのもここの機能に入っている。
プロセスを進むと、例えば表示が遅いときは、データがそのどこかのプロセスにおいて詰まっていると言える。そのゲインとして次の3つが挙げられる。ちなみにその詰まってることを束縛状態と呼んでるが、それは”bound=束縛する”ということだから、そういう風に用いた。
- coordinate-bound
座標データの演算処理が原因で起こる束縛状態。
- pixel-bound
ピクセル・データを生成するために必要となる演算処理が原因で起こる束縛状態。「Rasterize」が発生元。
- texture-bound
テキスチャ・マッピングに関する演算処理が原因で起こる束縛状態。「Texture transform」が発生元。
coordinate-boundはおそらくCPUに関して言えることだから、演算処理には問題はない。一番問題となるのRasterizeだと思う。例えば、ペイントを用いて1000ピクセルぐらいの大きさで絵を書いてしまうと、当然ファイルサイズもでかいし、表示するのにも時間がかかる。これか3Dに影響するのは当たり前だと思う。
この例は、例えばブラウザの中にはるか遠くに見える惑星があり、その惑星に複雑な地形が表示してあれば、遠くにある分ピクセルで表示するのはあまり時間はかからないが、演算処理がそれよりも時間がかかるだろう。
そして、その地形を拡大(接近すること)すると画面が大きくなる分、ピクセルデータも多大になり、演算処理よりも遅くなってしまう。
←BACK ↑TOP NEXT→
|