トップページ > 記事閲覧
PMXの読み込みについて
名前:774 日時: 2018/01/13 12:16

あるPMX+VMDを、DxLibModelViewerで読み込ませた時と、自作プログラムでMV1LoadModelで読み込ませた時とで、挙動が異なります。 自作プログラムでは、左足首が最初からくねくねしたり、スカート等の挙動が途中からおかしかったりします。 DxLibModelViewerで読み込んだ場合の挙動は、全く問題がありません。 Viewerで変換したMV1を自作プログラムに読み込ませた場合には問題ありませんが、自作プログラム(ツール)の特性上、 PMX/PMDの読み込みが必要なため、どうしても解決したいのです。よろしくお願いいたします。 ソースとしては MV1SetLoadModelUsePhysicsMode のサンプルにあったものを、LOADCALCにして、C#版にしたものを記載します。 DxLibModelViewerで読み込ませた場合と同じ挙動になるようにするためには、例えば下記コードにどのような関数を追加する 必要がありますでしょうか? (MV1LoadModelの前? 読み込んだ後? 描画の前?) static void Main() { int ModelHandle, AttachIndex; float TotalTime, PlayTime; DX.ChangeWindowMode(DX.TRUE); if (DX.DxLib_Init() < 0) return; DX.MV1SetLoadModelUsePhysicsMode(DX.DX_LOADMODEL_PHYSICS_LOADCALC); ModelHandle = DX.MV1LoadModel("〇〇〇〇〇.pmx"); // PMX+VMD DX.SetDrawScreen(DX.DX_SCREEN_BACK); DX.SetCameraNearFar(10.0f, 1000.0f); DX.SetCameraPositionAndTarget_UpVecY(DX.VGet(0.0f, 19.0f, -22.5f), DX.VGet(0.0f, 10.0f, 0.0f)); AttachIndex = DX.MV1AttachAnim(ModelHandle, 0, -1, DX.FALSE); TotalTime = DX.MV1GetAttachAnimTotalTime(ModelHandle, AttachIndex); PlayTime = 0.0f; while (DX.ProcessMessage() == 0 && DX.CheckHitKeyAll() == 0) { DX.ClearDrawScreen(); PlayTime += 0.5f; if (PlayTime >= TotalTime) { PlayTime = 0.0f; } else { DX.MV1SetAttachAnimTime(ModelHandle, AttachIndex, PlayTime); } DX.MV1DrawModel(ModelHandle); DX.ScreenFlip(); } DX.MV1DeleteModel(ModelHandle); DX.DxLib_End(); } また、ViewerのSetting.iniは以下の通りです。 BackgroundColorR=30 BackgroundColorG=65 BackgroundColorB=90 AntiAliasing=1 WindowX=128 WindowY=52 WindowSizeMaximize=0 WindowWidth=1120 WindowHeight=494 NormalRemake=0 NormalRemakeSmoothingAngle=89.500000 IgnoreScaling=0 PositionOptimize=0 TriangleListUseMaxBoneNum=0 PlaySpeed=30.000000 UseLighting=1 UseVertexColor=0 TextureExRate2=1 WireFrame=0 DispFrame=0 PhysicsMotionLoopReset=1 SaveNormal8bit=0 SavePosition16bit=0 SaveBoneWeight8bit=0 SaveAnimKey16bit=0 AddAnimNameCheck=1 HardwareVertexProcessing=1 StereoView=0 FPS=60 MouseWheelReverse=1 Blur=0 PixelLighting=0 ShowPolygonPosition=0 NotUseFrameRotation=0 PmdLoadUsePhysics=1 PmdLoadPhysicsFPS=60 PmdLoadAnimFPS=30 LoadAndSave=0 (環境: Windows 10 x64 Pro, VSC2017, DirectX11, DxLib-C#-Unicode)
メンテ

Page: 1 |

Re: PMXの読み込みについて ( No.1 )
名前:管理人 日時:2018/01/14 02:56

プログラムを拝見する限りでは DxLibModelViewer と同じ処理をされていると思います ただ、私も詳しくはわかっていないのですが、物理演算や IK はなぜかコンパイルする環境が 異なるだけで挙動も変化してしまったりするので、 DxLibModelViewer と挙動が異なることも普通に発生します 左足首がくねくねしてしまう原因はわかりませんが、とりあえずスカートの挙動が変になるのは MV1LoadModel でモデルを読み込む前に DX.MV1SetLoadModelPhysicsCalcPrecision( 1 ) ; や MV1SetLoadModelPhysicsCalcPrecision( 2 ) ; を記述すると直るかもしれません MV1SetLoadModelPhysicsCalcPrecision は DX_LOADMODEL_PHYSICS_LOADCALC による読み込み時の 物理演算適用での物理演算の FPS を設定するための関数で、 MV1SetLoadModelPhysicsCalcPrecision( 0 ) ; では 60FPS( デフォルト )、 MV1SetLoadModelPhysicsCalcPrecision( 1 ) ; では 120FPS、 MV1SetLoadModelPhysicsCalcPrecision( 2 ) ; では 240FPS、 MV1SetLoadModelPhysicsCalcPrecision( 3 ) ; では 480FPS、 MV1SetLoadModelPhysicsCalcPrecision( 4 ) ; では 960FPS、 MV1SetLoadModelPhysicsCalcPrecision( 5 ) ; では 1920FPSとなっていて、 FPS が高いほど演算の精度は上がりますが、VMDファイルの読み込み時間が増大します ( 120FPS で2倍、240FPSで4倍、480FPSで8倍 ) よろしければお試しください
メンテ
Re: PMXの読み込みについて ( No.2 )
名前:774(解決) 日時:2018/01/14 09:30

ご回答ありがとうございます。 DX.MV1SetLoadModelPhysicsCalcPrecision(1) によりスカートの挙動が直りました。 左足首の変な動きは変わりませんでしたが、PMX EditorでPMXの左足首ボーンに 回転+ を 付与することで解消しました。 今回、120fps演算で他のPMXを試したところ、今までリボンや髪の毛がびよーんと無限遠に 伸びて使えなかったり、ポニーテールや着物の袖が異様にバタついてイマイチなものが あったのですが、全部ではないものの、かなり発生しなくなり、使えるようになったのが 増えて喜んでおります。ありがとうございました。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存