ゲーム開発

プロおよび独立系ゲーム開発者向けのQ&A

2
ゲームアップグレードのリリース:クロスプラットフォームリリースのタイミング
1年以上アップデートがない、古いモバイルタイトルのメジャーアップグレードを完了しました。新しいコンテンツがたくさんあり、見栄えが良いです。 悲しいことに、最近では、iTunes承認チューブを介してアップデートを入手するのに平均12日かかりますが、Google Playですぐに公開するのに2時間もかかりません。 今バージョンを上げれば、少なくともandroidで秋の休暇期間を迎えることができ、iOSの人々はバージョンが承認されるまで待たなければなりません。 しかし、私は他のスタジオから、両方のアップデートを待機して同時に起動し、いわゆる「シナジー効果」に達すると聞いています。 しかし...私はこれについて単に懐疑的です。この効果は本当に強いので、発売を数週間延期しますか?そして、少しの間ググって、この戦略を裏付けることができるどんな数字も見つけるのに苦労しています。 より直接的に言えば、すべてのプラットフォームが同期するまでアプリの起動を延期すること は本当に「価値がある」のでしょうか。 両方のプラットフォームでアップグレードの準備ができるまでPRの馬を控えますが、1つのプラットフォームでアプリの「時期尚早」の起動を行うのは本当に悪いのでしょうか。 誰かがこの戦略を単なる直感以上のもので裏付けることができるのであれば(数字とチャートは常に素晴らしいです)、私はすべての耳にします。これらのアップグレード戦略についての確かな知識が身に付くまで、アプリに対して何もしていません。 PS:アプリの初回起動時に同じ方法が使用されていることを知っています。この戦略の利点がどれほど強力であるかについてのデータがあれば、私もすべて耳にしています。

4
利点を失うことなくジオメトリ/メッシュをマージする
three.jsでは、ジオメトリをマージして、描画呼び出しの量を制限し、パフォーマンスを向上させることができます。1つのマテリアルを使用した簡単なテストで、GTX660 GPUに50.000のキューブ+ 60fpsのシャドウを描画できました。ジオメトリのマージがなければ、5,000の立方体がすでに問題を引き起こしています。 各キューブメッシュを独自にレンダリングする利点をどのように維持するのかと思います。たとえば、すべてが1つのジオメトリにマージされたときにキューブメッシュを選択するにはどうすればよいですか?もちろんそれはデフォルトでは不可能です。 この問題の一般的なテクニックはありますか?結局、マージした後でも、マージされていないメッシュオブジェクトはすべてあります。それで、それらをピッキングに利用するいくつかの方法があるに違いありませんか? 一言で言いたいこと 学習目的のゲームのようなSimCity 各家は立方体メッシュです 50.000家をレンダリングし、家を追加および削除できるようにしたい マウスカーソル(ピッキング)による家の選択が可能でなければならない
11 three.js 

2
3Dオブジェクトの変換を操作するための移動、スケール、回転ギズモを実装する方法は?
基本的な3Dエディタを開発中です。OpenGLを使用して3Dワールドをレンダリングします。現在、私のシーンはサイズの異なるいくつかのボックスであり、各ボックスを選択して移動/スケーリング/回転して必要な変換を実現できるようにしたい段階にあります。 これらのツールのギズモ(またはハンドル、または通常はどのように呼び出すか)のレンダリングを実装する問題と、マウスで変換の変更を実行するために各軸でそれらを選択する問題をどのように解決できますか?明確にするために: これまでの私の研究は、最もクリーンなアプローチはギズモの矢印ごとに軸に沿って境界ボックスを配置し、正方形ごとにもう1つ(単一の軸ではなく平面内でオブジェクトを移動するもの)に境界線ボックスを配置し、マウスから光線を投射することを提案しました配置し、衝突するものを確認します。しかし、これはまだ私には少し抽象的すぎます。このアルゴリズムがどうなるかについてのさらなるガイダンスに感謝します(疑似コードは十分すぎるほどです)
11 opengl  3d 

1
頂点シェーダーとフラグメントシェーダーの速度を個別にプロファイルするにはどうすればよいですか?
頂点またはフラグメントシェーダーがレンダリングパイプラインのボトルネックになっているかどうかを確認する方法を知りたいのですが。 OpenGLコマンド間のクロックチェックポイントを取得するためにターゲットを使用glQueryCounterすることについて読みましたGL_TIMESTAMPが、これらは異なるタイプのシェーダーを区別しません。 たとえば、GPUの1つのフレームのレンダリングに8ミリ秒かかった場合、頂点シェーダーに7ミリ秒かかり、フラグメントシェーダーに1ミリ秒かかったと言えますか?

2
別々のスレッドで更新してレンダリングする
シンプルな2Dゲームエンジンを作成しています。スプライトをさまざまなスレッドで更新してレンダリングし、その方法を学びたいと思います。 更新スレッドとレンダリングスレッドを同期する必要があります。現在、2つのアトミックフラグを使用しています。ワークフローは次のようになります。 Thread 1 -------------------------- Thread 2 Update obj ------------------------ wait for swap Create queue ---------------------- render the queue Wait for render ------------------- notify render done Swap render queues ---------------- notify swap done この設定では、レンダリングスレッドのFPSを更新スレッドのFPSに制限しています。さらにsleep()、レンダリングと更新の両方のスレッドのFPSを60に制限するために使用するので、2つの待機関数はそれほど待機しません。 問題は: 平均CPU使用率は約0.1%です。場合によっては、25%に達することがあります(クアッドコアPCの場合)。これは、待機関数がテストおよび設定関数を使用したwhileループであり、whileループがすべてのCPUリソースを使用するため、スレッドが他のスレッドを待機していることを意味します。 私の最初の質問は:2つのスレッドを同期する別の方法はありますか?私は気づいたstd::mutex::lock、それは、whileループではないので、リソースをロックするために待っている間、CPUを使用しないでください。どのように機能しますか?std::mutex1つのスレッドでロックし、別のスレッドでロック解除する必要があるため、使用できません。 他の質問です。プログラムは常に60 FPSで実行されるため、CPU使用率が25%に急上昇することがあるのはなぜですか。(2つのスレッドはどちらも60fpsに制限されているため、理想的には多くの同期は必要ありません)。 編集:すべての返信をありがとう。まず、レンダリングのためにフレームごとに新しいスレッドを開始しないようにしたいと思います。最初に、更新とレンダーループの両方を開始します。マルチスレッディングで時間を節約できると思います。FastAlg()とAlg()という関数があります。Alg()は私の更新objとrender objの両方であり、Fastalg()は私の「レンダーキューを「レンダラーに送信」」しています。シングルスレッドでは: Alg() //update FastAgl() Alg() //render 2つのスレッド: Alg() //update while …

1
テッセレーションとジオメトリシェーダー
私が間違っている場合は修正してください。ただし、ジオメトリシェーダージョブとテッセレーションシェーダージョブはどちらも、グラフィックパイプラインで頂点を生成するためのものです。私が知りたいのは、それらがどのように違うのか、そしてどちらをいつ使うべきかということです。

3
画面の一部のみを詳細にレンダリングする
グラフィックスが大きな視野角でレンダリングされる場合(非常に大きなテレビやVRヘッドセットなど)、ビューアは実際には画像全体に焦点を合わせることができず、その一部だけに焦点を合わせることができません。(実際、これは通常サイズの画面にも当てはまります。) 視聴者の目を追跡する方法(ほとんどの場合VRで実行可能です)と組み合わせると、理論的にこれを活用して、グラフィックスを視聴者の焦点から遠ざけ、徐々に細部と解像度を下げて、知覚される品質を失うことなくパフォーマンスを得ることができます。 これを利用できる、または現在開発中のテクニックはありますか?

4
プレーヤーをスムーズに階段に登らせる
私は2Dプラットフォームのゲームを持っています。プレイヤーは常に右側に走りますが、地形は常に水平ではありません。例: プレイヤーボックスと他のブロックとの交差をチェックするだけで境界ボックス衝突システムを実装しました。大きなブロックに遭遇した場合にプレイヤーが実行されないようにして、ジャンプする必要がありますが、階段を置くときは、水平な地面と同じようにスムーズに走ります。衝突システムでは、階段を飛び越えて通過する必要があります。 階段の端の間に線を引いて、その線にプレイヤーの動きを課すことを考えました…どう思いますか?もっと賢いことはありますか?

3
UnityではJavaでコーディングできますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、ゲーム開発スタック交換のトピックになるようにします。 2年前に閉店。 Unity3Dの使用経験はかなり浅いですが、JavaとAndroidの開発については非常によく理解しています。Androidアプリケーションを開発するためにJavaがまったく必要な場合、私は本当に混乱していますか?Unityのドキュメントのどこかで、Unityのオブジェクトに動作を追加するにはスクリプトを使用する必要があり、そのUnityはC#、.Net、およびBooスクリプトのみをサポートすることを読みました。Javaをまったく使用しませんか?

2
Axis Aligned Spatial Division:スペースをランダムな長方形に分割しますか?
3Dスペースをランダムな軸で整列したボックスの形状に分割する方法が必要です。とりあえず、テストのために2Dスペースを分割しています。私が思いついた最も直接的なアプローチは、サイズ(1、1)の長方形を定義し、既存のすべての長方形をX軸とY軸が交互に並ぶ2つの不均一な長方形に再帰的に分割することでした。 ここでの問題は明白です。このアプローチでは、長いストレッチ線(赤でマーク)が発生します。 私が望むのは、もっと有機的な見た目です(私は例を含めました) 見てください、上から下へ、または左から右への長い直線はありません。 唯一の制約は、サイズの粒度に影響を与えずに、長方形の最小サイズを制限したい場合があることです。つまり、最小の四角形が秒より1平方センチメートル小さい場合、最小の部屋は2平方単位であってはなりません。 したがって、理想的には、アルゴリズムは次の3つの制約すべてを満たす必要があります。 長方形は無限に小さくはありません。 四角形のサイズは、最小の四角形のサイズの離散的な乗算ではありません。つまり、最小の長方形が3平方単位である場合、大きい長方形は6、9、12などの正方形単位に制限されず、代わりに3.2または4.7になります。 アルゴリズムは多項式時間で実行されます(高速で計算する必要があります)。

2
音楽にはどのような技術仕様を設定する必要がありますか?
私はビデオゲームの音楽を書いています。ある時点で、プログラマーと協力して、渡すオーディオファイルの技術仕様を決定する必要があります。どのような詳細について話す必要がありますか? たとえば、解決する必要があると思われるいくつかの質問は次のとおりです。 オーディオファイルはどの形式にする必要がありますか? 非圧縮?無損失の?圧縮? 高品質のオーディオと小さなファイルサイズのバランスはどのくらいですか? 音楽の音量はどうですか? 各トラックの平均音量レベルはどうあるべきですか? 最も大きな音量レベルは何ですか? 度数分布はどうあるべきですか? たとえば、低音の少ないフォーリーが簡単に聞こえるように、低音の少ない音楽を書くようにすべきでしょうか? 重要だと思った質問はありますか?議論すべき他の質問はありますか?
11 music 

3
JavaゲームにSteamworks機能を実装することは可能ですか?どうやって?
基本的なゲームで、最終的にはより良いものに変えたいと思っています。現在のところ、ゲームはすべてJavaですが、Steamworks SDKをゲームに実装したいので(実績やワークショップなどを含めることができます)。ただし、SteamworksにはC ++が必要です。C ++で書き直すことなく、完全なJavaゲームにSteamworks SDKを実装させることは可能ですか?私は現在、ゲームにjMonkey Engine 3を使用しています。
11 java  steam 

5
2D衝突検出
このキャラクターを使っているとしましょう。 (ソース:iconbug.com) どのように衝突検出を実装しますか?鳥の形が正方形の近くにないため、境界ボックスの使用は適切な近似ではないようです。 画像の一部を表すオブジェクト内に、一種の四分木データ構造があると考えていました。各葉はfalse(鳥の外側の白/透明な空間を覆う場合)またはtrue(鳥の領域、つまりくちばし、目などを表す場合)のいずれかになります。次に、鳥との衝突について、シーン内の唯一の障害物をテストします。 しかし、私のアプローチにおける私の問題は次のとおりです。 クワッドツリーを初期化する方法がわかりません。 クワッドツリーが初期化された後、障害物が画像の座標内にあると、クワッドツリーをトラバースして使用する方法がわかりません。 角張っていないキャラクターとの衝突検出をどのように行いますか? LE:私が見たもう1つのアプローチは、複数の境界ボックスを使用することでした。たとえば、くちばし用に1つまたはいくつかのバウンディングボックスを用意し、次に髪や尾用にいくつかのバウンディングボックスを用意します。しかし、それは退屈になる可能性があります。これが私の場合有効なアプローチである場合、それらの境界ボックスをどのように生成しますか?私のプログラムでそれらをハードコードする必要があるとは思いません。 LE2:かなり正確な衝突を気にします。単一のバウンディングボックスまたは円が少なくともその形状を適切に近似する方法を想像できないため、このアプローチは機能しません。

2
2Dタイルベースの横スクロールテレインをランダムに生成するにはどうすればよいですか?
次のタイルセットを使用して、2Dサイドスクローラーゲームのマップをランダムに生成したいと思います。 たとえば、ビットマスキングプロセスに関するいくつかの優れた記事を見つけました:http ://www.angryfishstudios.com/2011/04/adventures-in-bitmasking/ http://www.saltgames.com/2010/a-bitwise -適用するタイルマップの方法/ 巨大なif句やswitchステートメントを実行する代わりに、ビットマスク/タイルマスクを使用するアイデアが好きです。 ただし、プロセス全体の視覚化に問題があり、これらの記事のいずれもランダム化について述べていません。 私のタイルは、リンクした例のタイルのように、1つの方法だけでなく、複数の異なる方法で組み合わされます。 たとえば、以下はほんの数例です。 私のタイルはさまざまな方法で組み合わされているため、8ビットマスクは機能しないと思います。そのため、より大きなビットマスクを使用することを考えていました。char [8]やchar 4のようなもの。 誰かが、一般的なアルゴリズムがどのように見えるかの疑似コード/例を見せていただければ、私はそれを大いに感謝します。

3
3Dレンダリングでのインデックスの目的は何ですか?
OpenGLで3Dキューブを作成するとします。オブジェクト(キューブ)に必要な頂点データを実装します。インデックスを使用する意味は何ですか? void CreateCube() { const Vertex VERTICES[8] = { { { -.5f, -.5f, .5f, 1 }, { 0, 0, 1, 1 } }, { { -.5f, .5f, .5f, 1 }, { 1, 0, 0, 1 } }, { { .5f, .5f, .5f, 1 }, { 0, 1, 0, 1 } …
11 opengl 

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