goodgames

メニュー


自己まんブログ


特設BF4正式版 推奨環境ベンチマーク









2013 > 09 > 25-01


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

DirectX11.1


いつか来るだろうと思っていたら遂に来た。EAからの抗議のメール。
悪口は程々にしろといつか言われると思っていましたが。

なんと田中美香社長から直々に。
でもアドレスがgmail。

内容はDirectX11.1とBF4の関係に関する御質問でした。(苦笑)

本件、いくつかの誤解があるんじゃないかと思います。
普通ならご本人に直接確認するところですが
社長のgmail宛に変なメール送るわけにもいかないのでここに書いておきます。

まずDirectX11.1高性能説。

答えはここDirect3D 11.1 Features(SDK仕様英語版)に全て書いてありますので読んでみて下さい。

と書いて終わりにしたら怒られるので続行します。

そもそもの話ですがDirectXってなんだか御存知でしょうか?

Windows上で3Dグラフィクスを使うためのAPIですか。
なるほど。XBOXは無視ですね。

いいえ、そんな意地悪な質問をしているわけではありません。

XBOXの話は置いておいて、Windowsの話だけに的を絞ると、
DirectXはWin32APIを経由せずに直接各種ハードウェアをアクセスするためのAPI群の「総称」です。

従って、3Dグラフィクスとは関係のないDirectXも色々とあります。

例えば音。DirectAudioやDirectSound。

さらに入力デバイスアクセスはDirectInput。
これはキーボードやマウスだけでなく、ゲームパッドなどの状態も取得出来ます。

他にも色々とあったような気がしますが忘れました。

そして主役のDirect3D
これのおかげで我々はゲームが楽しめるわけです。

が、これ文字通り3D専用なんですね。なんと2D描画が全く出来ません。

2Dなんて不要ですか。でもそれだとチャットが表示出来ませんね。
チャットの文字が3D風に飛び出してくるのはちょっとイヤですね。

自分のHPや武器の残弾数なども全て単純な2D描画です。
他にも色々とあります。スコアボードは典型的な2Dですし、オプションの各種設定画面も2Dです。

しかし...

恐らくBFBC2あたりまでは一見2Dに見える描画も実は全て3Dになってしました。

これ文章で書くと全然イメージが伝わらないと思います。
かと言って絵を描く時間は無く、サンプルプログラムを用意するほどの話でもないので
このまま文字で続行しますが。

3Dゲームとは仮想的な3次元空間の中でプレイすることは誰もが理解していると思います。

従って、幅(X)、高さ(Y)、奥行き(Z)の3軸の概念があります。

この空間に2Dの描画を行うと何が問題になるかと申し上げると
たった一言なのですが常に遠近感が表現されてしまうところが大きな問題になります。

単純に考えると遠近感は自分からの距離が問題になるため、
奥行き(Z軸)を中心に考えることになりますが、
仮想的な3D空間に2D描画を行う場合、奥行きはゼロを指定します。
つまり、自分からの距離がゼロの地点に厚さの無いジオメトリ(オブジェクト)を描画すれば2Dになるわけです。

すみません。これはウソです。いいえ、半分ぐらいは事実ですが。

このままだとまた問題が発生します。
奥行きはゼロなので一番手前に2Dの物体が描画されます。

でも仮想的な3D空間では左右(X軸)や上下(Y軸)でも遠近感が発生します。
これ当然ですよね。
自分の目の前(奥行き方向の距離はゼロ)で地上に止っている飛行機と、
同じく奥行き方向の距離はゼロでも上空1000mの戦闘機が同じ大きさで見えたらおかしいじゃないですか。
左右方向も同じことになります。

従って、&{仮想的な3D空間では画面中心の一点以外は全て遠近感が発生する}ことになります。

本当はココに絵を描きたいところですが....

はい、描いてきました。力作です。(苦笑)


絵の中に書いた文言がイマイチでした。

正しくは「Direct3DでScoreBoardを描く場合、このような形が四角く描画される」となります。

理由は前述の通り、画面中央から遠い位置程遠近感の影響で中央方向に縮んで描画されるためですね。
四隅が尖っていますが、四隅が中央から一番遠くに位置するため、中央方向に縮められた結果、四角く描画されます。

Direct3Dってなんて面倒なんでしょう。
でも数年前までは本当にこんなことをしていたんですね。
実際にはFrostbiteなどなどの描画エンジンが自動的に収縮率の計算を行うので、
グラフィックデザイナーは四角くデザインすれば良いのですが、
VRAM上に展開されるタイミングでは本当にこのように変形させた2Dオブジェクトが必要でした。

大昔にはDirectDrawと名付けられた2DAPIも存在していましたが、Direct3Dとの相性の悪さから廃止されてしまいました。

ようやくDirectX10.1になり、Direct2DなるAPIが実装されたことによりこの問題の大部分が解決しました。

普通に四角く描けば四角く画面に描画される。
当たり前のことが当たり前に実現出来る時代がようやく到来しました。

しかしまた暗転。

大ヒット作だったDirectX9に比べ短命だったのがDirectX10。
DirectX10.1がリリースされたものの、あっさりとDirectX11にその座を譲ることになりました。

ここ某Microsoftさんが暴挙に出ました。

なんと、Direct2DはDirectX10.1でしか動かなかった!!

長くなりすぎたので一気に結論に突入します。
他にも質問を頂いているので。(苦笑)

Direct2DがDirectX10.1でしか動かないのはある意味事実なのですが、
もう一歩正しく描くとDirectX10.1からしか呼び出せなかったとなります。

そのためDirectX11時代は下記のような方式でDirect2Dを利用していました。

Direct2D -> DirectX10.1 -> DirectX11

一度DirectX10.1用の画像を生成しその画像をDirectX11のAPIに渡す方式です。

明らかに無駄

結論。

DirectX11.1ではDirect2Dと直接連携して処理を行うことが可能となり、

DirectX10.1が介在するオーパヘッドが無くなるため以前より高性能になります。


でも2D描画って元々描画負荷は微々たるものだし、
DirectX10.1が介在していたことによるオーパヘッドは全てCPU負荷になるため、
GPU処理にはなんら影響を与えないんですよね。

DirectX11.1とBF4と問われているため、BF4への影響になりますが
先日実施した推奨環境に関する微妙な試験でもわかる通り、
ほぼ間違いなくBF4ではGPUネックになることが予想されるため、
相当古いモデルのCPUを使わない限りCPU負荷が下がることがメリットになることは無いんじゃないかと思います。

DirectX11.1ではその他にもいくつか改善点がありますが、
3Dゲームの性能に影響を与えるものはほとんど含まれていません。

ではの御質問へ次へ。

( - )