HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2021
0509
youdaiHGIMG4のGPBモデルのアニメーションがアーマチュアの一部しか反映されません。なぜこのような状態になってしまうのでしょうか?2解決


youdai

リンク

2021/5/9(Sun) 20:23:57|NO.92796

HGIMG4のGPBモデルのアニメーションが上手くいきません。
アニメーションがなぜか一部のアーマチュアの動作しか反映されません。

例えば、8本脚の蜘蛛のGPBモデルのアニメーションの場合、
本来8本脚で歩行するアニメーションのはずが、その内1本の足しか動かないといった具合です。

HGIMG4のモデルのシェーダーは colored.vert と colored.frag です。
SKINNING_JOINT_COUNTは17です。

アニメーションさせているオブジェクトは obj です。
アニメーションの内容は、およそ3秒程度の蜘蛛の8本脚の歩行の繰り返しです。

HGIMG4はhgimg4.as版です。
バージョンはHSP3.6bate5zip配布版です。

FBXのモデル作成はblender 2.92を使用しました。

blenderのFBX出力設定


blenderの設定 FPS 59 ベース 1.0 内容 limit to 選択したオブジェクト アーマチュア メッシュ トランスフォーム スケール 1.3 FBX単位スケール Yが前方 Zが上 単位を適用 空間トランスフォームを使用 ジオメトリ スムージング 法線のみ モディファイヤーを使用 アーマチュア プライマリボーン軸 Y軸 セカンダリボーン軸 X軸 アーマチュアFBXノードタイプ Null アニメーションをベイク 全ボーンのキー NLA ストリップ 全アクション 強制的に開始/終了キーを挿入 サンプリングレート 1.0 簡略化 1.0

obj の.materialファイル


material colored { u_worldViewProjectionMatrix = WORLD_VIEW_PROJECTION_MATRIX renderState { cullFace = true depthTest = true } technique { pass { vertexShader = res/shaders/colored.vert fragmentShader = res/shaders/colored.frag } } } material mat1_17 : colored { u_ambientColor = 0.0508761, 0.0508761, 0.0508761 u_cameraPosition = CAMERA_WORLD_POSITION u_diffuseColor = 0.367239, 0.367239, 0.367239, 1 u_inverseTransposeWorldViewMatrix = INVERSE_TRANSPOSE_WORLD_VIEW_MATRIX u_matrixPalette = MATRIX_PALETTE u_specularExponent = 36 technique { pass { defines = SKINNING;SKINNING_JOINT_COUNT 17;SPECULAR;DIRECTIONAL_LIGHT_COUNT 1 } } }

HSP3スクリプト


#include "hgimg4.as" ; packopt #packopt name "animation_test" #packopt xsize 800 #packopt ysize 600 ; 定数一覧 #const FPS_WAIT_TIME 1000/59 #const double ASPECT43 1.333333333333333 gosub *reset goto *main *reset gosub *set_screen gosub *set_camera gosub *set_light gosub *set_stage return *set_screen ; スクリーンの設定 screen 0, 800, 600, 0 title "animation_test / HSP3.6bate5" gpreset setreq SYSREQ_VSYNC, 1 setcls CLSMODE_SOLID, $808080 return *set_camera ; カメラオブジェクトの設定 gpnull camera_main gpcamera camera_main, 40, ASPECT43, 0.5, 1000, 0 gosub *camera_type_1 gpusecamera camera_main return *camera_type_1 setpos camera_main, 4.6674, -9.333, 6.1206 crx = deg2rad(58.8) cry = 0.0 crz = deg2rad(24.4) ; ZYX回転順序 setangz camera_main, crx, cry, crz return *set_stage gpload obj, "res/kumo_0001" if obj == -1 : dialog "gpload:ファイル読込エラー", 1 : end ; アニメーション登録 gpaddanim obj, "run", 1, 3000 if stat == -1 : dialog "gpaddanim:アニメーションクリップ登録エラー", 1 : end gpact obj, "run" return *set_light gpnull light_d_main gplight light_d_main, GPOBJ_LGTOPT_NORMAL setcolor light_d_main, 1.0, 1.0, 1.0 setdir light_d_main, 0.5, 0.5, 0.5 setang light_d_main, 0.0, 0.0, 0.0 gpuselight light_d_main return *main redraw 0 gpdraw redraw 1 await FPS_WAIT_TIME goto *main

動作テストしたPC環境


OS Windows 10 Pro CPU Intel Core i7 S860 2.53 GHz メモリ 8GB DDR3 グラボ NVIDIA GeForce GT740(DDR3)

blender上ではアニメーションは動作するし、Tamaneやプロ生ちゃんのモデルは
正常にアニメーションしているのでおそらく、自分のFBXの出力の設定ミスか、
アーマチュアの設定ミスだと思います。
ですが、HGIMG4上でアニメーションが全く動作しないのではなく、
一部だけ動いて、その他が動かないというのが原因がよく分かりません。

GPBのモデルの形も、ボーンの本数も変えて、いくつか試してみましたが
同じように、一部のアーマチュアだけしか動作しませんでした。

なぜこのようなアニメーションの状態になってしまうのでしょうか?
ぜひご教授お願い致します。



この記事に返信する


遠い空のニック

リンク

2021/5/9(Sun) 22:54:34|NO.92801

こんばんは。
現状のgpbconv.exeは完全な互換性は期待出来ないようです。
ご自信でおっしゃている通り、ボーン構造の問題ではないでしょうか?
アーマチュア内で子を持つ独立した
ルートボーンと言うんでしょうか?は
コンバーターに一つしか認識されないように思います。



youdai

リンク

2021/5/10(Mon) 10:02:36|NO.92811

返信ありがとうございます。
アドバイスを元にアーマチュアを設定し直したら、動作がすべて正常に反映されるようになりました。

>アーマチュア内で子を持つ独立した
>ルートボーンと言うんでしょうか?は
>コンバーターに一つしか認識されないように思います。

つまり、ルートボーンを1つしか持てないわけだから、
すべてのボーンが繋がった1つの塊になっていればいいわけですよね。
分割されていたボーンは確かに1つを除いて、HGIMG4上では動作がすべて無効になっていました。

すべてが繋がった分割されていないボーンのアーマチュアを設定したら、動作がすべて正常に反映されるようになりました。

●1つだけ動いていたボーンの動いていた理由
アドバイスを反映させる前に1つだけ動いていたボーンもblender上ではボーンが分割されていたのですが、
もしかしたらGPBに変換される際にルートボーンから派生したものとコンバータが誤解釈して出力されていたのかもしれません。

●分割されたメッシュの場合
分割されたメッシュにアーマチュアを設定する場合も、
とにかくボーンをそこまで伸ばしてしまえば(正確にはウェイトペイントを反映させれば)動作することを確認しました。
たとえば1つに繋がっていないメッシュだとしても、なにもない空中にボーンを伸ばせば反映してくれました。
ボーン自体はHGIMG4上では表示されないので、この実装方法でも問題ないのだなと思いました。

アドバイス非常に役立ちました。
ありがとうございました!



ONION software Copyright 1997-2023(c) All rights reserved.