W3D

javascriptで3Dのデータを扱いやすくする目的で作り始めたライブラリ
主にWebGLでの使用を想定しているが、基本的には使用目的を制限することなく汎用的に3Dのデータを表現できるものを目指している
2015/01/31現在ではまだ仕様が定まりきっていないので今後かなり大きく変更が加わる可能性があるため、ライブラリ自体はまだ公開できないです
とりあえず、MQOファイルをインポートして無理やりフラットシェーディングで描画するくらいは出来るようになったので、さわりとして描画サンプルを公開
何気に非同期読み込みでファイルを取り込んだり、描画準備も非同期だったりと自分にしては新しい試みも
ソースコードが気になる人はサンプルページを解析してね
サンプル


ちなみにMQOのインポート自体はライブラリとは切り離して、拡張機能として搭載
jsファイルが分かれていて必要な時だけ差し挟むとインポート関数が使えるという
javascriptって色々考えられてて面白い仕組みだわ


↓以下戯れ言

プログラマブルシェーダが登場して以来、3Dのデータって非常に曖昧になってしまって表現が難しいんだよね
頂点位置ですら3次元とも限らないぐらいなんでもしていい状態
便利な反面、非常に扱いにくい
マテリアルといえば昔はフォンの反射モデルの拡散反射、鏡面反射等々+テクスチャ等程度の物だったけど、今は個々人勝手に定義できてしまう
今の主流は物理ベースレンダリング向けのマテリアル(ラフネスとかメタルネスとか)が主流だけどこれだっていつまでスタンダードか分からんし

そんなカオスな3Dの世界に、なるべく便利で自由で柔軟な新しい時代のフォーマットを作るべく日々頭を捻っている次第でございます
ていうかそもそも3Dって画像で言うDIBみたいな統一的な標準フォーマットが昔から全く存在してないんだよね・・・
もう21世紀ですぞ
こんなの異常事態だと個人的に思うの
一応今のデファクトスタンダードといえそうなのはfbxあたりがファイルとしてもっとも互換性あるかな?
SDKが公開されてるのが強みか
でもjavascript用ライブラリが無いのでwebで使えねえ・・・

まあ自分のライブラリで標準化を計ろうと言うわけでもないけどね
基本自分のために作ってるライブラリ

目下悩みは頂点属性の取り扱い
頂点位置や法線ベクトル、UV等々もまたシェーダによって自由に決まる属性なのだが、これらが後から決まる設計にするのは中々難しそう
予め頂点位置に対する処理、法線ベクトルに対する処理とかを設定できないから
今製作進めながらその辺を模索中・・・

VBOとIBOというOpenGLのデータ表現は正直欠陥品レベルだと思う
一つの頂点に対して、それを参照する面によって異なる複数のデータを持つ頂点属性とか(例えばスムージング角を使った頂点法線、UV座標など)全然対応できない
例えば二つの面で頂点位置は共通だけどUV座標は共通してない頂点みたいなのは頂点データを分けて、二つの頂点にしなくてはいけない
しかし、分けられたこの二つの頂点は位置については共通なので無駄なデータが増えてメモリ効率も悪い
そしてこの頂点を移動しようと思ったら二つの頂点を移動しなくてはならないから、一組となってる頂点データを管理しないといけない
こういったことは3Dじゃふっつーによくある構造なのでこんなデータ表現じゃ困るんだよ
これを解決するには頂点属性ごとに異なるインデックスが必要なのに・・・言ってみれば一つのモデルにIBOを複数持たせなくてはいけないのに

まあこんなふざけた仕様だけどハード面でこれがスタンダードと化している以上、コイツと付き合わねばならない
VBO、IBO出力機能をつけてこんな苦労とおさらばできるように頑張る


2015/01/31掲載

FC2カウンター
inserted by FC2 system