First impression of the WebGL

2010.02.10

HTML5の周辺技術の一つ、WebGLがどんなもんか様子を伺ってみたのでメモっとく。

WebGL概要

  • Mozillaが作ってたCanvas3Dがベース
  • OpenGL 2.0 or OpenGL ES 2.0をサポートする環境でハードウェアアクセラレートされた2D、3Dグラフィックスを表示する
  • HTML5のCanvasを通じた、JavaScriptとOpenGL ES 2.0のバインディング

リソース

WebGL対応ブラウザ(いずれも開発中)

仕事が早いというか、気が早いというかすでにいくつかのライブラリが公開されてる。

WebGLライブラリ

  • WebGLU ※MIT License
  • SceneJS ※MIT License または GPL Version 2
  • SpiderGL ※GNU Library または LGPL
  • GLGE ※LGPL

※SpiderGLが、PV3Dとかと感覚的に近いのかな?GLGEなんかはシーングラフをxmlで記述したものをベースに作ってく感じで勝手が違う。

上記ライブラリは使わずに、NeHeからの移植チュートリアルを大いに参考にしつつコードも拝借しながら、いくつかデモを作ってみた。いずれも MacBookPro (Mobility Radeon X1600) OSX10.5.8 にて Webkit、Minefield、Chromium で動作確認。
※Mac版Webkit r54648以降だと動作しなくなった。

webgltest01

3D Cube(要:WebGL対応ブラウザ)

webgltest02

3D Cube Matrix(要:WebGL対応ブラウザ)

webgltest03

Billboard Particle(要:WebGL対応ブラウザ)

思ってたよりパフォーマンス出ない。WebkitとMinefieldに関してはGPUアクセラレーションが効いてるっぽいけど、Chromiumでは機能してない感じ。開発中のものにケチつけてもしょうがないけども、回転数が足りなくて一番おいしいとこが使えてないエンジン載せ替えたばっかりのハチロクみたいなもどかしさがある。「JavaScriptでこんなに!?」みたいなインパクトが欲しいな。オレのコードと環境の問題かもしれんけど。
OpenGL + GLSLそのものを勉強する環境としてはカジュアルに取り組めていいと思う。個人的にはかなり勉強になったし。

なんていうか、派手なビジュアル作りに使うってのはむしろ亜流で、もっと地味なとこでじわじわ効いてくる技術なんだろうなーと漠然と思った。
Flashプラットフォームと比較して云々ってのは、なんかズレてる気がする。マーケティング戦略としてはアリなのかもしれんけど。

2010/02/11追記:
ほとんどシェーダーにやらせる感じの4KB intro的アプローチだとどうなるか?と素朴に興味が涌いたので、日本屈指のscener、kiokuさんの4K Procedural Gfx Monitorに付属するサンプルのシェーダーを拝借させていただいてレイトレ動かしてみた。

webgltest04

Raytrace(要:WebGL対応ブラウザ)
※Minefieldだと動かない。要調査。

ブラウザのウインドウサイズに追従するので、あんまりデカくするとキビしいけどなんとか動いてる。この手法ならGPUパワーでゴリ押しできそう。やっぱりJavascriptとのバインディングって釣り合いが取れてないんじゃなかろうか。

随分楽しめたんで、もう満足。
OpenGL + GLSLをちゃんと勉強しとこ。

Projection map study

2010.02.01

projectionmap

Projection map Test(要:FlashPlayer9)
※各Cubeはドラッグで動かせます。

プロジェクションマップの習作。
パフォーマンス悪いなぁ。根本的に考え直さないとダメか。

Beginning PV3D guide book for Flash3D contents develop

2010.01.09

pv3dbasicbook

昨年末、yas@ClockMakerさんのご好意で「Flash3Dコンテンツ制作のためのPapervision3D入門」を献本していただき、年末年始に少しずつ読んだ。yasさんの太っ腹さに感謝。
あざーッス!

総じて懇切丁寧、全項カラーで超豪華。この本を隅々まで読み込んで実際に手を動かし、それでも理解できなきゃPV3D以前の問題なんじゃね?と、言えるくらい基礎から実践+αまで非常に盛りだくさんな内容でお腹いっぱい。PV3DのAPIを使いこなして、Flashコンテンツに3D要素をちょろっと加えたいだけならこれ一冊で十分。

ただ、説明の分かりやすさや冗長さの回避が優先されて、多少語弊のある記述もチラホラ見受けられるので(UVの解説とかシェーディング系Materialあたり)、ネット上に多数ある情報も併せて参照するとなお良い。このへんは入門書のジレンマですな。

「英語わかんね」とかいうモノグサ野郎もこれでバッチシ!PV3Dに興味のあるFlashデベロッパは、手元に置いて損は無いかと。

Take the Blender

2009.11.27

3Dアプリでモデリング・モーション付やって、それをそのままASで扱えたらさぞかし楽しかろうと常々考えてきたにもかかわらず、一向にベストな方法が見つけられないし、出現しそうもないので、自力で色々作り始めてみることにした。

本来、.daeが正しく書き出せて、正しく読み込まれればそれが出来るはずなんだろうけど、現状3dsMAXとかMayaでも持ってない限り可能性が薄い。Unwrap3Dはwin用だし。んで、BlenderのエクスポータでもいじってみようかとColladaの仕様書とか見てみたりするんだけど、これがもーなにがなんだか。

そんなわけで.blend形式。ファイルフォーマットが公開されてるんで、こいつを手がかりに.blendローダーを作成。バイナリ最高。バージョンによるデータの差異は吸収できてないしメッシュの読み込みだけだけど、2.49bのファイルは問題ないとこまで来た。
いいかげんな3Dエンジンらしきものも自作。ジオメトリパイプラインの実装でつまずきまくって、首吊ろうかと思ったけど何とか動くようになった。まだ何かがオカシイので多分どっかの符号間違えてる。苦労した分、オレオレエンジンの成長が楽しくてしょーがない。擬人化したいぐらい。

ここまでの成果として、Blenderで編集したメッシュが.swf側に即時反映されるビューアを作ってみた。画面右がFlashPlayer。

城戸さんそのまんまなのがアレだしショボすぎて泣けてくるけど、これ、ちゃんと作ればかなり便利かも。swfで実際に表示されるまで分からない部分とかが、モデリングしながら確認できるのはメチャメチャ助かる。

当面は、プレハブみたいな実装の3Dエンジンをもうちょっとマトモなものにしつつ、なんとかしてモーションデータの再生までこぎ着けたい。とか宣言して自分を追い詰めておく。
まぁぼちぼち。

Away3D Lite v1.0 first impression

2009.09.12

以前アナウンスがあったAway3Dの高速化に関する話が、Away3D Liteとして結実。
svnリポジトリのtrunk入りしてたのが、ようやく正式発表されましたよっと。
最大の功労者であるsleepydesign の katopzに敬礼!Greate work katopz!

Away3D Lite v1.0: fastest and smallest 3d engine in Flash.

動作が軽いのと共に機能もライト、とりあえず最低限の機能のみ提供されてる感じ。
高機能化の果てに超重量級エンジンになっちゃった本家Away3Dとは別に、パフォーマンス重視専用のライブラリを別展開するという戦略なのか、単に本家の再設計が面倒だったのかはさておき、選択肢が増えたのはありがたいことであります。
どの程度の高速化がなされているかは上記のエントリに掲載されているデモで確認できる。

手元のデータでもやってみた。

away3dlitetest

Dae Performance Test(要:FlashPlayer10)
画面クリックで増殖、減らせないので注意。

sortTypeが上手く動作せずZソートがおかしいけど、3000△ポリ超えてもそこそこ動いてる。

.mqoを扱うクラスも標準提供されているので、メタセコのデータでも試してみた。
Mqo Performance Test(要:FlashPlayer10)
※モデルデータは、もとがしさんが配布されているものをお借りしました。

今までが1000△ポリあたりで限界だった事を考えると、このくらいのローポリモデルが扱えるようになったのはスゴイな。ビルボードとかPlaneとかを大量に使いたいみたいなケースにはもってこいかも。

触ってみた感触として、

  • 本家とは完全に別物であることを再確認。
  • APIがPV3Dの1.5〜1.7あたりと似た印象。
  • 未完成な感じが否めない(謎挙動・sortTypeのバグとか)

とか思った。

Matrix3Dなどのコアクラスが自前のものではなく、全部ビルトインクラスに置き換わってたりして、FP10の3D機能を体系化した3Dエンジンのひな形として参考になりそうではある。これをベースに自分好みのエンジンに調教するのもアリなんじゃねーかと。