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

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

2
参照のGPU局所性は心配する価値がありますか?
い、参照の局所性、それはCPUのパフォーマンスをするようmakeがGPUのパフォーマンスに大きな違いとして? たとえば、GPUに200の描画コマンドを送信した場合、各コマンドのデータがメモリ内で連続していると、バッファ/テクスチャマップをジャンプするのではなく、(潜在的に)顕著な違いが見られますか? 副題:ほとんどのリソースを不変にすることで、GPUが誤った共有の問題を防ぐことができると思います。しかし、そうでない場合、スレッドが常に4つのフラグメントに相当する作業を行うのはなぜですか。

2
2D City Builderで高価な関数のパフォーマンスを向上させる方法
すでに回答を検索しましたが、高価な関数や計算を処理するための最良のアプローチを見つけることができませんでした。 私の現在のゲーム(2dタイルベースの都市の建物)では、ユーザーは建物を配置したり、道路を構築したりできます。すべての建物は、ユーザーがマップの境界に配置する必要があるジャンクションへの接続を必要とします。建物がこのジャンクションに接続されていない場合、「道路に接続されていません」の標識が影響を受ける建物の上にポップアップ表示されます(それ以外の場合は、削除する必要があります)。ほとんどの建物には半径があり、互いに関連している可能性があります(たとえば、消防署は半径30タイル以内のすべての家を助けることができます)。これは、道路の接続が変更されたときにも更新/確認する必要があることです。 昨日、パフォーマンスの大きな問題に遭遇しました。次のシナリオを見てみましょう。ユーザーはもちろん、建物や道路を消去することもできます。したがって、ユーザーがジャンクションの直後に接続を切断した場合、同時に多くの建物を更新する必要があります。最初のアドバイスの1つはネストされたループを避けることです(これは間違いなくこのシナリオの大きな理由です)が、私は確認する必要があります... 道路タイルが削除された場合に建物がまだジャンクションに接続されている場合(私はその道路によって影響を受けた建物に対してのみそれを行います)。(このシナリオでは小さな問題である可能性があります) 半径タイルのリストと、半径内の建物を取得します(ネストされたループ-大きな問題!) 。 // Go through all buildings affected by erasing this road tile. foreach(var affectedBuilding in affectedBuildings) { // Get buildings within radius. foreach(var radiusTile in affectedBuilding.RadiusTiles) { // Get all buildings on Map within this radius (which is technially another foreach). var buildingsInRadius = TileMap.Buildings.Where(b …

2
ボクセルフェースクロール(メッシュの単純化、場合によっては貪欲を使用)
編集:これは私自身の学習経験のためだけのものであり、私がこの質問をするのはパフォーマンス上の理由のためではありません。 これはMinecraftのような地形エンジンに関するものです。ブロックをチャンク(16x256x16ブロック)に格納します。チャンクを生成するときは、複数の手順テクニックを使用して、地形を設定し、オブジェクトを配置します。生成中は、チャンク全体(ソリッドまたは非ソリッド)に1つの1D配列と、ソリッドブロックの個別の1D配列を保持します。 生成後、隣接するソリッドブロックを繰り返し処理して、隣接するソリッドがないブロック面のみを生成します。生成する顔を独自のリストに保存します(これは、可能な顔/法線ごとに1つずつ、6つのリストです)。チャンクをレンダリングするとき、カメラの現在のチャンクのすべてのリストと、他のすべてのチャンクのカメラに面するリストのみをレンダリングします。これを行うには、6つのリストすべてを1つのバッファーに格納し、描画する範囲を変更します。 Andrew Russellが提案したこの小さなシェーダートリックで2Dアトラスを使用して、類似した面を完全にマージしたいと思います。つまり、それらが同じリストにある場合(同じ法線)、互いに隣接している場合、同じライトレベルである場合などです。最終的には四角形になることはわかっていますが、頂点の数を簡単に50%削減できるはずです私の見積もりが正しい場合はそれ以上。 私の仮定は、6つのリストのそれぞれを、それらが置かれている軸、次に他の2つの軸でソートすることです(ブロックの上部のリストは、Y値、X、Zの順にソートされます)。 これだけでも、非常に簡単に顔のストリップをマージできますが、可能な場合は、ストリップだけではなく、マージすることを目指しています。私はこの貪欲なメッシュアルゴリズムについて読みましたが、それを理解するのに多くの問題を抱えています。 だから、私の質問:説明されているように顔のマージを実行するには(動的なテレイン/ライティングの悪いアイデアであるかどうかを無視して)、実装が簡単なアルゴリズムがあるのでしょうか?また、私は貪欲なアルゴリズムをはるかに簡単な方法(リンクまたは説明)で案内する答えを喜んで受け入れます。 実装が簡単な場合や、ストリップを実行するよりも少しだけ優れている場合でも、パフォーマンスが少し低下してもかまいません。ほとんどのアルゴリズムは四角形ではなく三角形に焦点を当てているのではないかと心配しています。現在の方法で2Dアトラスを使用すると、現在のスキルに基づいて三角形を実装できるかどうかわかりません。 PS:私はすでにチャンクごとに錐台カリングを行っており、説明したように、ソリッドブロック間のフェースもカリングします。私はまだ閉塞淘汰をしていないし、決してしないかもしれない。 *編集:私は独自の小さなテクニックを実装しましたが、おそらく名前が付いていますが、6つのリストをたどります。これらのリストは、それらが置かれている軸、ブロックタイプ、照明レベルの順に並べ替えられています。私はそれらを反復処理し、移動しながら新しい長方形を作成し、同時に(特定の軸に向かって大きなバイアスをかけて)それらを成長させます。明らかに最適ではありませんが、実際には非常に高速であり、頂点数を平均で50%近く削減します。Byte56のコメントは、私が本当の答えを考えているクローゼットですが、答え/報奨金としてそれを選択することはできません。 これは、最適化をほとんど行わずに完全な初期地形を生成した後、この問題を処理する私の速くて単純な方法です。与えられたすべての正方形が同じ画像、光レベル、法線などであると仮定します。各色は、私がレンダリングする異なる四角形です。私のリストはそれらがそうであるようにソートされているので、これは非常に簡単/高速なアプローチです。

1
Unity3Dでライトを遮る方法は?
まず、私はUnity Proを所有しています。 パフォーマンスを改善するために、ライトがしばらく表示されていないときにライトを遮ることを検討してきました。私が遭遇した主なメソッドは、BecameVisible()を使用してカメラ錐台をテストすることでした。 私の主な問題は、プレーヤーがライトで照らされるエリアを表示している場合でも、ライトをオンにしたいということでした。 現在、照明領域がカメラの錐台にあるかどうかを確認する方法を使用していますが、問題は、プレーヤーが実際には見えない(例:それらとプレーヤーの間の壁)照明が錐台にあることです。私はそれらにレイキャスティングを試みましたが、実際の照明領域の詳細を十分に得ることはできません(レンダラー。バウンド.extentとrenderer.bounds.centerを使用して、ライトからの最大照明点を計算するのが最善でした)。 Unity Proでライトを遮る簡単な方法を知っている人はいますか?または、私が話していたカメラの支点方式を使用する良い方法を教えていただけませんか?

2
タイルマップを効率的に保存してWebに表示する方法
約 これらは実際には1つの2つの質問です。まず、大量のタイルデータを効率的に格納する方法を探しています。もう1つの側面は、データセットのクエリとタイルの表示を扱います。まず、背景を説明しましょう。 私たちは、CraftyJSライブラリを使用してCanvasにレンダリングするブラウザーベースのマルチプレイヤータイクーンゲームを作成しています。GUIのバックグラウンドでは、PHPでYii Frameworkを実行しており、すべてがPythonランダムマップジェネレーターとゲームエンジンに接続しています。 これが最初のラフマップレンダーの外観です。http://i.imgur.com/khAXtl.png 地図データの保存 ゲームの世界は、ゲームが開始するたびにランダムに生成されます。サイズは、各プレーヤーの100x100六角形タイルです。つまり、3人用のゲームでは、90.000のタイルが作成されます。現在は、マップをレンダリングするためのJavaScript配列を作成しています。 これはレンダリングには問題なく機能しますが、マップを操作する場合は、タイルを所有するプレーヤー、その上に構築する構造の種類、現在の価格などを保存する必要があります。最初は、少なくともプロトタイプについては、MySQLを使用したかったのですが、いくつかのテストの後、それは私が望むほど正確ではありません。たぶん、MongoDBのようなオブジェクトストアは、SQLテーブルではなくタイルデータを格納するのに適しています。それとも何か他に? 地図を表示する 私が目にするもう1つの問題は、マップ内を移動することです。現在、ビューポートにない場合でも、タイルごとにCraftyエンティティを作成しています。Craftyはビューポート内のタイルのみをレンダリングしますが、保存し、各レンダリングイベントですべてのタイルを反復処理する可能性があるため、これは低速です。私が現在持っているのは、移動が非常に遅く、動きが途切れる、描画された生成されたマップです。これを再生可能にしたいと思います。 私の最初のアイデアは、ビューポートにあるタイルの表示されたサブセットをロードすることでした。しかし、プレーヤーがビューポートを空白の領域に移動する場合、サーバーにクエリを送信して応答が返されるのを待つ必要があります。そうしないと、マップをレンダリングできません。これはネイティブアプリケーションでは問題ありませんが、Webゲームでは遅延します。 マップからスムーズなパフォーマンスを得る方法は、タイルのより大きなサブセットをJavaScript配列にプリロードし、それをキャッシュとして使用することです。プレーヤーにはいくつかの画面が「キャッシュ」されており、ビューポートを移動すると、JSの「キャッシュ」により多くのタイルがロードされます。 私は正しい方向に向かっていますか?同様のことをした人からもっと情報をもらいたいです。私はゲーム開発に不慣れですが、ここ数週間にわたって多くの情報源を経験してきました。

3
どのくらいの頻度で永続的なオンラインゲームでプレーヤーの状態を保存しますか?
オンラインゲームでは、ユーザーはいつでもログオンとログオフを好みます。通常、ゲームの実績はサーバーにシームレスに保存されます。それを達成することはそれほど難しいことではありませんが、理にかなった効率的な方法で、どのようにして規模を拡大できるのでしょうか。 プレイヤーの座標と状態を送信するたびに保存することは理にかなっていますか?私のnode.jsサーバーは応答をブロックせずにそれを簡単に行うことができます。Mongoデータベースを使用したいのですが、1秒に1回、サーバー全体のイベントで一度にすべてを収集する方が適切でしょうか。

3
イベントシステムを設定するより良い方法はありますか?
イベントシステムは驚くべきものであり、非常に扱いにくいコードを飼いならし、オブジェクトとゲームループの簡単な通信を通じてゲームの動的な作成を可能にします。現在の実装の効率に苦労しています。現在、オブジェクトのリストをそれらが応答するイベントに分離するという私のわずかな最適化は不思議に思っていますが、私ができることがもっとあるはずです。 現在、私は2つの方法があります: 最も単純:イベントが送信されると、すべてのオブジェクトがベクターに追加されます。すべてのオブジェクトには、handle_event()メソッドを介してイベントが送信されます。 より複雑:キーが文字列、値が整数のマップがあります。イベントタイプが追加されると、それはこのマップに追加され、intは単純にインクリメントされます(より良い方法が必要 です)。次に、オブジェクトのベクトルのベクトルが新しいベクトルを押し戻し、そのタイプのイベントを処理します。 イベントが呼び出されると、eventTypesマップの対応するintをオブジェクトのベクターのベクター内の型に呼び出し、そのイベントタイプを処理する各オブジェクトにそのイベントを送信します。 これらの最初の方法は、多くのオブジェクトに対して(明らかに)非常に低速ですが、非常に少数のオブジェクトに対しては非常に高速です。2番目の方法は、異なるタイプのイベントを処理したい大きなオブジェクトでは非常に高速ですが、同じタイプのイベントを処理するオブジェクトを使用するオブジェクトごとの最初の方法よりも低速です。 より速い(実行時間に関して)方法はありますか?文字列型からintを検索するより速い方法はありますか?(最初は列挙型がありましたが、必要なレベルのダイナミズムのために必要なカスタム型は許可されていませんでした。)

4
バッチ処理のパフォーマンスを向上させる方法
私はモバイルプラットフォーム用のスプライトベースの2Dゲームを開発しており、OpenGL(まあ、実際にはIrrlicht)を使用してグラフィックスをレンダリングしています。まず、シンプルな方法でスプライトレンダリングを実装しました。すべてのゲームオブジェクトは、独自のGPU描画呼び出しを持つクワッドとして描画されます。つまり、200のゲームオブジェクトがある場合、フレームごとに200描画呼び出しを行いました。もちろん、これは悪い選択であり、すべてのGPU描画呼び出しに関連付けられたCPUオーバーヘッドが少しあるため、私のゲームは完全にCPUバウンドでした。ほとんどの場合、GPUはアイドル状態のままでした。 今、私はオブジェクトを大きなバッチに収集し、これらのバッチを少数の描画呼び出しのみでレンダリングすることで、パフォーマンスを改善できると思いました。バッチ処理を実装し(同じテクスチャを共有するすべてのゲームオブジェクトが同じバッチでレンダリングされるように)、問題がなくなったと考えました...フレームレートが以前よりもさらに低いことを確認するだけです。 どうして?ええと、私には200(またはそれ以上)のゲームオブジェクトがあり、それらは1秒あたり60回更新されます。CPU内の頂点の新しい位置(変換と回転)を再計算する必要があるすべてのフレーム(モバイルプラットフォームのGPUはインスタンス化をサポートしていないため、そこで実行することはできません)。この計算は1秒あたり48000(200 * 60 * 4以降)すべてのスプライトには4つの頂点があります)、単に遅すぎるようです。 パフォーマンスを改善するために私ができることは何ですか?すべてのゲームオブジェクトが(ほぼ)すべてのフレームで移動/回転しているため、頂点の位置を再計算する必要があります。私が考えることができる最適化は、ローテーションのルックアップテーブルだけなので、計算する必要はありません。ポイントスプライトは役に立ちますか?厄介なハックはありますか?他に何か? ありがとう。

4
CPUとGPUの幾何学的変換
私は、多くの3Dプログラムが通常、ベクトル/行列の計算やCPUでの幾何学的変換を行うことに気づきました。これらの計算をGPUの頂点シェーダーに移動することで利点を見つけた人はいますか?

2
GameObjectsを静的としてマークする必要があるのはいつですか?
これは、対応するUnityのドキュメントです。 静的ゲームオブジェクトに関するUnityドキュメンテーションページの説明によると、ゲームオブジェクトを静的としてマークすると、パフォーマンスに悪影響を与えることがあります(たとえば、静的バッチ処理によりメモリ使用量が増加します)。 では、これらの機能を正確に使用したいのはいつですか? 前もって感謝します。 脚注: 私は現在、スプライトとLineRendererがたくさんある2Dトップダウンゲームを開発していますが、3Dオブジェクト(クワッドさえも)はありません。すべてのゲームオブジェクトは、既製のプレハブから手続き的にインスタンス化されています。LineRenderersは、フレームごとにスクリプトから更新されます。そして、ほぼすべてのスプライトは常に動いています。スプライトの大部分は同じマテリアルを共有しています。すべてのLineRendererも同じ素材を共有しています。

2
SQLデータベースを使用してデスクトップゲームにデータを格納する必要がありますか?[閉まっている]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ゲーム開発スタック交換のトピックになるようにします。 2年前休業。 ゲームエンジンの開発 コンピュータゲームとそのエンジンを計画しています。一人称視点の3次元の世界があり、現時点ではシングルプレーヤーになります。プログラミング言語はC ++で、OpenGLを使用しています。 データ中心の設計決定 私の設計上の決定は、グローバルイベントマネージャーとグローバルデータマネージャーがあるデータ中心型アーキテクチャを使用することです。物理、入力、サウンド、レンダラー、aiなどの多くのコンポーネントがあります。各コンポーネントは、イベントをトリガーしてリッスンできます。さらに、各コンポーネントはデータの読み取り、編集、作成、削除を行うことができます。 問題はデータマネージャーについてです。 リレーショナルデータベースを使用するかどうか SQLiteやMySQLなどのSQLデータベースを使用してゲームデータを保存する必要がありますか?これには、アイテム、キャラクター、インベントリなどの実質的にすべてのゲームコンテンツが含まれます。さらにパフォーマンスに関連するメッシュとテクスチャを除いて、メモリに保持します。 SQLデータベースは、動くキャラクターの位置などのゲーム情報をリアルタイムで読み書きするのに十分な速度ですか?また、プラットフォーム間の互換性にも注意する必要があります。すべてをメモリに保持する以外に、どのような代替手段がありますか? 利点は MySQLのようなリレーショナルデータベースを使用する利点は、高速な計算を可能にするデータ指向の構造です。エンティティを表すためのオブジェクトは必要ありません。レンダリングに必要なプレーヤーの近くのオブジェクトのデータを簡単にクエリできました。そして、遠くにあるオブジェクトのデータを気にする必要はありません。さらに、ホールゲームの状態はデータベースに保存されるため、savegamesは必要ありません。最後に重要なことですが、ホールゲームの状態が格納されている場所が既にあるため、ゲームをオンラインゲームに拡張することは比較的簡単です。

3
XNAのシーンマネージャーに適したデータ構造ソリューションは何ですか?
私は自分のゲームプロジェクトでXNAで遊んでいます。以前にOpenGLに触れ、Ogreで少し作業していたので、同じ概念をXNAで機能させようとしています。 具体的には、階層変換、錐台(場合によってはオクルージョン)カリング、および透明度オブジェクトのソートを処理するシーンマネージャーをXNAに追加しようとしています。 私の計画は、階層変換とライティングを処理するツリーシーンマネージャを構築し、錐台のカリングとオブジェクトの並べ替えにOctreeを使用することでした。問題は、透明度を正しくサポートするためにジオメトリの並べ替えを行う方法です。ポリゴンごとに並べ替えると非常にコストがかかるため、Ogreで管理することさえできないほど高価です。しかし、Ogreからの静止画像は正しく見えます。 それを行う方法、および使用するデータ構造とその機能に関するアイデアはありますか?私は周りの人々が使っていることを知っています: オクトリーズ Kdツリー(GameDevフォーラムの誰かが、これらはOctreesよりもはるかに優れていると言っています) BSP(ポリゴンごとの順序を処理する必要がありますが、非常に高価です) BVH(錐台およびオクルージョンカリングのみ) ありがとうございました トゥヌズ


2
Unity3dを介して新しいc#スクリプトを追加するときにVS soution Explorerを強制的に再読み込みしますか?
私はC#スクリプトを作成する(ときCreate -> C# Script)を介しUnity3d やからそれを削除Unity3d- Visual Studioショー私の警告ウィンドウ。 気に障る。 ウィンドウなしでソリューションエクスプローラーで「ReloadAll」を強制する方法はありますか?
8 unity  visual-studio  unity  google-play-services  google-play  physics  simulations  c#  unity  raycasting  unity  virtual-reality  savegame  arcade  c++  steam  ios  objective-c  databases  storage  opengl  vbo  vao  libgdx  scene2d  unity  animation  c#  path-finding  roguelikes  opengl  c++  glsl  2d  physics  phaser  selection  3dsmax  unity  collision-detection  c#  tilemap  isometric  unity  c#  2d  sprites  mouse  scripting  grid  c#  unity  libgdx  java  unity  playstation4  c#  c++  directx  dll  c++cli  libgdx  overlap2d  multiplayer  node.js  websocket  animation  unity  textures  unity  terrain  physics  unity  rotation  movement  transformation  monogame  windows  installer  shaders  unity  virtual-reality  unity  performance  frame-rate  profiler  google-play  appstore  trademark  java  android  libgdx  unity  unity-networking  unity  physics  software-engineering  unity  savegame  physics  2d  unity  unity  c#  unity-networking  textures  geometry  unreal-4  3d-modeling  java  android  libgdx  android  collision-detection  libgdx  rotation  legal  localization  patents  opengl  cubemap  sampler-state  2d  transformation  unity  c#  opengl  glsl  lighting  opentk  c++  collision-detection  physics 

1
GL ES:フラグメントシェーダーの最適化
概要: スプライトに色を付けようとするとすぐにFPSの速度が低下します(つまり、テクスチャをフラグメントシェーダーで色と乗算します)。 詳細: ハードウェア:iPod touch 4 glDrawArraysを使用して画面に700のスプライトを描画しています。そして、はい、これらすべてを1回の描画呼び出しでバッチ処理しています。以下は、頂点データ構造を示しています。 struct Vertex { float Position[2]; float Color[4]; float Texture[2]; }; はい、いくつかのスプライトを選択的に着色する必要があるので、他のスプライトを選択的に着色する必要がないため、各頂点で色を送信しています。以下は私が使用しているフラグメントシェーダーです: varying lowp vec2 TexCoord; uniform sampler2D TextureSampler; void main(void) { gl_FragColor = texture2D( TextureSampler, TexCoord ); } 今までそれは素晴らしい仕事をしていて、私に完全な60 FPSを与えています!!! だが フラグメントシェーダーを次のように変更するとすぐに(着色を可能にするため): varying lowp vec4 DestinationColor; varying lowp vec2 TexCoord; uniform sampler2D TextureSampler; …

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