3Dゲームワールドのスケーリング係数を選択するにはどうすればよいですか?


9

私はいくつかの物理シミュレーションで3Dタンクゲームのプロトタイプを作成しています。C++を使用しています。私が下す必要がある決定の1つは、現実との関係におけるゲームの世界の規模です。たとえば、ゲーム内の1つの測定単位は、実際には1メートルに相当すると考えることができます。これは直感的に感じますが、何かが足りないかもしれません。

次のことを潜在的な問題と考えることができます。

  1. 3Dモデリングプログラムの互換性。(?)
  2. 数値の精度。(これは問題ですか?)特に大規模な場合、Battlefieldなどのゲームはどのように巨大なマップを持っていますか:実世界のスケールで1:1マッピングを使用する場合、浮動小数点表現は大きいほど精度が低下する傾向があるため、数値精度を失わないようにしてください。数値(たとえば、レイキャスティング、物理シミュレーション)
  3. ゲームプレイ。-9.8 m/s^2重力のように現実世界のほとんどの値を使用しているときに、ユニットの動きが遅くなったり速く感じたりしたくありません。(これは主観的な場合があります。)
  4. インポートされたアセットをスケールアップ/ダウンしても大丈夫ですか、それとも元のスケールの世界に最適ですか?
  5. レンダリング性能。同じ頂点数の大きなメッシュはレンダリングに時間がかかりますか?

これを複数の質問に分割する必要があるかどうか疑問に思っています...

回答:


3

一般的には、何でもうまくいくはずです。

  1. 実際のオブジェクトがあるので、それらのスケールを一致させることは理にかなっています(3Dモデリングアプリには通常、測定単位の設定、メートル、フィートなどがあります)が、タンクから離れて、木や他の風景オブジェクトに移動すると、おそらくそれらが必要になりますゲームスタイルに合わせてカスタムスケーリングする(ツリーをモデル化し、ゲームエディターでスケーリングして見栄えをよくする方法があるため、何度も同じツリーを再利用しますが、さまざまなスケールで多様性を追加します)。

  2. カメラをワールドの原点から遠くに移動しないでください。ワールドの原点の近くに配置されたカメラの周りでワールドを移動します。このようにして、精度が低い値をGPU /物理で正確に比較する必要がある場合に発生する、精度に関する多くの問題を回避できます。タンクとカメラを原点から10 km移動すると、精度はfloat32で数分の1ミリ単位になり、変換されたモデル間のZファイティングと同様の効果が発生する可能性があります。

  3. ゲームの雰囲気を良くするには、グローバル定数を微調整する必要があります。これは、世界の相対的なスケールを変更して退屈な部分をスキップし、より興味深いものを、現実世界で互いに離れている4x4 kmの小さなエリア(町、川、山など)に詰め込むのと同じ方法です。

  4. それらがより適切にスケーリングされているように見える場合-それらをスケーリングします。彼らがそうであるように合うならば-それを保ってください。ゲームや映画は、現実をブラインドコピーすることよりも芸術です。これで、高さ2mのモデルになっている見栄えの良い木を見つけました。もちろん、それをスケーリングし、他の手段(パレットの微調整、テクスチャの詳細など)でゲームに合わせます。

  5. 画面上で同じ量のピクセルを表示する限り、違いはないと思います。


8

いきます

  1. 3Dモデリングプログラムでは、単位スケールを選択できる傾向があります。インペリアルまたはメトリックに制限される場合がありますが、それは単なる数値です。数値は簡単に変換/スケーリング/調整できます。本当にあなたがいる限りあなたがその使用として、使用しているものユニットシステムは重要ではありませんものを。一貫性を保ち、1メートルが1フィートにならないようにします。

    編集:本:ゲームコーディングの完了、3番目の追加、第15章、pg。525、「メートル、足、キュービット、またはケリカム?」

  2. 頂点のチャンクが大きいゲームでは、いくつかのことができます。1つは、それらを小さなチャンクに分割し、そのチャンクを参照するデータがオフセットを指定できるようにすることです。Octreesの使用に多少似ています。これは、見えない頂点の大きな部分のレンダリングを回避するためのレンダリング最適化です。または、doubleは1.79769e + 308を格納できます。これは、かなり大きいが詳細な数値です。フロートは3.40282e + 038を格納できますが、これも粗末ではありません。

    編集:ゲームコーディングの完了、3番目の追加、第13章、pg。410、「座標と座標系」(投稿の下部に追加された表)

  3. その場合は、おそらくメートル法を使用するか、独自の単位系に変換します。注目に値するのは、おそらくその値を少し調整することです。確かに、調整した値は物理的に正確ではありません。しかし、たとえばでより正確に感じるかもしれません-9.3 m/s^2

  4. あなたどちらの方法でもそれ行うことができます。資産をスケーリングすることを私は言うでしょうが。世界をスケーリングする場合は、重力、速度の計算、その他すべてのことを実行して変更する必要があります。アセットをUnity3Dにインポートするとき、通常はインポート設定でモデルのスケールを調整する必要があるため、Unityがスケールすることを想定しています。あなたがそれらの線に沿ってもっと何かが欲しかったら。

  5. 大きくても小さくても、ポリゴン/メッシュのサイズは、ポリゴンの数とほとんど同じです。モデルが使用するピクセル数によっては、パフォーマンスがわずかに変化する可能性がありますが、それだけです。それを除けば、10または100の数値は、コンピューター側の何も変更しません。処理するビット数は同じですが、異なるビットが0であるというだけです。

編集:休止表は、32ビットIEEE浮動小数点数を想定しています。

Game Coding Complete, Third Addition, Table 13.2, pg. 411
Smallest unit         Smallest Representable object  Upper Range    Description of
                      (As a textured polygon)                       largest area

100m                  A group of redwood trees       1.67x10^9      Earth/Moon System
1m                    A Human Being                  1.67x10^7      North and South America
1cm                   A coin                         1.67x10^6      California
1mm                   A flea                         1.67x10^5      San Francisco Bay Area
100 micrometer        A grain of pollen              1.67x10^4      Downtown San Francisco

このすべての情報、およびその他の詳細については、Game-Coding Completeを参照してください。マイク・マクシャフリ作。Black JackからThief:Deadly Shadowsまでのゲームに取り組む業界の専門家。


元の質問に多くを追加するものではなく、具体的な例を示すものでもないため、この回答には満足していません。ポイント2に関しては、可視性の決定やジオメトリページングや最大浮動小数点数については特に質問していませんでした。しかし、浮動小数点は大きな数で精度を失うため、実際に格納できるのは、大きなジオメトリで数値の不正確さを処理する方法です。非常に大きな数値ですが、精度が低くなります。
concept3d 2013年

それらの編集はあなたの好みに合っていますか?
Wolfgang Skyler

ええ、そうです。特に、物理シミュレーションで、このstackoverflow.com/questions/872544/precision-of-floating-pointについて特に質問していましたが、別の質問が必要だと思います。
concept3d 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.