Cofactor Matrix Log

WebGL Lib 2019/05/22

## とりあえず MMDモデル(PMX) を表示してみるテスト [サンプル](sample/index.html) - 全てブラウザ側で処理。 - Chrome 用。一応 Firefox でも動くものの、問題あり(後述) - モデルは同梱されていないので、お手元に pmx 形式の MMD モデルをご用意ください。 - pmx の入ったディレクトリをテクスチャごと放り込むべし。 - モデルの基本部分とボーンのみ対応。モーフはない。IKもない。トゥーンもない。物理演算もない。 - モーションは対応していないが、ポーズは読み込めるように。 - モデルを読み込んだ後に vpd ファイルを放り込む。 - IK 無いので足回りは悲しいことになる。 - テクスチャは png/jpg - bmp は自動で png に変換される。 - tga は、(カラーフォーマットが普通のなら) png に変換される。 - 読込が遅い場合だいたいこいつのせい。 - dds は 無理だが、.dds.png があれば、それを代わりに読む。 - テクスチャが欠けていたら白になる。 ## 補遺 - MMD 互換の何かを作るつもりはなく、 自作ライブラリでの 3D モデル/トゥーンシェーディングの検討および勉強用。 - なので、PMX ビューアーとしては、ほぼ進歩しないはず。トゥーン化はするかも。 ## 色々な MMD モデルを表示してみて思ったこと。 - PMX はファイルフォーマットがわかりやすくて良い。 - が、全体的に、モデルの扱いが表示用というよりはモーション編集用に特化しているので、 ゲーム用途に考え方をそのまま持って行くのはキツイ部分もある(特に IK)。 - トゥーン/スフィアマップ用のテクスチャが、設定しているのに欠けているモデルが結構ある。 - ファイル名ミスやファイル同梱漏れが多い。 - 同作者の別モデルの方に入っていたり...。 - ディフューズ用のテクスチャならすぐ気づくだろうけれど、 トゥーン/スフィアのほうは中々気づかれないのかもしれない。 - アニメ風を強く意識したモデルは、口周りに工夫がみられて面白い。 - 法線の向きとか - エッジを出すためだけの透明なポリゴンとか - とりあえず、インターリーブドバッファにして、 ボーンは VTF にして... と、 種々の工夫をしてやれば、 うちのおんぼろでも 40 万頂点くらいのモデルはスキニング有で 60FPS で表示できるようだ。 - ちなみに MMD を立ち上げると、10万頂点くらいのモデルで 1 桁 FPS になる程度のおんぼろ具合。 (CPU の方がネックの可能性もあるけれど) - エッジを出そうとすると処理が倍化するので、トゥーンシェーディングをしだすとどうなるか。 ## MMD とはあまり関係のない知見 ### その 1 - GPU 負荷が軽くても、HTML の再レイアウトが入ると FPS がガタ落ちする。 - Chrome は、再レイアウトの範囲を切ることで封じ込めが可能。 - width/height/overflow を直指定して、周辺への影響を避ける。 - HTML5 から入った新しい input type を使わない。 - 今回は range/number に苦しめられた。 レイアウト範囲にかかわらず、描画のタイミングがおかしくなる。 - FireFox はそれでもダメ。 - `fixed/absolute` で固定化して、 テキストを選択不能にして (`user-select: none`) 位置サイズを js から完全にコントロールしてやれば、なんとか。 - もちろん css アニメーションもひどいことになるので避ける。 - 今回は修正する気力なし。 - UI は色々工夫しないとマズそうだ...。 ### その 2 - Firefox は、File オブジェクト経由だと bmp の mime タイプを推測してくれない。 - 拡張子から判断するしかなかった。 ### その 3 - `display:flex` は、`min-height:0` と組み合わせる。 - Firefox で縦サイズがおかしくなる。 - Chrome だと無くてもいけるけれど、恐らく仕様的には Firefox の方が正しい。 - まあ、その 1 の理由から、`display: flex` 自体に今後出番がなさそうだけれど...。