VMDに保存したカメラアニメーションを反映

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
smr_c
記事: 15
登録日時: 14年前
住所: 埼玉県
連絡を取る:

VMDに保存したカメラアニメーションを反映

#1

投稿記事 by smr_c » 13年前

DXライブラリを使用して3Dアクションゲームを作らせていただいている
smr_cと申します。

以下の質問掲示板にて
VMDに保存したカメラアニメーションをDXライブラリで反映させることができると
聞いたので、一緒に載せてあったプログラムを試しに動かしてみたのですが、
どうにもカメラの視点がななめ上からの俯瞰で終始止まってしまいます。
カメラのvmdについて

コードは手を加えておらず、上記のページのものと同一です。
また、モデルはMMD付属の”初音ミク.pmd”、
モーションは”恋愛サーキュレーション short Lat式.vmd”や、
”MikuMikuDance_星間飛行【ソース】.pmm”から抽出し
”初音ミク000.vmd”にリネームしたものを使用しています。

カメラアニメーションは
”MikuMikuDance_星間飛行【ソース】.pmm”から抽出し
”Camera.vmd”にリネームしたものを使用したときはちゃんと動いてくれたのですが、
自分で作った”Camera.vmd”は上手く機能せず、終始ななめ上からの俯瞰でした。

どうやら”Camera.vmd”が原因らしいことはわかったのですが、
MMDで読み直してもきちんと保存はできているようです。
また、”MikuMikuDance_星間飛行【ソース】.pmm”から抽出した”Camera.vmd”に
編集を加えたものは正常なカメラアニメーションになりませんでした。


なにが原因なのでしょうか。
ご助言をお願いします。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: VMDに保存したカメラアニメーションを反映

#2

投稿記事 by softya(ソフト屋) » 13年前

データとソースを掲載してもらうと検証可能かと思います。
どうやっても上手く行かない場合は本家で質問して頂く必要がると思いますが。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

smr_c
記事: 15
登録日時: 14年前
住所: 埼玉県
連絡を取る:

Re: VMDに保存したカメラアニメーションを反映

#3

投稿記事 by smr_c » 13年前

返信ありがとうございます。

こちらのアップローダーにファイルをアップさせていただきました。
passは”test”です。

ファイルの内容は
VMDCameraTest.exe
main.cpp
Log.txt

Camera.vmd : 自作カメラアニメーション
Camera2.vmd : ”MikuMikuDance_星間飛行【ソース】.pmm”から抽出したカメラアニメーション
Camera3.vmd : 自作カメラアニメーション

初音ミク.pmd : MMD付属モデル
初音ミク000.vmd : ”MikuMikuDance_星間飛行【ソース】.pmm”から抽出したモーションデータ

となっています。
検証よろしくお願いします。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: VMDに保存したカメラアニメーションを反映

#4

投稿記事 by softya(ソフト屋) » 13年前

vmdフォーマットに詳しくないので解析は出来ていないのですが、Camera.vmdはファイルサイズが小さすぎる気がします。
Camera2.vmdはちゃんと動くのですが、こちらはファイルサイズが大きいです。
なんかカメラの初期座標しか入っていないような印象を受けました。カメラの全フレーム保存に失敗しているのではないでしょうか?

[追記] MV1GetFrameNum(CameraHandle)を試してみましたがフレーム数が1ですので、モーションが無いです。
訂正。いつも勘違いするがフレーム数は、モーション数ではありせんでしたね。うーん。慣れんわー。
もう少し調べてみます。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

smr_c
記事: 15
登録日時: 14年前
住所: 埼玉県
連絡を取る:

Re: VMDに保存したカメラアニメーションを反映

#5

投稿記事 by smr_c » 13年前

ありがとうございます。

Camera.vmdはファイルサイズが小さすぎるかも知れないとの指摘があったので
フレーム数を増やし大きくしましたが変わりはありませんでした。
MMD上で保存→読み込みをしたところきちんとすべて読み込めたので
カメラの全フレーム保存はできていると思います。
[追記]-----------------------------------
重ねての質問となりますが、
MV1GetFrameNum(CameraHandle)はxファイルなどのモデルのフレーム数を調べる関数だと思っていましたが、
カメラアニメーションのフレームもカウントできるのでしょうか。
-------------------------------------------

いろいろと調べてみたところ、以下のようなことがわかりました。

動く場合
・フレームが最初の1フレームしかないとき。
・最初と最後のフレームが同じ視点であるとき。ただしあいだに異なる視点のフレームがあったらダメ。
 つまりフレームが2つしかなくそれらが同じ場合。

それ以外は視点がななめ上からの俯瞰で終始止まった状態になります。

フレームの数やフレームごとの間隔の差は関係なく、
どれだけフレームの数を増やしても減らしても(上記の通りフレームが1つだけなら動く)、
どれだけフレームごとの間隔を開いてもなくしても変わりませんでした。


ただ、抽出したカメラアニメーションを使用した際は問題なく動いたので、
自分でフレームを打ち込んだものとの差が他にあるのかもしれません。

こちらは本家のDXライブラリ質問掲示板にて質問させていただくことにいたします。
こちらに質問を上げさせていただきました。
DXライブラリ質問掲示板 - VMDに保存したカメラアニメーションを反映

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: VMDに保存したカメラアニメーションを反映

#6

投稿記事 by softya(ソフト屋) » 13年前

TEXBINと言うバイナリエディタでcamera.vmdを解析表示してみました。
「Nanashi-soft : TSXBIN用VMDマクロ」 こちらのマクロを少し変えて使用。
http://blog.livedoor.jp/nanashisoft/arc ... 34616.html
このツールで見るとキーフレームが3つ有ることが分かります。
データをいじってみたりして実行結果を見るとFlameNo 00000EC4かのカメラ位置からスタートしてるようですね。
動かないのは、DXライブラリの問題かも知れません。

コード:

00  header.VmdHeader[0]         56 6F 63 61 6C 6F 69 64 20 4D 6F 74 69 6F 6E 20
10  header.VmdHeader[16]        44 61 74 61 20 30 30 30 32 00 00 00 00 00
1E  header.VmdModelName[0]      83 4A 83 81 83 89 81 45 8F C6 96 BE 00 6F 6E 20
2E  header.VmdModelName[16]     44 61 74 61
32  motion_count                00000000
36  vmd_skin_count              00000000
3A  vmd_camera_count            00000003
3E  camera[0].FlameNo           00000000
42  camera[0].distance          C20C0000
46  camera[0].Location[0]       00000000 41200000 00000000
52  camera[0].Rotation[0]       00000000 00000000 00000000
5E  camera[0].Interpolation[0]  14 6B 14 6B 14 6B 14 6B 14 6B 14 6B 14 6B 14 6B
6E  camera[0].Interpolation[16] 14 6B 14 6B 14 6B 14 6B
76  camera[0].ViewingAngle      0000002D
7A  camera[0].Perspective       00
7B  camera[1].FlameNo           00001D88
7F  camera[1].distance          C20C0000
83  camera[1].Location[0]       00000000 41200000 00000000
8F  camera[1].Rotation[0]       00000000 00000000 00000000
9B  camera[1].Interpolation[0]  14 6B 14 6B 14 6B 14 6B 14 6B 14 6B 14 6B 14 6B
AB  camera[1].Interpolation[16] 14 6B 14 6B 14 6B 14 6B
B3  camera[1].ViewingAngle      0000002D
B7  camera[1].Perspective       00
B8  camera[2].FlameNo           00000EC4
BC  camera[2].distance          C20C0000
C0  camera[2].Location[0]       00000000 41200000 00000000
CC  camera[2].Rotation[0]       00000000 40490FD8 00000000
D8  camera[2].Interpolation[0]  14 6B 14 6B 14 6B 14 6B 14 6B 14 6B 14 6B 14 6B
E8  camera[2].Interpolation[16] 14 6B 14 6B 14 6B 14 6B
F0  camera[2].ViewingAngle      0000002D
F4  camera[2].Perspective       00
F5  vmd_light_count             00000000
F9  vmd_self_shadow_count       00000000
ちなみに、MV1GetAnimNum( int MHandle ) と言う関数があるのですが、これでも取得できるのは1と言う数字です。
単なるアニメーションの種類の数かもしれません。つまりカメラアニメーションがひとつ。
使えそうなのは、MV1GetAnimTotalTime()ぐらいですがトータル時間しかわかりません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

smr_c
記事: 15
登録日時: 14年前
住所: 埼玉県
連絡を取る:

Re: VMDに保存したカメラアニメーションを反映

#7

投稿記事 by smr_c » 13年前

解析までしてくださったのですね!
ありがとうございます。

レベルが高すぎて「FlameNo 00000EC4かのカメラ位置からスタートしてる」あたりから
理解がとても危ういのですが、
問題がDXライブラリにありそうということは理解しました。


わざわざバイナリ解析までしてくださりありがとうございます。

本家掲示板での回答を待たせていただくことにします。

smr_c
記事: 15
登録日時: 14年前
住所: 埼玉県
連絡を取る:

Re: VMDに保存したカメラアニメーションを反映

#8

投稿記事 by smr_c » 13年前

本家DXライブラリ質問掲示板より返答をいただきましたので報告し、
また、解決しましたのでこちらでも解決とさせていただきます。

管理人さんにDXライブラリのプログラムを改善していただき、
正常に動作するようになりました。

新しいバージョンは出ていないのでまだ適用されていないかと
思いますが、それまではこちらの掲示板にてアップしていただいた修正版を使うことで
動作が改善されると思います。

閉鎖

“C言語何でも質問掲示板” へ戻る