この記事はGLBoost Advent Calendar 2016の1日目の記事です。
はじめに
みなさんこんにちは、GLBoost開発者の @emadurandal です。
去年、WebGL Advent Calendar 2015 で こんな記事 を書きました。
それから1年。ゆるふわなノリで始まったWebGLライブラリはどこまで成長したのか。どんな感じのライブラリになっているのか。もし冷やかしに見てみたい人は見にきておいで! ということでAdvent Calendar作っちゃいました。
日本人って、「もっとちゃんとした状態にならないと恥ずかして外に出せない」とかそういうのあるじゃないですか。
打破したいんです。そういうの。ならまず自分からだよね。ってことで、恥を忍んでやっちゃった次第。
みんなもやるといいよ!
GLBoostとは
まずはGithubのプロジェクトサイトをご覧ください。
https://github.com/emadurandal/GLBoost
しょっぱなから「このライブラリはまだ開発の最初期段階です。 使い物になる状態になるまで、もうしばらくお待ちください。」なる文があって、これで多くの方に素通りされている感はあるのですがw
実を言うと機能数とかはまだすごい少ないんですが、ライブラリとして全く体をなしていない使えない状況、というわけではありません。
コンセプトで
"Convenience like Three.js, Infinite Flexibility like raw WebGL, We get both."
(日本語訳)Three.jsのような便利さ、そして生WebGLのような無限の柔軟性。両方取りするぜ!
って感じで強気にぶち上げてますね。まぁ実際にできるのか、についてはなかなか大変ですが、目指すところはそこだったりします。
世にあるWebGLライブラリは、WebGLのローレベルの機能・APIを内部でうまく活用して(隠蔽して)、ユーザーサイドとして本質的に3Dでやりたいことを高級APIを通してできるようにするものが多いです。
なので、便利なんですけど、その点CG研究者やゲーム開発者がやりたいような、レンダリングのいろんな実験とか、レンダリングパイプラインに介入してガリガリカスタマイズするとか、そういうことはやりにくい設計になっていたりするんですね。
そこで、GLBoostでは、便利さは狙いつつも、カスタマイズ性・WebGLとしての柔軟性は手放さない、という設計思想で行こうとしています。
GLBoostでどんなことができるの?
まずは公式のサンプルページをみてください。これらはデモンストレーションというより、むしろそれぞれの3D機能がちゃんとエラーなく表示できるかのテストページに近いので、派手なものは全くないんですが(汗)
あとは、GLBoostの熱心なユーザーさんである @cx20 さんのjsdoページとかですかね。
あとは、私 @emadurandal が作っている3DRPG制作Webサービス「WebRPGTool」では、最初3D実装にThree.jsやBabylon.jsを使っていたんですが、少し前からGLBoostに切り替えています。
GLBoostの特徴と現状
サポートされている機能を列挙しますね。
- 頂点データを与えて表示するMeshやGeometryクラス
- カメラクラス
- クラシックなマテリアルクラス(物理ベースにはまだ未対応です)
- スフィアや平面、四角形などのプリミティブクラス
- Objファイルローダー
- glTFファイルローダー(スキニングアニメーションまで対応しています)
- アニメーション機能
- スキニングアニメーション機能
- Phong、Lambert、HalfLambertシェーダー
- ドノーマルなForwardレンダラー(Deferred未対応)
- ドノーマルなシャドウマップもできなくはない
うーん。ちょっとまだお寒い状況ですね。この2016年においては。
なので、まだThree.jsのようなメジャーなライブラリには全然比べ物になりません。まだ生暖かく成長を見守って頂くフェーズではあるのですが、それでも恥を忍んで、世に出しちゃうのは結構大事なことだと思うんだ…。
GLBoostの今後
国産2Dゲームライブラリphina.js
との連携
もともとこのGLBoostプロジェクトは、私の友達の @phi さんが作られている2Dゲームライブラリ phina.jsの3D機能部分として機能するよう、開発を始めた…はずなのですが、いつの間にか単体WebGLライブラリになって今に至る状況です。
(ただ、すでにphina.jsと疎結合で連携できるようにはなっています)
今後、より深く連携できるように、ということで @phiさんたちと話はしていまして、おそらく今後何か展開があるのではないかな、と思います。
今後の機能増強について
以下を予定しています。
- PBR(物理ベースレンダリング)対応
- Deferred Shading対応
- もう少しまともなシャドウマップ(影)を
- 処理パフォーマンス向上
- TypeScriptでコード書きなおし
- Low、Middle、Highと3層に設計をレイヤー分けし、好きなレイヤーで開発ができるようにする(別途記事で解説)
- 3Dゲーム開発に便利なよう意識して開発
最後に
GLBoost、どんなライブラリなのか。どんな状況なのか。知っていただけましたでしょうか。
まだまだ未熟なライブラリではありますが、これからどう成長していくのか、見守っていただけると幸いです。
本記事はGLBoost Advent Calendar 2016の最初の記事ですが、この後もバンバン記事を公開していきますので、どうぞお付き合いのほどを。