2015年11月30日月曜日

「[MMD]avi出力したらfpsが半分になった件」が解決した件

こちらの記事では書いていなかったけど、HgDOFを使ったときに、
30fps出力のはずなのに15fpsぐらいで出力されてしまう症状があった。

出力サイズが仕様の規定をオーバーしてると思ってたのだけど、
[MMD]avi出力したらfpsが半分になった件」で針金Pにコメントいただいて、

どうやら出力サイズについては誤記で、1280*720で問題なく動くということでした。針金P本当にありがとうございます。

再度確認してみたけど、標準で入っているサンプル(きしめん).pmmにHgDOF入れただけでavi出力結果が15fpsぐらいの間引き状態になってしまった。しかも出力サイズ1024*768だ。

針金Pの環境でも問題なく出力できていたということなので・・・


つまりうちの環境の問題だ!



・・・



えーん><



ということで調べてみた。

結論だけ知りたい方は一番下を見てね。

NVIDIA製のグラフィックボードを使っていて、HgDOFがfpsどおりの値で出なかったり、何か出力したaviファイルがカクついている人は試してみてね。
出力fps通り出てるかはaviutlとか動画編集ソフトで確認すると良いかも。

1.疑問

 実は自分の環境でも、以前は1280*720でhgdofが正常に動いていたのだ。
 2月の雑誌に出している動画を確認すれば分かるのだけど、
 hgdofで普通に30fpsで出力できていた。

 ということは、その動画を作った後、2015年2月から2015年11月の間に
 動作が変わったということだ。

2.変更した内容 

 2015年2月から2015年11月までの変更点を思い出してみる。

  PCハード :ハード自体の変更はなし。
          2015年10月あたりにディスプレイを一つ追加して
          マルチディスプレイにした。

  ドライバ   :グラフィックドライバを更新。ボードはNVIDIA GTX770。
          最新の更新では、以下のバージョンになってる
           - Nvidia geforcee experience 2.5.15.54
           - GeForce Game Ready Driver 359.00

  プログラム:MMDはv926x64、MMEはv037。両方とも変更なし。
          使用してるHgDOFのバージョンも変更なし。

 つまりドライバまわりに何かがおきたっぽい。

3.グラフィック設定の確認

 NVIDIA製品では、NVIDIAコントロールパネルというものがあって、
 そこでグラフィック設定を詳細に変更できる。
 Windows8の場合は、タスクバーのウィンドウズマークを右クリックして、
 「コントロールパネル」-「ハードウェアとサウンド」-「NVIDIAコントロール パネル」
 を選ぶと起動できる。 

 NVIDIAコントロールパネルを起動したら、
 「3D設定」-「3D設定の管理」の画面を開くと、「グローバル設定」(全プログラム共通設定)と
 「プログラム設定」(プログラム個別の設定)が出来る。 
 MMDだけの設定をする場合、「プログラム設定」のタブを選んで、
 「1.カスタマイズするプログラムを選択する」の右側にある「追加」ボタンを押す。
 最初は一覧に出てないので、「参照」ボタンを押して、今使用している
 「MikuMikuDance.exe」ファイルを開くと、MMDのみの3D設定が出来る。 


4.グラフィック設定の変更

 3D設定の管理でMMDが選択で来たら、その下にある
 「2.このプログラムの設定を指定する」の一覧から必要な物を変更する。
 今の設定は、
 --------------------------------------------------------------------------------
   CUDA-GPU :グローバル設定(すべて)
   アンチエイリアシング - FXAA : グローバル設定(オフ)
   アンチエイリアシング - ガンマ修正 : グローバル設定(オン)
   アンチエイリアシング - トランスペアレンシー:グローバル設定(オフ)
   アンチエイリアシング - モード
       :グローバル設定(アプリケーションによるコントロール)
   アンチエイリアシング - 設定 ※ (設定できない)
       :グローバル設定(アプリケーションによるコントロール)
   アンビエント オクルージョン ※ (設定できない)
       :このアプリケーションではサポートされません
   シェダーキャッシュ : グローバル設定(オン)
   スレッドした最適化 : グローバル設定(自動)
   テクスチャフィルタリング - クオリティ :グローバル設定(クオリティ)
   テクスチャフィルタリング - トリリニア最適化 :グローバル設定(オン)
   テクスチャフィルタリング - ネガティブLODバイアス :グローバル設定(許可)
   テクスチャフィルタリング - 異方向性サンプル最適化 : グローバル設定(オフ)
   トリプルバッファリング:グローバル設定(オフ)
   バーチャルリアリティレンダリング前フレーム数 : グローバル設定(1)
   マルチディスプレイ/ミックス GPUアクセラレーション
       :グローバル設定(マルチディスプレイパフォーマンスモード)
   レンダリング前最大フレーム数
       : グローバル設定(3Dアプリケーション設定を使用する)
   垂直同期 : グローバル設定(3Dアプリケーション設定を使用する)
   異方向性フィルタリング : グローバル設定(アプリケーションによるコントロール)
   電源管理モード : グローバル設定(適応)
 --------------------------------------------------------------------------------
 ってどれだよw
  
 色々やってみた。
 それぞれの意味はカーソルを持っていくと説明が見れるので、それで確認してみる。
 ※ 理解できるとはいっていない

 今回はあくまでHgDOFが動く状態なので、それ以外については確認してない。
  - アンチエイリアシング - FXAA
     オフ⇒オン   avi出力したら静止画状態になったw
  - アンチエイリアシング - トランスペアレンシー
    オフ⇒8*(スーパーサンプル)    変化なし
  - アンチエイリアシング - モード
    アプリケーションによるコントロール
    ⇒アプリケーションの設定を強調する  変化なし
  - アンチエイリアシング - ガンマ修正
    オン⇒オフ   30fpsでうごいたああああああああああああああ

  - バーチャルリアリティレンダリング前フレーム数
    (1)⇒3Dアプリケーション設定を使用   変化なし
  - マルチディスプレイ/ミックス GPUアクセラレーション
    マルチディスプレイパフォーマンスモード
    ⇒シングルディスプレイパフォーマンスモード  変化なし
  - テクスチャフィルタリング - 異方向性サンプル最適化
    アプリケーションによるコントロール⇒オン 変化なし

5.結論

 「NVIDIAコントロールパネル」-「3D設定の管理」で、
 アンチエイリアシング - ガンマ修正:オン⇒オフに変更すると、
 HgDOFが正常に30fps出力する状態に戻るみたい。

 (理由は知らない) 


 この変更が許容できない人は倍のfps指定して出して間引くみたいな形になるのかな。

NVIDIAだと常駐プログラムがあって、そいつが「最新ドライバ出たから更新してね!」と囁くので、そこでクリーンインストールとか選ぶとまた設定が変わってしまうので、ドライバ更新した後はMMDの動作確認と設定の確認しないといけないみたい。
何故かはわからないけど。 ドライバの更新自体は必要なことなので、自己責任としか言えないんだろうね。

時間かかったけど懸念が一つ減ったのでとりあえずは一安心かな。

2015年10月6日火曜日

[PMXE] 重複ボーン名 連番リネームスクリプト

既出だと思うけど重複したボーン名に連番を追加するCSScript
ベースはfuriaさんの「重複ボーン名自動リネーム.cx」です。

ダウンロードはこちらから
https://bowlroll.net/file/82556

入ってるのは以下
・重複ボーン名_連番リネーム.cx
・重複モーフ名_連番リネーム.cx
・重複剛体名_連番リネーム.cx
・重複Joint名_連番リネーム.cx

こんな感じのボーン一覧を
[編集]-[プラグイン(P)]-[CSScript]-[C#スクリプト]を起動
CSScriptウィンドウで使いたいスクリプトの読み込みをして、実行ボタンを押すだけ。
ね、簡単でしょ?

ご利用は自己責任で、モデルのバックアップは忘れずにね。

2015年7月10日金曜日

PMXEditorで指0ボーンを追加してみた

お久しぶりです。
今作成中の動画で指0ボーンを追加してて、プラグインとか手順とかないかなって
検索したら上手く見つけられなかったので、自分が普段やってる手順をちょっと公開してみようかなと思います。

手順はこんな感じ。
1.ボーン追加
2.ボーン親子設定変更
3.ウェイト塗り
4.ボーン鏡像コピー
5.ウェイト鏡像コピー
6.表示枠追加

動画での説明はこちらになります。

http://www.nicovideo.jp/watch/sm26675966

1.ボーン追加

指0の位置になりそうな指1と手首の間の任意の頂点を選択して、
「選択頂点」⇒「範囲中心にオブジェクト追加」⇒「ボーン」を選択してボーンを作る。
それを人差し指から小指まで繰り返して合計4つ作成。

ボーンがリストの一番最後に4つ作成されるので、これの位置を手首と指1の間に移動する。
「プラグイン」⇒「System」⇒「リスト要素の順序入れ替え」
(この辺昔教えてもらった)
下のようなウィンドウが出るので、リストボックスから「ボーン」を選択して、
入れ替える対象ボーンを左側一覧から選択、
入れ替え先のボーン位置を右側から選択して
>>を押して入れ替え確定する。
並べ替え終わったらボーン名も変更しておく。

2.ボーン親子設定変更

作成したボーンの親ボーンを手首に変更
指0ボーンの表示先ボーンにはそれぞれの指1ボーンの数字を入れる。
指1ボーンの親をそれぞれの指0ボーンに入れ替える。

3.ウェイト塗り

「塗」ボタンを押してウェイト/UV描画のウィンドウを出して、塗っていく。
指1の付け根のウェイトを覚えておいて(ウェイト値の確認はCtrl+クリック)
一旦指1に100%に変更。
指0に元のウェイト値(100%から指1のウェイト引いた値)を塗って、
指付け根から手首に向けて75⇒50⇒25のように塗っていく。
(値は大体のもの)
親指と干渉しないように注意。
これを人差し指から小指まで繰り返す。
小指だけ端を100%で塗った方が良さそう。
出来たら動作確認。
もう少し調整した方がいいかもだけど大体こんな感じに。

4.ボーン鏡像コピー

左手の指0を先に作成したので、これを右手にコピー
作成した指0ボーンを全て選択して、選択オブジェクト⇒オブジェクトの鏡像作成 を実行
これで右手指0ボーンができるので、左手の時と同じように、ボーン並び順序、親子関係を設定する。

5.ウェイト鏡像コピー

ウェイトも鏡像コピー。
右手の頂点を選択して、ウェイト関連⇒選択頂点を鏡像からウェイト設定
出来たら動作確認。

6.表示枠追加

忘れがちな表示枠追加。
指ボーンが大量になるので、指0ボーンの枠とか作るといいかも。
表示枠タブで左側の共通表示枠を右クリックして新規追加をして、新規枠を作成。
作成して枠名を変更、右下のボーンリストで追加したものすべてを+追加できれば完了。
これで保存すれば完了。


こんな感じになります。
とてもめんどうですが、ピアノなどの小指の開く範囲に困ってる方はこんな感じを試してみてはどうでしょうか。


2015年4月27日月曜日

MME Movieの使用方法(アリーナモデル添付)

以前に、MMD用のアリーナモデルをUploadしました。


ファイルはこちらから
http://seiga.nicovideo.jp/seiga/im4629634

舞力介入Pが公開しているサンプルエフェクトのmoviesを16:9にしただけのものを同梱しましたが、
全く説明してなかったと思うので、簡単に説明を書きます。

◆apngファイルについて

apngとは、アニメーションpngファイルのことで、動く静止画ファイルみたいなものです。
作成方法は、aviutlのプラグインで作るのが最も簡単です。無料ですし。
※ 既にご存知でしたら読み飛ばしてください。

  • AviUtlのお部屋

    http://spring-fragrance.mints.ne.jp/aviutl/

  • apng出力プラグイン

    http://takeshima.halfmoon.jp/room/aviutl.html
     ※ 下の方の「APNG 出力プラグイン ver.007 (2012-08-06)」です。

作成方法を簡単に説明しますと、

  1. aviutlをダウンロードしてどこかに解凍する。
  2. apng出力プラグインをダウンロードして解凍、中のファイルをaviutl.exeと同じフォルダに
     (同梱のapng_output.txtに詳しく書いてあります)
  3. aviutlを起動して準備した動画ファイル(MMDのavi出力等)を拡張編集にドラッグ、プラグイン出力から「APNG出力」を選択して書き出し。です。

 出力前にフレーム開始位置がずれてないかも確認してください。



出力したファイルをさっきのmovie7 - 169.fxと同じフォルダに入れて、
名前を「169.png」にするか、movie7 - 169.fxの以下の169.pngを作成したファイル名に
書き換えるか、のどちらかで動くはずです。
-------------------------------------------------------------
    string ResourceName = "169.png";
-------------------------------------------------------------

◆読み込みエラーが発生する場合

movie7 - 169.xをMMDに読み込んだ時にエラーが出ることがあります。
「エフェクトファイルの読み込みに失敗しました:
 Error : some techniques cannot run on this hardware : MainTec」


この場合は、MMD操作で画面右上にある「MMEffect」を選んで、
「エフェクト割当」の「ツール」―「デバイス検証をスキップ」にチェックを入れて、
ファイルを読み込み直してみてください。


◆readmeに記述している「パス」について

「パス」ですが、パスとは「ファイルの位置・名称」を示すものです。
コンピュータ関連に詳しい人には馴染みの言葉なのですが、
一般的にはあまり使われてないのかも?

同じフォルダに

  • movie7 - 169.x
  • movie7 - 169.fx
  • 対象のapngファイル(今は169.png)

が入っていれば、apngのファイル名のみで大丈夫です。

movie7 - 169.fx
----------------------------------
texture MovieTex : ANIMATEDTEXTURE <
    // 使用するAPNG(or AGIF)ファイルを指定する。16:9
    //string ResourceName = "movie1.png";
    string ResourceName = "169.png";  ←同じフォルダならファイル名のみ書き換える。
>;
----------------------------------

別フォルダにファイルが入ると設定が面倒なので、同じフォルダのほうが良いです。
("c:\xxx...\ファイル名.apng"って記述しないといけなくなる。)


こんな感じです。