three.jsで遊んでみる(18)

 プログラム,
 公開日:2013年6月2日 / 更新日:2013年10月23日

いままでずっと three.js r51 をべースに作業を進めてましたが、
気がつけばバージョンは r58 まで進んでいました。

毎月中旬くらいに更新されている感じなコトに気づいていましたが、
その都度ベースを更新するがメンドーだったので、
サボってました(^_^;)

three.jsのGitHubの更新ログを見てみると
だいぶ変わって来ているっぽいので、
この際 r58 ベースに更新することにしました。

今回、r51 から r58 にベースを更新する作業をしてみて
個人的に気づいた点は以下のような感じ。

  • ソースのフォルダ構成が変更されている。
  • 基本クラスのAPIに調整が入っている。
  • いくつかのシェーダーは独立したソースに整理された。
  • シェーダーのソースコードに独自の#defineを導入できるようになった。

4番目については、
以前の投稿で独自に改造しましたが、
r58ではより汎用的に使えるようになってたので、
それに対応するように直しました。

2番目については、
Matrix4 に属していたメソッドが Vector3 へ移ったりとか、
メソッド名が変更され機能も微妙に異なっていたりとかして、
それに合わせるための変更にちょっと手間取りました。
内容が最適化されてたり、
実装上の問題点とかが改善されてたりもするようなので、
これはこれで歓迎しておいて良さそうです。
いくつかの旧APIはまだ使えるようになってますが、
console.warning()とかでメッセージが出力されたりします(^_^;)
まだ移行過程な感じなのかもしれません。

前回、PMXやVMDファイルを直接扱えるようにしたわけですが、
今回テストしてて大きなバグを見つけてしまいました(^_^;)
モーションファイルであるVMDには、
フレーム番号を基本にキーをソートしている場合と、
ターゲット名を基本にキーをソートしている場合の2つがあるようです。
この対応が不十分でした。
前回はたまたまフレーム番号でソートしてあったVMDファイルを
テストに使っていたため、この問題に気づきませんでした。

それから、
Shift-JIS から UNICODE への変換について。
前回はnativeな機能で出来るだけ実現しようとしたわけですが、
非同期処理を短時間に多発させるのは
ブラウザに負荷が掛かるような気がしてきたので
こちらの変換ライブラリを利用させてもらうことにしました。
うん、これ便利かも。
素直にはじめからこれを使っておけば良かったかも(^_^)

ところで、
前回の課題であった影の件ですが、
うまく行ってません(^_^;)
色々やってはみたんですが・・・。
う~ん、本家MMDはどうやって解決してるんだろ。
袖やスカートの内側のポリゴンがちゃんと貼られていればなぁ・・・
と愚痴ってみたり(^_^;)
深度マップを作るには基本的に裏面描画でいいんですが、
そうすると袖やスカートの影が抜けてしまう・・・。
しょうがないので以前やったように、、
カリング無しで深度マップを作るようにしました。
一見うまく行っているように見えますが、
副作用で影にならないような所にも陰影が出てしまっています。
地面に近い部分の髪の毛とかが顕著かも。

あと、
描画負荷を少し抑えるために
深度マップ用のバッファの大きさを
2048×2048 から 1024×1024 へ減らしました。
これでも解像度的には問題無さそうなので。

ということでr58ベースに更新した結果はこちらです。
前回と基本的には変わってませんが、少し負荷が軽くなっているかも。

ChromeなどのWebGL対応のブラウザで見てください。PCパワーもそれなりに必要となるかもしれません。あまりにも時間がかかり過ぎるようならば、リロードして再度試してみてください。

mytest22

タグ: ,

コメント投稿