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

ソフトウェアを変更して、その一部をより効率的に機能させるか、使用するリソースを少なくするプロセス。一般に、これは実行速度が速くなるか、必要なリソースが少なくなることを意味します。

3
メモリー不足状態にどのように準備しますか?
これは、明確に定義された範囲のゲームにとっては簡単ですが、問題はサンドボックスゲームについてであり、プレイヤーは何でも作成および構築できます。 可能なテクニック: 上限のあるメモリプールを使用します。 定期的に不要になったオブジェクトを削除します。 回復メカニズムとして後で解放できるように、最初に余分な量のメモリを割り当てます。約2〜4 MBです。 これは、16 GB PCとは異なり、メモリが通常制限されているモバイル/コンソールプラットフォームで発生する可能性が高くなります。メモリの割り当て/割り当て解除を完全に制御でき、ガベージコレクションが関与していないことを前提としています。これが、これをC ++としてタグ付けする理由です。 私が話していないですので、予めご了承ください効果的なC ++項目7「メモリ不足の条件のために準備して、」それは、関連だにもかかわらず、私はより多くのあなたが、通常は何をより詳細に制御を持っているゲーム開発に関連する答えを見たいのですが、ハプニング。 質問をまとめると、メモリコンソール/モバイルが限られているプラ​​ットフォームをターゲットにしている場合、サンドボックスゲームのメモリ不足状態にどのように対応しますか?



2
遅延シェーディングレンダラーのジオメトリパスの一般的なレンダリング最適化手法は何ですか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 6年前に閉鎖されました。 OpenGL 3とC ++(およびウィンドウ管理用のglfw)を使用してゲームエンジンを開発しています。私はこれまでに進めてきましたが、サウンドエンティティと最適化以外のほとんどのことは完了しています。エンジンは遅延シェーディングを使用しているため、遅延シェーディング自体は平均的なGPUにとって疲れるプロセスなので、レンダリングプロセスを可能な限り最適化したいと思います。 現在のシステムは、レンダラーと現在のワールドを含むシーンで構成され、ワー​​ルドはエンティティとライティングエンティティを別々に保持しstd::vectorsます。 そのため、基本的にSceneが呼び出されるたびに->render()、Rendererを呼び出し、ワールドをパラメーターとして渡し、ワールドからエンティティイテレーターを取得し、FBOにそれらを描画してから、2番目のパスのライティングエンティティを通過します。そして、これは十分ではないと思います。 現在のアルゴリズムは、エンティティが画面スペースにない場合でもすべてを繰り返し処理します。現在のレンダリングアルゴリズムを最適化して、可視オブジェクトに対してのみAPI関数を呼び出す方法を考えています。そのようなレンダラーを最適化する一般的な手法は何ですか?

4
球状の惑星とその領域を読み込む方法は?
私は、部分的に惑星探査で構成されるゲームを設計しています。疑似ランダム生成を使用して、すべての詳細を保存するのではなく、ロードする必要があるときに定義済みのシードから再生成します。これは重すぎます。そのため、プレイヤーが行ったランダムシードと変更をファイルに保存します。 プレイヤーは、軌道から惑星を見ることができる必要があります(非常に低いレベルの詳細で、その後地面に降り、着陸している地域の詳細レベルをゆっくりと上げ、反対側にあるものを降ろします)プレイヤーの視界の外に出る惑星の 平面の地面でそれをしなければならなかった場合、正方形のチャンクシステムで簡単にできます。しかし、ここでの問題は、惑星が-ほとんど-球体であるということです。 それでは、正確なポイントの周りに地面の詳細(レリーフおよび接地されたオブジェクト)をロードする最良の方法は何でしょうか? 私はすでに2つの解決策に取り組んでいますが、どちらにも弱点があります: 1.球体を正方形の塊に切断します。 プレーヤーが地面に十分に近づいたら、彼/彼女の位置から最も近い正方形の詳細を改善する必要があります。 十分でない場合でも、プレイヤーが地面にいるときや地面に本当に近づいているときに読み込むために、各正方形をサブ正方形にカットできます。 しかし、写真でわかるように、プレイヤーがポールに着地しようとすると問題があります:正方形は非常に細い長方形になり、最後の行では三角形になり、さらに多くの読み込みが必要になるという事実に加えて、世代が歪んで表示されます。 2.二十面体から始めます。 ここでは、プレイヤーが近づいているときに、プレイヤーの位置の周りの三角形のテッセレーションを増やすことができます。 しかし、私はプレイヤーの位置よりも近くに三角形を見つける方法を知りません。その場合、デカルト座標が役立つ可能性があると聞きましたが、使用方法はわかりません。 私はそのためにC ++ / OpenGLを使用しているので、ここで生成およびロードする主なものは、表面のレリーフと色/テクスチャを表す頂点です。

3
衝突検出は常にO(n ^ 2)ですか?
物理エンジンは、たとえば、互いに近くにあるオブジェクトをグループ化し、すべてのオブジェクトではなくこのグループ内の衝突をチェックすることにより、その複雑さを軽減できますか?(たとえば、他のオブジェクトからの速度と距離を調べることにより、遠いオブジェクトをグループから削除できます)。 そうでない場合、球体(3d)またはディスク(2d)の衝突は簡単になりますか?ダブルループを作成するか、代わりにペアの配列を作成する必要がありますか? 編集:弾丸やbox2dのような物理エンジンの場合、衝突検出はまだO(N ^ 2)ですか?

5
順序が重要であり、衝突がオブジェクトグループに基づいて条件付けられる衝突エンジンを最適化するにはどうすればよいですか?
この質問が初めての場合は、以下の更新前の部分を最初に読んでから、この部分を読むことをお勧めします。 ただし、問題の統合は次のとおりです。 基本的に、衝突の順序と衝突グループが重要なグリッド空間分割システムを備えた衝突検出および解決エンジンがあります。一度に1つのボディを移動し、衝突を検出してから衝突を解決する必要があります。すべてのボディを一度に移動し、可能な衝突ペアを生成すると、明らかに高速になりますが、衝突の順序が尊重されないため、解像度が壊れます。一度に1つのボディを動かすと、ボディに衝突をチェックさせなければならず、^ 2の問題になります。グループをミックスに入れると、多くのボディで非常に速く非常に遅くなる理由を想像できます。 更新:私はこれに本当に一生懸命取り組みましたが、何も最適化することができませんでした。 Willによって記述された「ペインティング」の実装に成功し、グループをビットセットに変更しましたが、非常に小さなスピードアップです。 また、大きな問題を発見しました。私のエンジンは衝突順序に依存しています。 私はユニークな衝突ペア生成の実装を試みました。これは間違いなくすべてを高速化しますが、衝突の順序を破りました。 説明させてください: 私の元の設計(ペアを生成しない)で、これが起こります: 単一の体が動く 移動した後、セルを更新し、衝突したボディを取得します それが解決する必要があるボディとオーバーラップする場合、衝突を解決する つまり、ボディが移動して壁(または他のボディ)にぶつかった場合、移動したボディのみが衝突を解決し、他のボディは影響を受けません。 これが私が望む行動です。 物理エンジンでは一般的ではないことを理解していますが、レトロスタイルのゲームでは多くの利点があります。 通常のグリッド設計(一意のペアを生成)では、これが起こります: すべての体が動く すべてのボディが移動した後、すべてのセルを更新します 一意の衝突ペアを生成する 各ペアについて、衝突の検出と解決を処理します この場合、同時移動により2つのボディがオーバーラップする可能性があり、それらは同時に解決します。これにより、ボディは事実上「互いに押し合い」、複数のボディとの衝突安定性が損なわれます。 この動作は物理エンジンでは一般的ですが、私の場合は受け入れられません。 また、別の問題も発見しました。これは重大です(実際の状況では起こりそうにない場合でも)。 グループA、B、Wのボディを検討する AはWとAに衝突して解決します BはWとBに対して衝突して解決します AはBに対して何もしません BはAに対して何もしません 多くのAボディとBボディが同じセルを占有する場合があります-その場合、ボディ間で不必要な反復が多く、相互に反応してはなりません(または衝突を検出するだけで解決しない) 。 同じセルを占める100体の場合、100 ^ 100回の反復です!これは、一意のペアが生成されていないために発生しますが、一意のペアを生成できません。そうしないと、望ましくない動作が発生します。 この種の衝突エンジンを最適化する方法はありますか? これらは尊重されなければならないガイドラインです: 衝突の順序は非常に重要です! ボディは一度に1つずつ移動し、次に衝突を1つずつ確認し、移動後に1つずつ解決する必要があります。 ボディには3つのグループビットセットが必要です グループ:ボディが属するグループ GroupsToCheck:ボディが衝突を検出する必要があるグループ GroupsNoResolve:ボディが衝突を解決してはならないグループ 衝突を検出するだけで解決しない場合があります 事前更新: はじめに:このボトルネックを最適化する必要はないことを認識しています-エンジンは既に非常に高速です。しかし、楽しくて教育的な目的で、エンジンをさらに高速にする方法を見つけたいと思っています。 柔軟性と速度に重点を置いて、汎用C ++ 2D衝突検出/応答エンジンを作成しています。 そのアーキテクチャの非常に基本的な図を次に示します。 基本的には、メインクラスWorld所有している、の(メモリ管理)ResolverBase*、SpatialBase*およびvector<Body*>。 …

2
2Dサイドスクローラー用の「最適な」ゲームループ
2Dサイドスクローラーのゲームループの「最適な」(パフォーマンスに関して)レイアウトを記述することは可能ですか?このコンテキストでは、「ゲームループ」はユーザー入力を受け取り、ゲームオブジェクトの状態を更新し、ゲームオブジェクトを描画します。 たとえば、深い継承階層を持つGameObject基本クラスを持つことは、メンテナンスに適しています...次のようなことができます: foreach(GameObject g in gameObjects) g.update(); しかし、このアプローチはパフォーマンスの問題を引き起こす可能性があると思います。 一方、すべてのゲームオブジェクトのデータと機能はグローバルになります。これはメンテナンスの頭痛の種ですが、最適に実行されるゲームループに近いかもしれません。 何かご意見は? 最適なゲームループ構造の実用的なアプリケーションに興味があります。優れたパフォーマンスと引き換えにメンテナンスの頭痛がします。

5
コンピュータゲームのサイズが大きく異なるのはなぜですか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 2年前に閉店。 ほぼ同じグラフィックス(バンプマップ、シェーダーなど)、サウンドの複雑さ、およびプレイスルー時間を(見たところ)持っているPCゲームがたくさんありますが、そのうちの1つは4 GBのスペースを必要とし、他の13 GBは必要です。 何故ですか?なぜサイズが大きく異なるのですか?
13 optimization  pc 

11
一般に、コードを最適化する頻度とタイミングはいつですか?
「通常の」ビジネスプログラミングの最適化手順は、本当に必要になるまでしばしば残されます。つまり、本当に必要になるまで最適化しないでください。 ドナルド・クヌースが言ったことを思い出してください。「私たちは小さな効率を忘れて、約97%の時間を言うべきです。早すぎる最適化はすべての悪の根源です」 努力を無駄にしないように最適化するときはいつですか。メソッドレベルにする必要がありますか?クラスレベル?モジュールレベル? また、最適化の測定値は何ですか?ダニ?フレームレート?合計時間?

1
グラフィックスハードウェアについて学ぶための優れたリソース[非公開]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 閉じた2年前。 グラフィックハードウェア(および関連する低レベルソフトウェア)の優れた学習リソースを探しています。基本的に、実装方法の観点からopengl / direcx APIレイヤーの下で何が起こっているのかをもっと知りたいと思います。 レンダリングパイプラインのさまざまな段階(表示、投影、クリッピング、ラスタライズなど)で原理的に何が起こるかについてはよく知っています。 私の目標は、次の種類の問題に関してグラフィックス/シェーダープログラミングを行う際に、トレードオフと潜在的な最適化について、より多くの情報に基づいた意思決定を行えるようにすることです。 バッチング カリングを表示 オクルージョン 描画順序 状態変化の回避 三角形対ポイントスプライト テクスチャサンプリング 等 基本的に、グラフィックプログラマがより効果的になるために最新のグラフィックハードウェアについて知る必要があるもの。 特定の最適化手法を本当に探しているのではなく、より効率的なコードを自然に書くために、より一般的な知識が必要です。

1
事前に計算された経路探索はまだ関連していますか?
環境 Old Lucas Arts(ScummVM時代)のポイントアンドクリックグラフィックアドベンチャーゲームは、事前に計算された経路探索を使用していました。テクニックの大まかな概要は次のとおりです。 ステップ1 各部屋の床は「ウォークボックス」と呼ばれるものに分割され、ナビゲーションメッシュのノードとほぼ同等でしたが、台形に限定されていました。例えば: ______ _____ _________ _____ \ A | B | C | D \ \_____| | |_______\ |_____| | |_________| ステップ2 オフラインアルゴリズム(ダイクストラやA *など)は、ノードの各ペア間の最短パスを計算し、使用される開始ノードと終了ノードによって各次元でインデックス付けされた2Dマトリックスにパスの最初のステップを格納します。たとえば、上記のウォークボックスを使用します。 ___ ___ ___ ___ | A | B | C | D | <- Start Node ___|___|___|___|___| | A | A | …

3
ボクセルキューブランドスケープ用のメッシュの最適化
Unity 3DでMinecraftish / LEGOワールドランドスケープ(キューブでプロシージャルに生成されたボクセルランドスケープ)を作成してみて、これらのランドスケープ用に作成されたメッシュが大量のメモリを消費することがわかりました。メッシュは現在、立方体の可視側面の頂点のみで構成されています。複雑な地形のメモリ使用量は、600〜700メガグラムかかる場合があります。 これらのメッシュは最適化できますが、これを行うための適切なアルゴリズムを見つけるのに苦労しています。 アルゴリズムは、異なる地形タイプのブロックを「マージ」したくないことを考慮に入れる必要があります。本当に簡単なスタートは、1つの軸に沿ってすべてのブロックを処理し、他の2つの軸に対して余分なスイープを行うことだと思います。 メッシュの形状を維持する必要があります。これは、空の空間または固体の空間が変更されるポイントへの頂点のマージではありません。その理由は、メッシュの周りをナビゲートする必要がある生き物などがあるかもしれないからです。そのため、非常に詳細度の低い、歪んだメッシュを作成することはできません。 これについての考え/提案/ヒントはありますか?

3
Flashゲームのレンダリングパフォーマンス
私はネイティブフラッシュレンダリングBitmapDataとカスタムフレームバッファーの構築についてSOを読んでいて、答えのいくつかは少し矛盾していたので、私は疑問に思いました: 一般に、カスタムビットマップバッファールートを使用するのがベストプラクティスですか、それともレンダリングをフラッシュエンジンに任せるのがベストですか? MovieClipスプライトではなくベクターアニメーション(s)を使用している場合、それによって上記の答えが変わりますか? もしそうなら、スプライトベースのアニメーションを使用することがベストプラクティスですか? (違いが出る場合は、Flash 10を対象としています)

4
ポイントが回転した長方形の内側にあるかどうかを効率的に確認するにはどうすればよいですか?
最適化のための部分、学習目的のための部分、私は敢えて質問します:C#またはC ++を使用して、2DポイントPが2D回転長方形の中にあるかどうかを最も効率的に確認するにはどうすればよいXYZWですか? 現在、私がやっていることは、本の「リアルタイム衝突検出」にある「ポイントイントライアングル」アルゴリズムを使用して、それを2回実行しています(長方形を構成する2つの三角形、たとえばXYZとXZW)。 bool PointInTriangle(Vector2 A, Vector2 B, Vector2 C, Vector2 P) { // Compute vectors Vector2 v0 = C - A; Vector2 v1 = B - A; Vector2 v2 = P - A; // Compute dot products float dot00 = Vector2.Dot(v0, v0); float dot01 = Vector2.Dot(v0, v1); float dot02 …

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