2019年11月03日

起動に失敗する主な理由

いまだに PMXエディタの起動に苦しんでいる姿が見受けられるので一応まとめておきました。
読むの面倒な方は "■ 初心者用セットアップ手順" まで一気にどうぞ。


原因としては、だいたい以下の 3点に絞られます。

A. ブロック解除
DLしたZIPファイルをエクスプローラで展開する前に、ファイルのプロパティから "ブロック解除" をおこなっておく必要があります。

起動時に大量のエラーが表示される現象はこのケースが該当します。ブロック解除以外に下記のような解決方法もありますが、

・ゾーンIDに対応していない古い展開(解凍) ツールを使用する
・展開時に自動的にブロック解除をおこなってくれるツールを使用する (デフォルトだとOFFになっていることが多い)

なんにしても OS標準のエクスプローラだけでは解決できない事案なので、ご注意ください。またアーカイブ(ZIP) から直接展開するタイプのプラグインや他ツールでも、同様の問題が発生する場合があります。

B. ランタイム
実行ファイル(EXE)を起動しても反応がないケースや 「〜が不足している」 といった旨のエラーメッセージが表示されるような場合が主に該当します。

readme.txt の冒頭に参考リンクが書いてあるので、各環境に合わせてセットアップしてください。

追加が必要な必須ランタイムを大別すると以下の 3種類に分類されます。
・DirectX
・.NETフレームワーク
・VisualC++ (VC++)

[DirectX]
特に問題になりやすいのが DirectX のランタイムです。よくある罠としては 「バージョン診断で DirectX 12 (現行の最新版) と書いてあったから大丈夫」 というものがあります。

PMXエディタや MMDなどで使用している DirectXのバージョンは DirectX 9 (正確には 9.0c) なんですが、残念ながら DirectXは各バージョン間に互換性がありません。

DX12に対応済みといっても、すなわち DX9もOK ではないんですね、困ったことに。
経験上、昨今の PC環境では DX9は新たにセットアップが必要になるケースがほとんどです。

※問題になった事例はあまり聞いたことがありませんが、グラフィックドライバも DirectXランタイムとの相性が出るかもしれません。一応注意しておきましょう (ドライバが問題になるのは起動時よりも実行時の方が多い)

[.NET]
.NETフレームワークは現在では OS標準の基本機能として組み込まれていますが、いくつかバージョンの違いがあります。

PMXエディタの起動だけなら .NET4世代が入っていれば十分です (64bit版の使用は .NET4.6以降が推奨)。Win10なら標準状態で .NET4.6が構築されているので、特に何かをする必要はありません。

ただし追加する各プラグインによっては .NET3.5以下が必要になるかもしれません。その場合 Win10では .NET3.5以下は "別途インストール" ではなく、コントロールパネルの 「プログラムと機能」 → "機能の有効化" から設定する必要があります。

[VC++]
VC++ランタイムは x64(vcredist_x64.exe) が64bit版用(PmxEditor_x64.exe)、x86(vcredist_x86.exe) が32bit版用(PmxEditor.exe) に対応しています。

VC++2013は DL時に同様のファイルを選択する必要があります。2010と同名ファイルのようなので間違って上書きしないようご注意を (アイコンが異なります)

その他全体的な注意点として、
・ランタイムのインストールが特定のブラウザ経由の実行ではうまく動作しない
・インストールが正常に終了しても実際は正しく構築されていない?
といったことなども、(稀に) 発生したりするかもしれません。

C. セキュリティソフト
一部のセキュリティソフトが誤った判定をしてしまうケースがあるようです。

電子署名がないとか、インストーラーを通してないだとか、プラグイン的な外部プログラムの実行機能を有しているだとか... いくつか理由は想像できますが、なんにしても "本当に危険なアプリケーションなのか正しく調査していない" というのは間違いないので、そういう判定のいい加減なセキュリティソフトは、自分の環境ではアンインストール対象にしてしまうでしょうね。

●マルウェアプラグイン
PMXエディタのプラグイン機構は OSの実行機能をそのまま流用しているだけなので、実際は個別のアプリケーションを動作させているのと変わりありません。

要するに マルウェア(ウイルス) を仕込むことや踏み台にすること自体は "さほど難しいことではない" ということです。

簡単な対応として PMXエディタ及び同梱プラグインは "ネットワークへの接続を一切おこなわない" という方針のもとで作成されています。ネットが当たりまえの昨今では既に標準機能化している 自動バージョンチェック や 更新機能 がないことなども、その方針によるものです。

もし個別のファイアウォールなどに何らかの通信が引っかかるような場合は、追加したプラグインによって引き起こされた可能性が高いです。

通信内容があらかじめ明記してあればよいですが、そうではない場合は何かしら情報が盗み出されているかもしれません (明記していても信用に足るかは別の話)

当然ながらネットワーク不使用だけではオフライン環境に悪さをするタイプは防げないので、結局のところは利用者が責任を持って 利用するorしない の選択をするしかありません。このあたりも 「タダより高いものはない」 を実感/実践するハメになる可能性があるので、(出所の怪しいブツの利用など) 気を付けて頂きたく思います。


■ 初心者用セットアップ手順

1. ダウンロードページから ZIPファイル (PmxEditor_####.zip) を DL(ダウンロード/保存)

2. エクスプローラから DLしたファイルのプロパティ(右クリックメニュー) を開き、ブロック解除
0116.jpg

3. ZIPファイルを展開

4. 実行ファイル(*.exe) をダブルクリックで起動してみる
※正常に起動 → MMD標準モデル(*.pmd) などを開いて(ファイルドロップでOK) 問題なければ完了

5. 反応がない場合や 「〜が足りない(云々)」 などのメッセージが出るような場合はランタイムが不足

6. readme.txt の冒頭部分に必須ランタイムへのリンクが書いてあるので、ブラウザなどから "DLして" 各種インストール (↓にページへのリンクが貼ってあります)
0117.jpg

6.1. Win8まで (XPや7含む) の方は .NET4 (世代の最新版のみでOK) をインストール
Win10の方はそのまま次へ

6.2. VC++ランタイムを 2010:x86 → 2010:x64 → 2013:x86 → 2013:x64 の順番に入れる
※vcredist_x86.exe と vcredist_x64.exe をそれぞれDLして実行。2010と2013で同名のファイルになっているので注意すること。当然ですが OSが32bit版の方は x64のインストールはできません
Microsoft Visual C++ 2010 再頒布可能パッケージ (x86)
Microsoft Visual C++ 2010 再頒布可能パッケージ (x64)
Visual Studio 2013 の Visual C++ 再頒布可能パッケージ

6.3. DirectXランタイムのインストール
DirectX エンド ユーザー ランタイム Web インストーラ
うまくいかない場合は一旦グラフィックドライバを更新して再度試してみる、など

7. これで起動確認して (4.※) 問題なければ OK

正常に起動しない場合は、
・ランタイムを DLするブラウザを変えてみる
・ランタイムを調査 (SP版がないかとか、他のインストールパッケージがないかとか)
・セキュリティソフトで実行を防がれていないか調査
などを確認してみましょう。

プラグインは本体の正常起動を確認した後に配置してください。

よくある失敗として、PMXエディタと PMDエディタ用に分けられたプラグインをそのまま全部組み込んでしまい支障が出る、といった事例があるようです。同梱の説明書はよく読みましょう。

.NET3.5以下が必要なプラグインの場合、Win10ではコントロールパネルからの有効化を選ぶ必要があります。またプラグイン(*.dll) も本体と同様に ZIP(またはDLL) のブロック解除が必要です。忘れやすい項目なので注意しておきましょう。


以上


posted by - at 12:16| PMX | 更新情報をチェックする

2019年07月17日

発想は悪くない

...んですが、実装はちと チカラワザ が過ぎましたな。
sm35402391


(7/19追記) さっそく対応されたようですよ → sm35419659

スマートな (よくある) 実現方法としては、外部のウィンドウ操作系スクリプトやそれ系のAPIを使うことが多いように思います。

※有名どころだと UWSCとか(なんか色々消えてるらしい?)。検索するとその手のツールは色々見付かります。

件のパターンなら、

1. TransformViewの "#個別モーフ確認" をON
2. モーフリストを上から走査しつつ (先頭要素選択からキー下入力)、表示画面のウィンドウ内容をキャプチャし加工保存

ぐらいで実現できるので、面倒なのは View内の各コントロールハンドルの取得あたりでしょうか。

まあ (予めモデル情報の精査は必要ですが) 同じような発想で MMD本体でも同様のブツは作れたりするので、自動化でラクしたい方なんかは色々情報をあさってみるのもよいかもしれませんね。


...と、頑張っている方たちに冷や水浴びせているだけではアレなので、一応 対応?的なことをやっておきました。

以下にサンプル置いておくので後はお好きなように。

※PMX用のプラグインはあまり太らせたくないので、旧仕様に突貫で拡張を施しておきました。↑でも書いてありますが、操作マクロ系拡張は十分に方法論が確立されているので、わざわざプラグインとして専用機能を用意していくのは気が進むものではないですね (面倒)


!! PmxEditor_0254g 以降が必要
コード上でダブルクリックをおこなうと内容を選択できます。CSScript の簡易形式にそのままコピペで実行可能です。

■テストコード1 : View画面をクリップボードへキャプチャ
// PmxView画面をクリップボードへコピー(キャプチャ)
Clipboard.SetImage(view.GetClientImage());

// SubView
//Clipboard.SetImage(connect.View.PmxViewHelper.SubView.GetClientImage());

// TransformView
//Clipboard.SetImage(connect.View.TransformView.GetClientImage());

----
■テストコード2 : モーフ一覧を画像で出力(参考用)
/*
* 全モーフを一覧で画像出力します/適宜表示状態を変更してください.
* 一時フォルダにMorphImageOutフォルダを作成します
* 不要になったら要削除
* なお掲載用の参考版なので各自改変してご利用ください.
*/

// 画像出力先 = 一時フォルダ以下
var dir = Path.Combine(Path.GetTempPath(), "MorphImageOut");
if (!Directory.Exists(dir)) { Directory.CreateDirectory(dir); }

// 有効ファイル名判定用
var invals = Path.GetInvalidFileNameChars();
Func< /*このコメントはブログの表示が変になるため(元ソースには何もありません)*/
string, bool> checkName = (string name) => { return name.IndexOfAny(invals) < 0; };

// TransformViewは表示しておく
var tv = connect.View.TransformView;
tv.Visible = true;

// 変形はリセット
tv.ResetTransform();
// 個別モーフ確認をON
tv.MorphChecker = true;
int c = 0;
foreach (var m in pmx.Morph) {
try {
// "m[番号(4桁)]+_[モーフ名]" / 無効な場合は番号のみ
var path = Path.Combine(dir, "m" + c.ToString("0000") + (checkName(m.Name) ? "_" + m.Name : ""));
// モーフ対象を選択 → 変形適用
tv.SelectedMorphIndex = c;

// TransformViewの画面を取得し保存 | このjpegは画質が悪いので注意
path = Path.ChangeExtension(path, ".jpg");
tv.GetClientImage().Save(path, System.Drawing.Imaging.ImageFormat.Jpeg);
}
catch {
// 掲載用なのでここではスルーしておく
}
c++; // カウンタを進める
}

// モーフ確認をOFF
tv.MorphChecker = false;
// 対象フォルダを開く
System.Diagnostics.Process.Start(dir);



以上


posted by - at 02:30| PMX | 更新情報をチェックする

2018年06月26日

小ネタ (PMXエディタ)

たまには小ネタでも。内容的には今更な話ばかりですが、何故か未だに周知されていない不思議...

■ パーツ選択表示
まずはダメパターンから
●チェックリストからポチポチやる
0102.jpg

リストから一つ一つ探すのは非常に効率が悪い操作です。リストチェックから選択するのは "対象が判明している場合" だけにしておきましょう。

※PMXエディタは OS標準の(古い) UIを使って全て実装していますが、チェックリストUIはあまり触りたくない標準UIです (イベント挙動が謎?/カスタマイズが面倒etc)

●推奨操作1
0103.jpg

面選択を使った昔ながらの絞り込み方法。面の選択により対象材質の確認もすぐにできます。複数材質でも問題ありません。

●推奨操作2
0104.jpg

最近の PMXエディタなら対象面は選択頂点でも反応します。[除]→[反] は Shift+なら一度の [除] 操作だけで OKです。こちらも複数材質でも問題ありません。

※そもそもの話、MMDでの描画パフォーマンスを最適化するなら、材質数はできるだけ少ない方が望ましいです。PMXはエディタでの仕様上、材質をパーツ単位として個別に取り扱えるようにしていますが、本来は細かく分ける必要はありません。エディタの基本機能でも [同一材質の結合] などが用意されているので、テスクチャUVや透過判定等問題なければ (リリース時などに) 結合して最適化しておくとよいでしょう。


■ 選択補助

0105.jpg


■ 視点操作設定の場所 (カメラリセット関連など)

0106.jpg

視点操作関係は右上操作アイコン内から表示されるメニュー内 (右クリック) に配置されています。通常のメニュー内にあるのは回転中心関連だけなので、リセットや操作ロックなどはこちらから設定する必要があります。


■ ボーン系列選択

0107.jpg


■ 100%ウェイト設定

0108.jpg

ユーザー方の動向を見ていると "ウェイトは塗るもの" みたいな固定観念をたまに感じますが、別にそんなことはないです。

単一ボーンへの全振り(100%)ウェイトなら、対象の頂点/ボーンを双方選んで Ctrl+M を押すだけで完了します (PmxViewメニュー:[ウェイト関連]-[選択頂点を近位置ボーンでウェイト設定]-[ボーン軸基準])

一々ウェイト描画状態にして → ボーンを選択して → 頂点を範囲ドラッグ... みたいな面倒な基本操作を経由する必要はありません。

対象ボーンが選択しづらい場合は絞込み表示や、本体リストからのボーン選択 (View側がボーン選択不可でも選択可) などを併用するとよいでしょう。


■ ボーン軸ウェイト設定

0109.jpg

ボーン軸ウェイト設定 (Ctrl+M) で複数のボーンが選択されていた場合は、ボーン列からできる空間軸にしたがってウェイトが自動配置されます。

※元々の機能がこっちで、全振りはそれを特定状況で利用している形です。

機能としては、腕や指、髪などの円筒状に対して系列ボーンが内包されるような形状を想定しています。さらにこの状態から接合部に対してのブレンド描画([>>>])で、ざっくりとウェイト設定ができるようになっています。

0110a.jpg

0110b.jpg


とりあえず動けば十分、という程度のウェイト付けならこの手順だけで OKです。

●ブレンド描画 :
指定範囲の開始位置と終了位置に一番近い頂点のウェイト (と指定方向) を基準にして、範囲内を連続的な混合ウェイトに設定します。

画像の例だと 水色と青 がそれぞれ 100%で交差している範囲を指定しているので、互いが 0〜100% になるような、なだらかなウェイト変化に設定されます。

100%ウェイト以外でも使用できますが、あまり望ましい結果にはならないと思います (想定は、ボーン軸ウェイト設定との組み合わせで簡素なウェイト設定が楽にできるように、という程度)

なお、同 [>>>] 枠内の [ウェイト範囲] と同じように、指定位置によっては意図しない頂点に編集が及ぶことがあるので、その場合は絞込みや選択頂点によるマスキングなどで対応する必要があります。ブレンドの場合は対応ボーンが異なっていれば一応大丈夫なはずではありますが...


■ 2ボーン同時ウェイト描画

2ボーンウェイト (BDEF2) の場合、下地を 1ボーン分塗って、次のボーンにしてさらにウェイトを上から塗って... とか、そういう旧来の編集方式に従う必要はありません。

0111.jpg

元々 BDEF4用として拡張した機能ですが、ウェイト値を直接指定できるケースはこの機能だけでだいたい賄えます。

最近の PMXエディタなら各部位のボーン選択は以下のような仕様になっています (ボーンリスト欄上での右メニューから Indexコピーでも選択可)

0112a.jpg

0112b.jpg


■ モーフ編集時のアーカイブ利用

モーフ編集方式変更後、アーカイブが利用できなくなった? という話をどこぞやで見た気がしますが、特別に考える必要もなく単に本体側のアーカイブ機能を使えばいいだけです。

モーフ編集や変形同期など、PmxViewの現在の状態が特定の編集状態になる場合、本体側の操作は "その編集状態に対して適用される" という仕組みです。

0113.jpg



とりあえずこんなところで...(キリガナイ

エディタ関係の使い方を調べても古い時代 (PMDエディタ) の情報が真っ先に出てきてしまい、後に効率化された機能 (PMXエディタやプラグインなど) への更新はなかなか進みません。

まあ編集ツールに限った話ではありませんが、個別の機能ヘルプをネットの検索システムに頼る弊害の一つかもしれませんね。

なおエディタに限らず、やたら古いverで TIPSや機能解説をしている場面がたまにありますが、正直意図がよくわかりません。情報を発信する前にそのときの最新版なのか確認した方がよいでしょう (特に過去版に対して悪態なんかついていたりすると...)


以上

posted by - at 20:17| PMX | 更新情報をチェックする