アニメーションがなぜか一部のアーマチュアの動作しか反映されません。
例えば、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のモデルの形も、ボーンの本数も変えて、いくつか試してみましたが
同じように、一部のアーマチュアだけしか動作しませんでした。
なぜこのようなアニメーションの状態になってしまうのでしょうか?
ぜひご教授お願い致します。