2013年09月19日

DX11

やっとのこと色々動き出しているようなので・・・

sm21860058



DX11化は随分前にうちでもやってみましたが、いくつかの利点と問題点があったのでちょっと書いておこうかと思います。

■利点

・エフェクト機能の自由度が大きく上がる
・StreamOutputを応用することで GPUスキニングと描画エフェクトを完全に分離できる(=高効率化) ※1
・描画以外にもシェーダ処理を応用することで各部処理を高効率化可能

※1
MMDでは CPUでスキニング → MMEで描画処理、という流れなので頂点数が増えると極端に効率が悪くなります。MMMや PMXエディタなどでは GPUスキニングを利用していますが、DX9での実装では描画エフェクト毎にスキニング処理が発生するので無駄が多くなります(描画エフェクト側にも不要な記述が必要になってしまう)。DX11(10)の機能を利用することでこれらが一気に改善されます(テスト済)

※DX9でのGPUスキニングでも変形部と描画部を分離することは可能ですが(PMXエディタで実現しています)、どちらにしても描画エフェクトに特別な記述が必要になるので、DX11(10)と比較して汎用的/効率的な方法とはいえません。


■問題点

・複雑化する(というか単純な構造ならわざわざ DX11にする意味がない)
・過去の資産(MMEエフェクト)がそのままでは使えない ※2
・現状システム面の変更が難しい MMDでは効率を上げられない ※3

※2
DX11(10)では DX9用のエフェクトを利用する機能が一応ありますが、DX10以降は数値代入が厳密化されたり、UV座標の取り方が変更されていたりするので、そのままではまず使えませんでした。多少の修正が必要になります。また仮に DX9用のエフェクトをそのまま動作可能とするなら、システム自体を DX9/11 の共用状態にする必要があるので、かなり複雑化したものになってしまうでしょう。

※3
例えば DX11に適したセットアップのためにはモデルデータ自体の仕様変更が必要になる場合がありますが、現状の MMDにその対応を逐一期待するのは難しいでしょう。GPUスキニングへの応用も同様の理由で MMDでは意味がありません。結果として DX11へ最適化するには MMDのようなベースシステムからの作成が必要となってしまいます(案というか仕様書レベルだけなら一応ありますけどね・・・)

----

件の動画ではテッセレーションについてうまく応用されていましたが、個人的には「おおざっぱに使う分には便利だが、実際に高いレベルで運用するにはいくつかの技術との組み合わせが必要になるので、手がかかる割りには効果が薄い」という印象でした。

正直なところ DX11対応については「やるならベースシステムからの改善が必要」と考えていますが、現状かなり高い機能レベルで安定している MMMですら、広範囲のユーザーに十分効果的に活用されているとは判断しづらい状況ですし、また DX11専用ともなれば、XP以前のユーザーさんは切捨てとなってしまいますからね。

※所謂エフェクト派閥が増えるのも利用者的には困りモノでしょう。


・・・とまあそんな感じです。

DX11自体は自由度が大きく上がるので非常に有用なものですが、それ故、効果的な運用にはシステム側の改善が必要になります。

そのうちやる気になったらまた色々やるかもしれませんが、昨今は MMD自体を商業ベースで活用されるような方も増えてきている状況ですので、特に自分が頑張る必要はないかなぁ・・・という風にもよく思います。

なんにしても今は かんこれや MHで忙しいので・・・


以上、取り留めのない内容でしたが、DX11についてのちょっとしたお話でした。
posted by - at 02:51| MMD | 更新情報をチェックする