Re: live2dでモデルの動作がおかしい ( No.1 ) |
- 名前:管理人 日時:2020/03/06 03:52
沢山のご指摘ありがとうございます
修正作業が必要なものについては数が多いので後日対応します m(_ _;m
> live2d 関連の関数でconst TCHAR *を返す関数がありますが、
> これはDxライブラリの方で(モデルを削除するまで)ずっと所持されているポインタなのでしょうか?
はい、モデルデータの一部なのでモデル削除するまで有効なポインタです
|
Re: live2dでモデルの動作がおかしい ( No.2 ) |
- 名前:にこよう 日時:2020/03/06 05:20
>修正作業が必要なものについては数が多いので後日対応します m(_ _;m
急いではおりませんので、時間のある時に対応していただければ嬉しいです(/・ω・)/
>はい、モデルデータの一部なのでモデル削除するまで有効なポインタです
ご回答ありがとうございます
直接他の関数等に渡しても問題なさそうですね
|
Re: live2dでモデルの動作がおかしい ( No.3 ) |
- 名前:管理人 日時:2020/03/06 22:12
> 急いではおりませんので、時間のある時に対応していただければ嬉しいです(/・ω・)/
はい、なるべく早く対応します m(・・;m
> 直接他の関数等に渡しても問題なさそうですね
はい、問題ありません
|
Re: live2dでモデルの動作がおかしい ( No.4 ) |
- 名前:管理人 日時:2020/03/09 04:59
 |
Re: live2dでモデルの動作がおかしい ( No.5 ) |
- 名前:にこよう 日時:2020/03/09 05:42
迅速な対応ありがとうございます
>恐らく修正できたと思いますので、よろしければこちらの修正バージョンをお試しください m(_ _;m
正常に目パチされるようになったのを確認しました
>口元は公式の Live2D Cubism Viewer 4.0 でもざらざらしていたので、恐らくデータの通りだと思います
Live2D Cubism Viewer 4.0 ではデフォルトで少し拡大されて表示されていたようで、
Viewer でも縮小すれば同じように少しざらつくのは確認しました
しかしDxライブラリで Live2D_Model_SetExtendRate(Image::live2d_kiritan, 2.5f, 2.5f);
と設定し描画したものと公式のものを比べるとDxライブラリでは口の両端に半透明な線が描画される等、
色々な拡大率で少しだけですが描画内容が異なるように思います
わずかな差なのですがこれはDxライブラリで動作する以上の仕様なのでしょうか?
もし、必要でしたらスクリーンショットを送ります
>( 内部で utf-8 -> シフトjis 変換を行うようにしました )
確認できる全ての関数で正常に文字が取得できるのを確認しました
>複数の Live2D モデルを非同期で読み込んだ場合に処理がバッティングしてクラッシュしてしまうバグがありました
>今回のバージョンで修正できていると思います m(_ _;m
非同期で複数モデルを読み込んだ際、まだフリーズや例外が発生するようです
一度リビルドしました後に発生したメッセージを貼っておきます
0x01B06620 で例外がスローされました (th_act_remake.exe 内): 0xC0000005: 場所 0x01B06620 の実行中にアクセス違反が発生しました
>手元の環境では Live2D_Model_SetExpression を呼んでも例外は発生しませんでした
以前のバージョンで非同期読み込みが偶然成功した際に発生していたので、その関係かもしれません
貼っていただいたバージョンでは発生しませんでした
>Live2D Cubism SDK のサンプルで『表情設定ファイルを識別する名前(別名)を取得する』と
>なっていたので『識別する名前(別名)』としていたのですが、やっぱり分かりにくいですよね…
>というわけで『識別するID』にしてみました
そうだったのですね、live2dユーザーからしたらそちらのほうが分かりやすかったのかもしれません
(live2dだけを使った事はないので個人的には新しいほうが分かりやすいと思います)
 |
Re: live2dでモデルの動作がおかしい ( No.6 ) |
- 名前:管理人 日時:2020/03/11 00:22
 |
Re: live2dでモデルの動作がおかしい ( No.7 ) |
- 名前:にこよう 日時:2020/03/11 06:28
>この件について Live2D の公式に問い合わせていますので、進展がありましたらご報告します
SDKのほうの問題だったのですね
問い合わせていただいているとのことで、ありがとうございます
>再度修正しましたので、何度も申し訳ありませんが、よろしければお試しください m(_ _;m
live2dモデルを非同期で20個ほど読み込もうとした場合、まだ例外が発生するようです
何度も申し訳ないのですが確認していただけると嬉しいです
↓(停止した時のモデルの番号 n 番目) 症状
リビルド
(13)フリーズ
(10)例外
(2)例外
リビルド
(7)例外
|
Re: live2dでモデルの動作がおかしい ( No.8 ) |
- 名前:管理人 日時:2020/03/13 03:10
口の両端の半透明の線については早速公式からご返答があり、修正することができました
よろしければこちらの修正版をお試しください m(_ _)m
https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用
https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用
https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.3 用
https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用
https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用
https://dxlib.xsrv.jp/temp/DxLibAndroidTest_ARM.zip // Android版 ARM用
https://dxlib.xsrv.jp/temp/DxLibAndroidTest_ARM64.zip // Android版 ARM64用
https://dxlib.xsrv.jp/temp/DxLibAndroidTest_x86.zip // Android版 x86用
https://dxlib.xsrv.jp/temp/DxLibAndroidTest_x64.zip // Android版 x64用
https://dxlib.xsrv.jp/temp/DxLibiOSTest.zip // iOS版
https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース
(中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい)
> live2dモデルを非同期で20個ほど読み込もうとした場合、まだ例外が発生するようです
> 何度も申し訳ないのですが確認していただけると嬉しいです
うーん、駄目でしたか…
私の手元では問題なく読み込めるのですが…
因みに、kiritanv3 は 32bitアプリ設定( win32 or x86 )で 20個読み込もうとすると
メモリ不足になってしまいますので、20個ほど live2dモデルを読み込む際は
64bitアプリ設定( x64 )にしてください
そして、どうしても手元では再現しないので、お手数で申し訳ないのですが、こちらの
『DXライブラリのソースをコンパイルするテストプログラム実行用プロジェクト』に
以下の『live2dモデル 20個を非同期で読み込むプログラム』を組んでみましたので
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
// ウィンドウモードで起動
ChangeWindowMode( TRUE ) ;
// 画面解像度を設定
SetGraphMode( 1800, 900, 32 ) ;
// Live2D Cubism Core DLL の読み込み( 64bit アプリの場合と 32bit アプリの場合で読み込む dll を変更 )
#ifdef _WIN64
Live2D_SetCubism4CoreDLLPath( "C:/CubismSdkForNative-4-r.1/Core/dll/windows/x86_64/Live2DCubismCore.dll" ) ;
#else
Live2D_SetCubism4CoreDLLPath( "C:/CubismSdkForNative-4-r.1/Core/dll/windows/x86/Live2DCubismCore.dll" ) ;
#endif
// DXライブラリ初期化処理
if( DxLib_Init() == -1 )
{
return -1 ;
}
// 非同期読み込み有効化
SetUseASyncLoadFlag( TRUE ) ;
// Live2Dモデル20個分の読み込み
for( int i = 0 ; i < 20 ; i ++ )
{
ModelHandle = Live2D_LoadModel( "C:/kiritan/kiritanv3.model3.json" ) ;
}
// 描画先を裏画面に変更
SetDrawScreen( DX_SCREEN_BACK ) ;
// 読み込みが終わるまで待つ
{
int Time = 0 ;
while( ProcessMessage() == 0 && GetASyncLoadNum() > 0 )
{
// 0.5秒に1回画面を更新する
if( GetNowCount() - Time > 500 )
{
Time = GetNowCount() ;
ClearDrawScreen() ;
// 残りの数を表示
DrawFormatString( 0, 0, GetColor( 255,255,255 ), "残り %d 個", GetASyncLoadNum() ) ;
ScreenFlip() ;
}
else
{
// 少しCPUを休ませる
Sleep( 1 ) ;
}
}
}
// メインループ
while( ProcessMessage() == 0 )
{
// 画面の初期化
ClearDrawScreen() ;
// モデルの状態を60分の1秒分進める
Live2D_Model_Update( ModelHandle, 1 / 60.0f ) ;
// Live2D描画の開始
Live2D_RenderBegin() ;
// モデルの描画
Live2D_Model_Draw( ModelHandle ) ;
// Live2D描画の終了
Live2D_RenderEnd() ;
// 裏画面の内容を表画面に反映
ScreenFlip() ;
}
// Live2D モデルの削除
Live2D_DeleteModel( ModelHandle ) ;
// DXライブラリ使用の終了処理
DxLib_End() ;
// ソフトの終了
return 0 ;
}
( Live2DCubismCore.dll と kiritanv3.model3.json のパスはお手元の環境に合わせて書き換えてください )
よろしければにこようさんの環境でデバッグ実行して『例外』や『フリーズ』が発生してしまう箇所の
ファイル名と行番号を教えていただけないでしょうか? m(_ _;m
https://dxlib.xsrv.jp/temp/DxLibSourceTest_WithUseCLib.zip
 |
Re: live2dでモデルの動作がおかしい ( No.9 ) |
- 名前:にこよう 日時:2020/03/13 07:40
>口の両端の半透明の線については早速公式からご返答があり、修正することができました
口元が綺麗に描画されるようになりました
ありがとうございます
これとはまた別に一つバグがみつかったのですが、
モーションを再生した後のエフェクト?が別モーションを再生した際にずっと画面に残ってしまいます
例えば下のコードのように「永遠にきりたんぽ」を再生した後に「もと」を再生すると青い魔法陣の様なエフェクトが少し残ってしまいます
static bool flag = true;
if (flag)
{
Live2D_Model_StartMotion(Image::live2d_kiritan, "", 13);
flag = false;
}
if (Live2D_Model_IsMotionFinished(Image::live2d_kiritan)) // モーションの再生が止まっていれば
{
Live2D_Model_StartMotion(Image::live2d_kiritan, "", 0); // 待機モーションを再生する
}
>因みに、kiritanv3 は 32bitアプリ設定( win32 or x86 )で 20個読み込もうとすると
>メモリ不足になってしまいますので、20個ほど live2dモデルを読み込む際は
>64bitアプリ設定( x64 )にしてください
教えていただきありがとうございます
確認してみたところ1Gバイトまで?のようで、さすがに20個も読み込まないのですが、結構ぎりぎりでした
現在のプログラムはx64では動作しないので何か対策を考えようと思います....
>よろしければにこようさんの環境でデバッグ実行して『例外』や『フリーズ』が発生してしまう箇所の
>ファイル名と行番号を教えていただけないでしょうか? m(_ _;m
確認用のプロジェクトを有難うございます
何度か試したのですが、まず例外は発生しませんでした
残りファイル数が最初は 20 個ですが、フリーズするタイミングは
何故か26やら24になったタイミングでした
ファイル名:DxLogWin.cpp
行番号:143
また、頂いたプロジェクトではなく自身のプログラムで発生する例外のメッセージは以下の物でした
nvwgf2nm.pdbは読み込まれていません
26.21.14.3200
C:\Windows\System32\DriverStore\FileRepository\nv_dispi.inf_amd64_db678424d2641c3d\nvwgf2um.dll
それと、送って頂いたプロジェクトのデバッグリリースを選ぶプルダウンの右のプルダウンの内容が Win32 or x64
だったのですが、自身のプロジェクトでは x86 x64 と表示されている差が気になりました
構成設定を間違えている可能性はありますか...?
構成マネージャーのプラットフォームにはWin32、と表示されているのですが
「アクティブソリューションプラットフォーム(P)」がWin32ではなく x84 になっています
関係なくて申し訳ないのですが、調べてみても分からなかったので教えていただけると嬉しいですm(__)m
 |
Re: live2dでモデルの動作がおかしい ( No.10 ) |
- 名前:管理人 日時:2020/03/15 01:59
 |
Re: live2dでモデルの動作がおかしい ( No.11 ) |
- 名前:にこよう 日時:2020/03/15 05:23
分かりやすく説明していただきありがとうございますm(__)m
>修正版( 4-r.1 での変更を反映したバージョン )をアップしましたので、お手数で申し訳ありませんが
>よろしければお試しください m(_ _;m
修正ありがとうございます
正常に描画されるようになりました
>Live2D の dll には含まれていない部分( DXライブラリのコードに組み込んでいる部分 )の
>Cubism SDK for Native 4-beta.1 から
>Cubism SDK for Native 4-r.1 で変化した箇所をDXライブラリに反映していないことが原因でした
以前の不具合の原因でもこのようなことがありましたが、Cubism SDK for Native 4-beta.1を使っておられる方が
DXライブラリを最新のバージョンにあげた場合正常に動作しなくなるのでしょうか?
>すみません、『フリーズ』とは、『例外が発生してデバッガによって強制的に動作が止められた』わけではなく、
>『いつまで待っても処理が進まない』といったような状態でしょうか?
今回はAlt+f4でソフトが終了しなくてウィンドウが動かせなかったため、フリーズしたと思っていたのですが、
ログ出力が永久に行われていただけのようで、処理は止まっていませんでした
すみません、正確にはフリーズした状況ではありませんでした
>こちらはログを出力している部分となります
>このとき出力されているログ( Log.txt )にはどのようなテキストが出力されていますでしょうか?
1885:DXライブラリの初期化処理終了
9941:ヒープ用メモリの確保に失敗しました
9953:ヒープ用メモリの確保に失敗しました
9973:ヒープ用メモリの確保に失敗しました
9989:ヒープ用メモリの確保に失敗しました
10000:ヒープ用メモリの確保に失敗しました
10014:ヒープ用メモリの確保に失敗しました
10025:ヒープ用メモリの確保に失敗しました
10033:ヒープ用メモリの確保に失敗しました
10044:ヒープ用メモリの確保に失敗しました
10050:ヒープ用メモリの確保に失敗しました
10060:ヒープ用メモリの確保に失敗しました
10066:
10074:Alloc memory dump
10081: size: 52592( 51.359kb) user size: 52480( 51.250kb) time:49316 file:Live2DCubism4.cpp line:197 ID:1261623 addr:14d100b0 data:[00 00 00 00 00 00 00 00 4a 0c 22 3f 00 00 00 00]
10088: size: 544( 0.531kb) user size: 428( 0.418kb) time:49321 file:Live2DCubism4.cpp line:59 ID:2086940 addr:148000b0 data:[1c 90 63 01 48 8e 63 01 00 00 00 00 09 00 00 00]
10095: size: 4432( 4.328kb) user size: 4320( 4.219kb) time:49321 file:Live2DCubism4.cpp line:426 ID:2086942 addr:148002d0 data:[c8 9a 63 01 48 8e 63 01 00 00 00 00 06 00 00 00]
10102: size: 544( 0.531kb) user size: 428( 0.418kb) time:49321 file:Live2DCubism4.cpp line:59 ID:2086944 addr:14801420 data:[1c 90 63 01 48 8e 63 01 00 00 00 00 1b 00 00 00]
10109: size: 560( 0.547kb) user size: 444( 0.434kb) time:49321 file:Live2DCubism4.cpp line:59 ID:2086946 addr:14801640 data:[ec 91 63 01 48 8e 63 01 00 00 00 00 00 00 00 00]
10115: size: 544( 0.531kb) user size: 432( 0.422kb) time:49321 file:Live2DCubism4.cpp line:59 ID:2086948 addr:14801870 data:[fc 8e 63 01 48 8e 63 01 00 00 00 00 00 00 00 00]
10122: size: 544( 0.531kb) user size: 432( 0.422kb) time:49321 file:Live2DCubism4.cpp line:59 ID:2086951 addr:14801a90 data:[fc 8e 63 01 48 8e 63 01 00 00 00 00 00 00 00 00]
10128: size: 544( 0.531kb) user size: 432( 0.422kb) time:49321 file:Live2DCubism4.cpp line:59 ID:2086953 addr:14801cb0 data:[fc 8e 63 01 48 8e 63 01 00 00 00 00 00 00 00 00]
これ以降は同じようなメッセージが3000行ほど続いております
>こちらはエラーメッセージではなく『デバッグに便利なシンボルファイル( 拡張子 pdb のファイル )が見つかりません』
>というメッセージです、nvwgf2um.dll というNVIDIA関係の dll のシンボルファイルは一般的には所持していないので、
>このメッセージが出力されるのは特に問題ありません
そうだったんですね、今まではなにか読み込むのに必要なファイルがないのだと思っていました
>恐らく DxLibSourceTest_WithUseCLib はもともと VisualStudio 2015 で作成したプロジェクトで、
>今回 VisualStudio 2019 用のプロジェクトにアップデートしたために、Win32 の名称のままになっているのだと思います
>現在は 32bitアプリが x86, 64bitアプリが x64 となっていますが、VisualStudio 2015 当時は
>32bitアプリが Win32, 64bitアプリが x64 でした
昔は2015を使っていたのに覚えていませんでした...
覚えておきます
 |
Re: live2dでモデルの動作がおかしい ( No.12 ) |
- 名前:管理人 日時:2020/03/16 03:19
> 以前の不具合の原因でもこのようなことがありましたが、Cubism SDK for Native 4-beta.1を使っておられる方が
> DXライブラリを最新のバージョンにあげた場合正常に動作しなくなるのでしょうか?
はい、x64版は 4-beta.1 でも正常に動作しますが、x86版は Live2DCubismCore.dll の仕様が変化してしまったので
現時点で既に 4-beta.1 の dll では動作しない状態になっています…
> 今回はAlt+f4でソフトが終了しなくてウィンドウが動かせなかったため、フリーズしたと思っていたのですが、
> ログ出力が永久に行われていただけのようで、処理は止まっていませんでした
> すみません、正確にはフリーズした状況ではありませんでした
>
> 10122: size: 544( 0.531kb) user size: 432( 0.422kb) time:49321 file:Live2DCubism4.cpp line:59 ID:2086951 addr:14801a90 data:[fc 8e 63 01 48 8e 63 01 00 00 00 00 00 00 00 00]
> 10128: size: 544( 0.531kb) user size: 432( 0.422kb) time:49321 file:Live2DCubism4.cpp line:59 ID:2086953 addr:14801cb0 data:[fc 8e 63 01 48 8e 63 01 00 00 00 00 00 00 00 00]
>
> これ以降は同じようなメッセージが3000行ほど続いております
了解です
本スレッドの No.8 で
> 因みに、kiritanv3 は 32bitアプリ設定( win32 or x86 )で 20個読み込もうとすると
> メモリ不足になってしまいますので、20個ほど live2dモデルを読み込む際は
> 64bitアプリ設定( x64 )にしてください
と申し上げましたが、こちらと同じ現象『メモリ不足』が原因です
x86 は使用できるメモリ容量が x64 の 64bitアプリよりも少ないので、にこようさんが
読み込もうとされている数の Live2D モデルを読み込み切る前にメモリ不足の状態になってしまっています
申し訳ありませんが、x64 の 64bitアプリへの移行を検討してください m(_ _;m
 |
Re: live2dでモデルの動作がおかしい ( No.13 ) |
- 名前:にこよう 日時:2020/03/17 08:28
>はい、x64版は 4-beta.1 でも正常に動作しますが、x86版は Live2DCubismCore.dll の仕様が変化してしまったので
>現時点で既に 4-beta.1 の dll では動作しない状態になっています…
了解です
現在対応している(推奨の)dllバージョンを取得する関数か、もしdll読み込み時にバージョンが読み込めるなら
ログに推奨バージョンとの不一致を出力するなどの処理を追加してみるのはどうでしょうか?
古いdllを使用している場合はバージョンを上げることはできるので...
(逆に古いdllを入手する方法はなさそうでしたが)
>申し訳ありませんが、x64 の 64bitアプリへの移行を検討してください m(_ _;m
ご回答ありがとうございます
一部分のプログラムを変更すれば64bitに変更できそうです
|
Re: live2dでモデルの動作がおかしい ( No.14 ) |
- 名前:管理人 日時:2020/03/18 00:23
> 現在対応している(推奨の)dllバージョンを取得する関数か、もしdll読み込み時にバージョンが読み込めるなら
> ログに推奨バージョンとの不一致を出力するなどの処理を追加してみるのはどうでしょうか?
> 古いdllを使用している場合はバージョンを上げることはできるので...
> (逆に古いdllを入手する方法はなさそうでしたが)
バージョンを取得する関数がLive2DCubismCore.dllにあるのですが、バージョンが上がる度に関数の呼び出し規約が
変化してしまっているので、バージョンに合った呼び出し規約でバージョンを取得する関数を呼び出さないと
スタックが異常になってエラーになってしまう、という状態なので、ちょっと難しいです…
とりあえずDXライブラリの次のバージョンからは『仕様&特徴説明』のページの Live2D の
項目に、DXライブラリが対応している Live2D の細かいバージョンを明記しておこうと思います
( 正式に対応したバージョンより古くても新しくでも駄目なので (- -;; )
|
Re: live2dでモデルの動作がおかしい ( No.15 ) |
- 名前:にこよう (解決) 日時:2020/03/19 16:51
バージョン情報を取得する方法も変わってしまうのですね...
サイトへのバージョン表記了解です
沢山の内容の修正ありがとうございました
これで解決済みとさせていただきますm(__)m
|