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の動作確認と設定の確認しないといけないみたい。
何故かはわからないけど。 ドライバの更新自体は必要なことなので、自己責任としか言えないんだろうね。

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