Closed eral closed 11 years ago
Pull request&ご報告ありがとうございます. IKが1フレーム遅れているか否かは,正確な数値を取り出せない以上,見た目として破綻なく動いていればパスということにしましょう.MMDは30フレームで動作しているので,その1フレームの遅れもエミュレートしようとすると,無駄な処理が多くなると考えられます.PMXの仕様そのものも,MMD先行で開発されたわけではない事情があるので,多少の誤差も許容できるのではないかと思われます.
1フレームの遅れのエミュレートについては,もし本当にIKが1フレーム遅れて処理されているのであれば,アニメータもその遅れを前提としてアニメーションを組んでいるということになる,という意味です.その差はごくわずかなので,作った本人と本業のアニメータにしか違いに気付かないだろうと思います.
概要
頂点変形順に依って、IKに依って変形された差分量が 付与親の差分量として正しく計算されない事が有る不具合を修正しました。
詳細
修正内容
腰キャンセルボーンを持つモデルに於ける足周りの頂点スキニングは下記3つのボーンが連携する事で行われます。
A. IKボーン ユーザーが足を操作する為に移動させるボーン B. IK変形対象ボーン IKボーンの移動に伴い、インバースキネマティクスアルゴリズムに従って移動するボーン C. Bを付与親として持つ頂点ウェイト参照ボーン このボーンが動いて初めて頂点はスキニングされます
Tda式アペンドミクさんは、これらのボーンの変形順番が B→A→C と為っています。 前回迄の差分量初期化と更新・参照タイミングではこれで正常に動作しました。
しかしula式巡音ルカさん他のモデルに於いてボーンの変形順番が B→C→A と言う並びが有り、 この場合に、IKの変形が頂点スキニングの変形に伝わっていませんでした。
これを改善する為に、IKのみ変形を先行して行う2パスにしました。
この対応に依り B→A→C でも B→C→A でもIKが正常に伝達される様に為りました。
問題点
この対応に於ける最大の問題点はPMX仕様書に記述されている変形仕様と異なる事です。
引用の様にボーンの変形処理は各々1回で完結するので、本来ならば1パスの筈です。 ですので2パスの今方式は、PMXの変形としては明らかに間違っています。
では今回の変換方式の影響は何処かと言うと、よく分かっていません。 想像するに“IK変形の適応が1フレーム早く為る。”様な気がします。、 と言う依り正確には“PMXの仕様ではIK変形の適応が1フレーム遅れるけれど、今方式ではそれがエミュレート出来ていない。”様な気がします。、 様な気がしますと弱気なのはMMDでIK変形の適応が1フレーム遅れている様に見えないからです。
今方式でも正常に動作しないモデルの存在を確認していますのでまだ色々問題を含んだ付与親計算式だと思いますが、 改善されたモデルは居ても悪化したモデルが居ないので取り敢えずPullRequest出しておきます。
テストモデル