Boneのような変形について

 RealTimeでワンスキンモデルの間接に基づく変形に取り組んだ時の、私の経験などを
適当に書いておきます。

・方法その一
 普通の間接の処理と同じ。

ただ、間接を閉曲面(Mesh?)毎にとらず。頂点のグループで分けてみたというだけ。
ただ、普通の間接の場合とちょっと違うのは
->
あらかじめ頂点に根元方向への変換を施しておく必要があるということです。
あとは、必要なときに手先方向に向かって変換してゆけばOKです。

画像はTrueSpaceで作ったものですが、やはりかくかくする事は避けられないでしょう。



・方法その二
 こんな感じ。でも、たぶんあまりいい方法ではありません。
これをやるには間接の位置が曲げたい理想の曲線の上に来る事と、骨の向きが
その接線方向を向かないとうまくいかないようです。腕の長さとかも保証しづらいし
法線の計算でどうしても平方根の計算が入ってしまうなどいいところがほとんどありません。

・方法その三
 その一といっしょですが、ただ間接を細かくとる。結局素直にこうやった方がいいみたいです。
あと、間接の位置と曲がる量をベジェ補間をつかって表現力が増えるかなと思ったのですが・・・。
なんか、あまり変わらない。まあ、補間をするときの計算の仕方に問題があるのかもしれません。

あんまり正確なアルゴリズムを使うと重くなりすぎるので、変形するまえの元の形状を工夫したり、
わざと間接の位置をずらしたりとか、
アルゴリズム以外のところでがんばった方がRealTimeでは効果的なようです。
一応実行ファイルです

実行ファイルbone.lzh(46.7kbyte)
DirectX5対応
Delphi3のVCLのランタイムが必要です。IEの方はこちらで
ActiveXの動かないブラウザの方はvclx30.dpl(209kbyte)とvcl30.dpl(1.21Mbyte)
をダウンロードして、WindowsのSystemフォルダにコピーしてください。



上へ
目次
GigaHit