タグ付けされた質問 「performance」

ゲームとそのアーキテクチャの設計と構造におけるいくつかの要因の結果としての、ゲームプレイの実行の品質、効率、および速度。

9
最適化が早すぎるのはなぜそんなに悪いのですか?
最適化について少し調べた後、ゲームを最適化するのが早すぎることは、広く認識されている罪のように思えます(文字通りどこでも)。 私はこれを本当に理解していませんが、パフォーマンスを念頭に置いて初めて開発するのではなく、ゲームのコア構造の一部を最後に変更することは非常に難しいことではありませんか? ゲームが終了するまで待つことで最適化が必要かどうかがわかりますが、とにかくそれを行うべきではありません。プレーヤー。 最適化が早すぎるのはなぜ悪い考えなのか、誰かに説明してもらえますか?

3
プレーヤーが作成した過剰な瓦bleをどのようにクリーンアップできますか?
私が作っている最新のゲームでは、このgifで示されている2Dオブジェクトを任意にスライスできます。 数百または数千のピースに連続的にカットできます。これは多くのラグを作成しません。なぜならそれらは常に眠っている物理状態にあるからです。しかしそれらを動かすと問題があります。 私はそれを作る方法に本当に自信がないので、何かを切り離すことからそれほど瓦はありません。一定の時間が経過した後、それらを削除したくありません。しばらくして切り取ったものに戻ると、ランダムに消えてしまうのが好きではありません。 プレーヤーが作成した過剰な瓦bleをどのようにクリーンアップできますか?
92 unity  2d  performance 

8
スレッドはいくつ必要ですか?
レンダリングとロジック、またはそれ以上のスレッドを別々に持つべきですか? 私は、データの同期によって引き起こされるパフォーマンスの大幅な低下を認識しています(相互排他ロックは言うまでもありません)。 私はこれを極端に考え、考えられるすべてのサブシステムのスレッドを実行することを考えてきました。しかし、私も物事が遅くなるのではないかと心配しています。(たとえば、入力スレッドをレンダリングスレッドまたはゲームロジックスレッドから分離するのは正気ですか?)データの同期が必要な場合、それは無意味になりますか、さらに遅くなりますか?

6
ビデオゲームで弾丸はどのように機能しますか?
C#でビデオゲームを設計しているときに、この質問に出会いました。 BattlefieldやCall of Dutyなどのゲームを考慮すると、数百または数千の弾丸が同時に飛んでいます。イベントは絶えずトリガーされますが、私が知っている限りでは、これは処理能力を大量に消費します。さまざまなゲーム開発者が(2Dおよび3D)箇条書きをどのように管理し、それぞれにとって最も効率的な方法は何かを知りたいです。 私は質問読ん弾丸はビデオゲームでシミュレートされているどのように?ただし、プログラムの設計の観点からは、箇条書きがどのように機能するかについては触れません。 いくつかのアイデアがありましたが、それぞれに欠点があります。 私が考えることができる最も効率的な方法(2Dゲームの場合): Bulletと呼ばれるクラスを作成し、ユーザーがボタンを長押ししても、0.01秒ごとにBulletオブジェクトが作成されるとします。この箇条書きの内容: 1速度 2ショットの開始位置 3スプライトテクスチャ 4ヒットエフェクト 箇条書きは独自のクラスになるため、描画、移動、およびアクションリスナー自体を管理できます。 インスタンス化されたこれらのオブジェクトの数千個を処理してから破棄するのは、プロセッサ上で難しいのではないでしょうか?RAMスペース? 3Dゲームの効率的な方法-私が考えていたもう1つの考えは: 武器クラスを作成するとしましょう。この武器にはさまざまな機能があり、そのうちのいくつかは次のとおりです。 1武器の照準を検出し、ターゲットを見ているかどうかを判断します 2銃撃のアニメーションをトリガーする 3 doDamage()メソッドがあります。これは、銃が向けられているものからヘルスを差し引くものを示します 4ボタンが押されたときに弾丸アニメーションクラスに通知する 次に、BulletAnimationなどの静的クラスを作成して、それがトリガーされた銃の場所、その銃が向けられている場所(弾丸の宛先)、および弾丸に使用する適切なスプライトと速度に関する情報を取得できます。次に、このクラスは、位置と目的のスプライトの両方に基づいてスプライトを描画し(おそらく新しいスレッドにidk)、銃から発射される弾丸をシミュレートします。 後者はコーディングがはるかに難しいようで、一度に何千もの弾丸に対してこれを行うために静的関数を絶えず呼び出すには、多くの処理能力が必要ではないでしょうか?開始位置と終了位置の両方で絶えず更新を取得することも困難です。 私の質問は、ゲームクリエーターが最も効率的に行う方法は何ですか?この方法は2Dゲームから3Dゲームに変わりますか?

7
符号なし整数と符号付き整数のパフォーマンスの違いは何ですか?[閉まっている]
符号付き整数とフロートを混在させると、パフォーマンスが低下することを認識しています。 unsigned intとfloatを混在させるのは悪いことですか? 符号なし/符号なしをフロートなしで混在させると何かヒットがありますか? さまざまなサイズ(u32、u16、u8、i32、i16、i8)はパフォーマンスに影響しますか?どのプラットフォームで?
42 c++  performance 

5
サイズが2の累乗でないテクスチャを使用する必要がありますか?
OpenGLとDirectXの初期の頃、テクスチャサイズは2のべき乗である必要がありました。これは、シフトなどを使用して、フロート値の補間を非常に迅速に実行できることを意味していました。 OpenGL 2.0(およびその前の拡張機能)以降、2のべき乗以外のテクスチャディメンションがサポートされています。 2のべき乗のテクスチャは、最新の統合されたディスクリートGPUでパフォーマンス上の利点がありますか?2のべき乗以外のテクスチャにはどのような利点がありますか? かなりのデスクトップ人口に、2のべき乗以外のテクスチャをサポートするカードがありますか?

7
ボクセル/マインクラフトタイプのゲームのレンダリング速度を改善するにはどうすればよいですか?
Minecraftの独自のクローンを作成しています(Javaで作成されています)。今はうまく機能します。40メートルの視聴距離で、MacBook Pro 8,1で60 FPSを簡単に達成できます。(Intel i5 + Intel HD Graphics 3000)。しかし、視距離を70メートルにすると、15〜25 FPSにしか達しません。実際のMinecraftでは、問題なく遠方(= 256m)に表示距離を置くことができます。だから私の質問は、ゲームをより良くするために何をすべきですか? 私が実装した最適化: ローカルチャンクのみをメモリに保持します(プレーヤーの視聴距離に応じて) 錐台カリング(最初にチャンクで、次にブロックで) ブロックの実際に見える面のみを描く 可視ブロックを含むチャンクごとのリストを使用します。表示されるチャンクは、このリストに追加されます。それらが非表示になると、このリストから自動的に削除されます。ブロックは、隣接するブロックを構築または破壊することにより、見えなくなります。 更新ブロックを含むチャンクごとのリストを使用します。表示可能なブロックリストと同じメカニズム。 newゲームループ内ではステートメントをほとんど使用しません。(私のゲームは、ガベージコレクターが呼び出されるまで約20秒実行されます) 現在、OpenGL呼び出しリストを使用しています。(glNewList()、glEndList()、glCallList())ブロックの種類の各側に。 現在、私は照明システムを使用していません。私はすでにVBOについて聞いたことがあります。しかし、私はそれが何であるかを正確に知りません。ただし、それらについてはいくつか調査します。パフォーマンスが向上しますか?VBOを実装する前にglCallLists()、呼び出しリストのリストを使用して渡したいと思います。代わりに千回使用しglCallList()ます。(実際のMineCraftはVBOを使用していないと思うので、これを試してみたいと思います。正しいですか?) パフォーマンスを改善する他のトリックはありますか? VisualVMプロファイリングはこれを私に示しました(わずか70フレームのプロファイリング、70メートルの視聴距離): 40メートル(246フレーム)のプロファイリング: 注:別のスレッドでチャンクを生成しているため、多くのメソッドとコードブロックを同期しています。ゲームループでこれを行う場合、オブジェクトのロックを取得することはパフォーマンスの問題だと思います(もちろん、ゲームループのみがあり、新しいチャンクが生成されない時間について話します)。これは正解? 編集:いくつかのsynchronisedブロックといくつかの他の小さな改善を削除した後。パフォーマンスはすでにはるかに優れています。70メートルの新しいプロファイリング結果は次のとおりです。 それがselectVisibleBlocksここの問題であることはかなり明らかだと思います。 前もって感謝します! マルティン 更新:いくつかの追加の改善(for eachの代わりにforループを使用する、ループ外で変数をバッファリングするなど)後、60の距離を表示できるようになりました。 できるだけ早くVBOを実装するつもりだと思います。 PS:すべてのソースコードはGitHubで入手できます:https : //github.com/mcourteaux/CraftMania

12
目的地が通過できない場合、どうすればA *をより速く終了できますか?
A *( "A star")経路探索アルゴリズムを使用する単純なタイルベースの2Dゲームを作成しています。すべて正常に動作していますが、検索にパフォーマンスの問題があります。簡単に言えば、通行不可能なタイルをクリックすると、アルゴリズムはどうやらマップ全体を通過して、通行不可能なタイルへのルートを見つけます。 どうすればこれを回避できますか?画面領域へのパスファインディングを減らすことができたと思いますが、おそらくここで明らかな何かを見逃していますか?

3
チームはソースファイルの上書きをどのように防止しますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Game Development Stack Exchangeで話題になるようにします。 4年前に閉鎖されました。 たとえば、ゲームエンジンなどが複数の人によって同時に処理されているときに、上書きをどのように防ぐことができるのか、ということが起こりました。 開発者1が作業してAudio.cppおり、開発者2も作業をしているとしましょう。Audio.cppこれは、一般的に大規模なチームで上書きに対処するためにどのように管理されていますか?(つまり、開発者2がファイルを開くのを停止して、開発者1が終了するまで)
26 project-management  version-control  teamwork  java  2d  collision-detection  vector  collision-resolution  unity  directx  directx11  directx10  xna  ios  monogame  windows-phone-8  xamarin  design-patterns  oop  xna  collision-detection  collision-resolution  bounding-boxes  rotation  collision-detection  mathematics  javascript  algorithm  separating-axis-theorem  xna  2d  monogame  image  xna  directx  graphics  performance  opengl  2d  3d  c++  directx11  unity  c#  scale  c#  xna  collision-detection  collision-resolution  leaderboards  scoring  glsl  srgb  tilemap  three.js  tiled  unity  physics  xml  dialog-tree  xna  c#  .net  opengl  lwjgl  vbo  physics  graphics  procedural-generation  simulations  water  opengl  java  textures  lwjgl  frame-buffer  unity  unity  2d  collision-detection  collision-resolution  trigonometry  java  android  libgdx  xna  c#  frame-rate  c++  unreal-4  procedural-generation  java  graphics  lwjgl  slick  c++  software-engineering 

3
MMOゲームで多数のピックアップを処理する方法
Minecraftのようなゲーム、または実際にピックアップを備えたMMOゲームはどのようにそれらを処理しますか? 地形を発掘するたびに、地形が3滴の「汚れ」を生成するとします。すべてのアイテムに、フレームごとに計算された回転アニメーションがあるとします。世界中のピックアップの数が非常に多くなると、それらのピックアップアイテムの多くがあなたから数年離れている可能性が高いため、特定のサーバーのクライアントのフレーム計算で無駄な大規模なオーバーヘッドになります。 だから私は、ローカルプレイヤーの近くにあるピックアップだけで「何かをする」必要があると考えましたが、それでも他のピックアップアイテムがアニメーションを開始するのに十分近いかどうかを確認する必要があるすべてのフレームを意味します。 私の実際の質問は、他のMMOがこの問題をどのように解決したかです。

7
ゲーム開発に適用できるC#プロパティを使用することをマイクロソフトは推奨していますか?
次のようなプロパティが必要になることがあります: public int[] Transitions { get; set; } または: [SerializeField] private int[] m_Transitions; public int[] Transitions { get { return m_Transitions; } set { m_Transitions = value; } } しかし、私の印象では、ゲーム開発では、特に理由がない限り、すべてを可能な限り高速にする必要があります。私が読んだことからの私の印象は、Unity 3Dがプロパティを介してインラインアクセスすることを確信していないため、プロパティを使用すると余分な関数呼び出しが発生することです。 パブリックフィールドを使用しないというVisual Studioの提案を常に無視する権利はありますか?(使用int Foo { get; private set; }目的を示すのに利点がある場合に使用することに注意してください。) 時期尚早な最適化が悪いことは承知していますが、私が言ったように、ゲーム開発では、同様の努力で高速化できる場合でも、速度を遅くすることはありません。

2
レンダリングツリーのパフォーマンスへの影響をどのように減らすことができますか?
低ポリ様式のゲームを作っています。水がある地形があり、たくさんの木が欲しいです。現時点では、10,000本の木が大量に配置されています。各ツリーは200個以下の三角形で構成されているため、負担がかかりすぎません。 主な問題は、湖があり、湖が非常に大きいことです。湖の反対側には実際には木が見えません。特にそこを歩いていると木が突然現れたとき、それは本当にひどく見えます。 これを修正するには、湖の向こう側に十分な量の木が見えるように木の距離を長くする必要がありますが、パフォーマンスは40〜50 fpsに低下し、ゲームにはまだ他にほとんど何もありません。それが役立つ場合は、GTX 1080を使用しています。 ツリーを増やしてゲームをより速く実行するにはどうすればよいですか?

3
ゲームが100%CPUを使用するのは正常ですか?
ゲームエンジンにマルチスレッド入力処理を実装しました。OSをポーリングして入力を収集し、タイムスタンプを付けるコードは個別のスレッドにあり、メインスレッドの各フレームは、収集した入力を論理的なゲーム時間。それはすべて動作しますが、このセットアップではCPUの100%を使用しています。コアは2つあり、ゲームの実行中は100%になります。 他のゲームもチェックして、彼らもそうするかどうかを確認しました。たとえば、SkyrimとDoom 3は60%をわずかに超えるCPUで問題ないようです。 マルチスレッド入力を使用するゲームが100%CPUを使用することは許容されますか?そうでない場合、そのようなゲームが入力スレッドによるCPU使用率を下げるために使用するトリックは何ですか?

6
距離関数を最適化する方法は?
かなり単純なRTSのようなゲームを開発しているときに、距離の計算がパフォーマンスに影響を与えていることに気付きました。 常に、ユニットがターゲットの範囲内にあるかどうか、発射体がターゲットに到達したかどうか、プレイヤーがピックアップを乗り越えたか、一般的な衝突などがあるかを知るための距離チェックがあります。 2点間の距離が多く使用されます。 私の質問はまさにそれについてです。フレームごとに何千回も実行している場合、かなり時間がかかる通常のsqrt(x * x + y * y)アプローチ以外に、ゲーム開発者が距離をチェックするための代替手段を知りたいです。 マンハッタン距離と二乗距離の比較に気づいていることを指摘したい(sqrtボトルネックをスキップすることによって)。他に何か?

5
O(N ^ 2)関数の改善(すべてのエンティティが他のすべてのエンティティを反復処理する)
少し背景を説明しますが、エンティティシステムにENTTを使用して、C ++の友人と進化ゲームをコーディングしています。クリーチャーは2Dマップ内を歩き回り、緑や他のクリーチャーを食べ、繁殖し、その形質が変化します。 さらに、ゲームをリアルタイムで実行した場合のパフォーマンスは良好です(60fpsは問題ありません)が、大幅な変更を確認するために4時間待つ必要がないように大幅にスピードアップできるようにしたいと思います。だから、私はできるだけ早くそれを取得したい。 クリーチャーが食物を見つけるための効率的な方法を見つけるのに苦労しています。各クリーチャーは、彼らに十分近い最高の食べ物を探すことになっています。 食べたい場合、中央に描かれた生き物は、149.64の半径(視界距離)で自分の周りを見回し、栄養、距離、およびタイプ(肉または植物)に基づいて、追求すべき食物を判断することになっています。 。 すべてのクリーチャーの食料を見つける機能は、実行時間の約70%を消費します。現在どのように書かれているかを単純化すると、次のようになります。 for (creature : all_creatures) { for (food : all_entities_with_food_value) { // if the food is within the creatures view and it's // the best food found yet, it becomes the best food } // set the best food as the target for creature …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.