three.jsはやっぱりRetained Modeの現代版ですな。

公開:2016-09-27 21:21
更新:2020-02-15 04:37
カテゴリ:three.js,electronでrydeenの動画を作る

RYDEENのカバー曲動画づくりをelectronで作っている。electronはお手軽な3Dグラフィックプログラミング環境として利用している。three.jsを使わないとお手軽にはならないけど。。

しかし、このようなことがJSでできるようになるなど20年前に想像できたであろうか。 大体この手のことを20年前の環境でやろうとすると、DirectX APIをC++で使い、難しい初期化を行ってポリゴンを一枚表示しておなか一杯になるような状況だった。私のレベルでは。 DirectXはCOMベースのAPIで、これがまたC++のお作法とは微妙に違うオブジェクトモデルだから、リソース管理などもデストラクタでラップするなど工夫せねばならず、面倒くさいことこの上ない代物だった。 そのような敷居の高いDirectXであったけれど、初期のころのバージョンはRetained Modeという上位APIが用意されていて、.x形式というモデルデータを用意すれば、比較的短いステップで3Dデータを表示できた。

それの下位レイヤとしてImmediate Modeというのがあって、これは頂点データを直接ハンドリングしてごにょごにょする玄人向きのAPIであった。 バージョンが上がると今度はプログラマブル・シェーダーというのが出てきて、GPU側の頂点座標変換コードやピクセル描画部分のコードをユーザーが書けるようになったが、これはさらに初心者の敷居を上げることになる。 さらに上位APIのRetained Modeは廃止され、ライブラリに置き換わった。このころから私はちょっとついていくのがつらくなった。

時代は変わり、気がつくとブラウザにWebGLなるものが実装された。これは低レベルのライブラリで、やはりシェーダーコードを書かねばレンダリングすらできない厄介なAPIである。 「厄介だけれども楽しい、楽しいけれども厄介」的な感じではあるけどね。

three.jsというライブラリを使うとそのようなシェーダーコードを書くという敷居から解放され、比較的に短いステップで3Dモデルを表示できるようになる。

この簡便さはRetained Modeに通じるものがあると思う。

マテリアルでシェーダーコードをハンドルするという設計も理にかなっているような気もする。 最初は出来合いのマテリアルを使っておいて、物足りなくなったらシェーダーマテリアルで高度な表現が可能となるところもいいね。 さらにはexampleに有用なヘルパが用意されており、ポストエフェクトなども簡単にできるようになっている。至れり尽くせりのライブラリだなーと思う。