ゲーム開発

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

4
地図のような地球サイズのマインクラフトをレンダリングするには、どのようなハードウェアが必要ですか?
私はこの問題について考えてきました。現在のテクノロジーで、ボクセルベースのゲームで地球の1:1のレプリカを作成することは可能ですか?この巨大な地図を保存するのに最適なデータ構造は何ですか?このデータ構造をリアルタイムでレンダリングするには、どのアルゴリズムを使用する必要がありますか? これらの質問はこれらの仮定をします: 各ボクセルの解像度は1立方メートルです。 簡単にするために、各ボクセルに必要なメタデータ情報は1バイトだけです。この情報は、ボクセルの「タイプ」(地球、水、岩など)の識別情報を格納するために使用されます。 地球の体積は1 * 10ˆ21立方メートルです。 「現在のテクノロジー」には、市販されているものはすべて含まれますが、スーパーコンピューターは含まれません。 地図の生成には、地球の地形と水深のみが使用されます。人間の建物、植物、洞窟は除きます。地下ブロックは、地質学的研究に基づいて選択されます。たとえば、深度が3000 kmを超える場合は、「マグマ」ボクセルをレンダリングします。 Minecraftと同様に、マップは静的ではなく、ゲーム内で変更できます。 「無限」の描画距離は大きなプラスです。もしあなたが飛んで地球全体を見ることができないならば、地図に地球全体を持っていることの意味は何ですか? この問題について考えたときに私が最初に結論付けたのは、各ボクセルがメモリの1バイトしか占有しないと仮定すると、マップを格納するのに1ゼタバイトが必要になると仮定すると、地球データを線形に格納することは不可能であるということです。したがって、何らかの圧縮が必要です。 ボクセル八分木はマップを圧縮できると思いますが、どれほどかはわかりません。このボクセルマップのエントロピーはおそらく非常に低いため、非常に高いレベルの圧縮を実現できると思います。 免責事項 これは理論的な質問です。ボクセル地球を書くつもりはありません 編集 ESA GOCEはすでに1cm-2cmの精度で地球ジオイドをマッピングしています。この情報を使用して、地球の非常に正確な高さマップを生成できると思います。これにより、地球の地形のギャップを埋めるためにアルゴリズムを使用する必要がなくなります。

1
gl_TexCoord [0]のコンポーネントはどういう意味ですか?
違いは何ですかgl_TexCoord[0].s, gl_TexCoord[0].t gl_TexCoord[0].pとはgl_TexCoord[0].x, gl_TexCoord[0].y gl_TexCoord[0].z? gl_TexCoord[0].x, gl_TexCoord[0].y gl_TexCoord[0].zピクセル座標であると理解していますか? しかし、どういうgl_TexCoord[0].s, gl_TexCoord[0].t gl_TexCoord[0].p意味で、どこで使用する必要がありますか?

2
手足を切り取ってレンダリングするキャラクター(Java / OpenGLのブレンダーモデル)
取り外し可能な四肢を持つことができるようにしたい場合、キャラクターアニメーションとレンダリングクラスを作成する際にどのような点を考慮する必要がありますか?私は神経系に至るまですべてを定義できる詳細な身体システムを開発しました。ドワーフフォートレスに見られるダメージの詳細レベルに似たものを目指しています。たとえば、キャラクターが上腕を損傷すると、腕全体を無効にする神経損傷の可能性があります。または、腕を完全に失う可能性があります。 このデータ部分を処理するためにシステムを作成しました。各キャラクターには、付属物と内部パーツを持つトランクがあります。各付属肢は、子付属肢と内部パーツを持つこともできます。親の付属肢が無効化/削除されている場合、子の付属肢は無効化/削除されます。無効化/削除された付属物または内部部品のいずれかが一生必要な場合、キャラクターはすぐに死亡します。 私が現在取り組んでいるのは、この描画/アニメーション部分です。アニメーションを定義して、現在の身体の状態(腕や脚がないなど)を考慮して、許可されているアニメーションを知るにはどうすればよいですか?足りない手足を描画しないように描画システムを設定するにはどうすればよいですか?各四肢/付属物は独自のモデルである必要がありますか(切断された付属物を地面に描きたい)。 移行元のシンプルなシステム(テスト用に作成したもの)は、アニメーションのすべてのキーフレームを完全なモデルとしてVBOにインポートします(キーフレームが開始/停止する場所の頂点カウントとともに)。Blenderで定義されたボーンをインポートしたり利用したりせず、フレーム間を補間しません。 これはかなり大きな質問である可能性が高いため、目的の場所にたどり着くためのリソースも探しています。 編集 必要な手足がない場合に代替アニメーションを実行するように設定したいので、アニメーションしている手足を知っているアニメーションについて質問します。それを考えた上で、アニメーションを起動する前にそのチェックを行い、その時に適切なアニメーションを起動することを想像します。

4
射撃前の軌道周りのミサイル軌道の計算
Unity3Dでゲームを構築しています。それは重力戦争のクローンです。プレイヤーとAIの両方のタレットは、ミサイルを互いに撃ち(角度とパワー変数を与える)、惑星のミサイルを衝突させないようにします。しかし、これが私の質問です:AIにミサイルを発射する前に、惑星の重力も考慮して、パワーと角度をどのように計算させるのですか?

2
連続物理エンジンの衝突検出技術
私は純粋に連続的な物理エンジンに取り組んでおり、幅広い位相衝突検出のためのアルゴリズムを選択する必要があります。「完全な連続」とは、交差テストを決して行わず、代わりにすべての衝突が発生する前にそれをキャッチし、TOIによって順序付けられた「計画された衝突」スタックに入れる方法を見つけたいという意味です。 ブロードフェーズ 私が考えることができる唯一の連続的なブロードフェーズの方法は、各ボディを円に入れ、各円が別の円と重なるかどうかをテストすることです。ただし、これは恐ろしく非効率的で、カリングが欠如しています。 四分木など、今日の離散衝突カリング手法にどのような連続アナログが存在するのかもわかりません。ディスクリートエンジンなどの不適切で無意味な広範なテストを防ぐにはどうすればよいですか?また、1フレーム以上先の衝突を確認できるようにしたいと考えています。 ナローフェーズ 私はナローSATを離散ではなく継続的なチェックに適応させることができましたが、皆さんが出くわした可能性のある論文やサイトには、他にも優れたアルゴリズムがあるはずです。 どのようなさまざまな高速または正確なアルゴリズムを使用することをお勧めしますか、それぞれの長所/短所は何ですか? 最後の注記:凹面、凸面、円形、または穴があってもよいさまざまなポリゴンをどのように保存するかまだ決まっていないため、アルゴリズムではなくテクニック を言います。アルゴリズムに必要なものに基づいてこれを決定する予定です(たとえば、ポリゴンを三角形または凸型の形状に分解するアルゴリズムを選択した場合、このフォームにポリゴンデータを格納するだけです)。

1
変形面
私はレベルサーフェスの変形する物理的な動作を達成しようとしていますが、これまでの実装から始める方法がわかりません。 表面の形状(平面、立方体、球…)に関係なく、ゲームエンティティ(プレーヤー、敵、オブジェクト…)の位置に小さなインデントを設定したいと思います。 説明するのはちょっと複雑なので、私が話していることを説明しました。球の例を次に示します。 したがって、表面は少し変形する必要があります(本当に柔らかいベッドやソファーのように見えるようにするため)。私のサーフェスでは、スムーズな変形を実現するためにおそらく高い頂点数が必要ですが、私の大きな問題は、この変形を計算するための数学です。 私はOpenGLを使用してC / C ++でプログラミングしていますが、正しい方向のアドバイスは問題ありません。

2
すべてのタイルをループしたりスキップしたりせずに、線が交差しているタイルを見つける
私はこの問題を数日間見つめてきました。問題を視覚化するのに役立つように、このグラフィックを作りました:( グラフから、線が[1、1]、[1、2]、[2、2]、[2、3]と交差し、[で終わることがわかります3,3]) ラインに沿って各グリッドスペースに進み、グリッドスペースのマテリアルが固体であるかどうかを確認したいと思います。関係する数学はすでに知っているように感じますが、まだまとめることはできていません。私はこれを使用して視線をテストし、パスファインディングアルゴリズムを介してパスが見つかった後にノードを排除します-エージェントは固体ブロックを通過できないため、ブロックを通過できず、ノードがパスから排除されません。コーナーをナビゲートするために必要です。 そのため、交差する各グリッドスペースまでラインに沿って進むアルゴリズムが必要です。何か案は? 私は、Bresenhamのような多くの一般的なアルゴリズムと、線に沿って事前定義された間隔でステップを実行するアルゴリズムを調べました(残念ながら、このメソッドは、タイルがステップサイズよりも小さいウェッジと交差している場合、タイルをスキップします)。 ホワイトボードに大量のfloor()関数とceil()関数を実装していますが、複雑すぎて、速度低下の原因となる可能性があります。


1
SharpDXはまだ十分に成熟していますか、それとも今すぐSlimDXを使い始めるべきですか?
XNAでのゲームプロジェクトを停止しようとしています。集めることができるものから、開発は終わりに近づいています(そして、現在の技術の背後にすでにあります)。したがって、新しいフレームワークまたはAPIを採用する必要があります。 私は2日間C ++を調べただけで、本当に自分には向かないと判断しました-しかし、DirectXへの直接アクセスは魅力的だと思います。SharpDXは出発点としては良いように思えますが、ドキュメントもコードコメントもありません。まだ使用できる状態ではないようです。 これらのフレームワークのいずれかまたは両方を使用した人々の意見に興味があります。どちらを学ぶべきかを確実に判断するのに役立ちます。アドバイスありがとうございます。
10 xna  slimdx  sharpdx 

1
Unity3dモバイルプロジェクトを既存のネイティブモバイルアプリに埋め込むことはできますか?
AndroidとiPhoneの両方のアプリケーションを作成しています。このアプリケーションには、いくつかのミニゲームが含まれます。ネイティブのAndroidとiPhoneでゲーム以外のセクションを作成したいと思います。私の質問は、私が作成しているUnityミニゲームをすべて1つのapkとiosプロジェクト内に組み込むネイティブアプリを持つことは可能ですか?
10 android  iphone  unity  ios 

1
OpenGLで「夜空」効果を作成するにはどうすればよいですか?
OpenGLを使用してゲームを作成していて、星が数個ある夜空の効果をレンダリングしたいと考えています。 空にピカピカの黒の効果を入れて見栄えを良くしたいです。誰かがそれを進める方法を手伝ったり、良いチュートリアルへのリンクを提供したりできますか?
10 opengl  sky 

2
ゲーム内の死んだオブジェクトを効果的に取り除く?
forループまたはforeachループ(問題ではない)を使用して、オブジェクトを更新または描画する必要があるときにすべてのオブジェクトをループします。ただし、オブジェクトが強制終了された場合は、コレクションから再度削除してください。 これを行うには、オブジェクトをデッドオブジェクトリストに追加し、すべてが描画および更新されたら、このリストのすべてを調べ、リスト内のオブジェクトも元のソースから削除します。 これを行うより良い方法はありますか?
10 xna  c#  xna-4.0 

5
ガラスの破砕をどのようにシミュレートできますか?
ガラス窓から石を投げてシミュレーションする必要があります。どうすればそれを達成できますか? つまり、3D Studio Max 2012で石とガラスの3Dモデルを作成し、ガラスを粉砕して、両方を.xモデルとしてXNA 4.0にエクスポートすることを考えていました。次に、XNAでアニメーションを作成します。自分の物理エンジンを作成します。その方法は可能ですか?衝撃後にXNAでガラスを破壊することは可能ですか、それとも3DS Maxでそれを行うべきですか?「ガラスを破壊する」とは、石の開始速度と重量、およびガラス(すべてのユーザー定義)の抵抗(硬度?)によってビットが切断されるため、以前に粉砕されたガラスのビットを互いに切断することを意味します異なる方法でお互いに。
10 xna  physics  xna-4.0  3dsmax 

1
ネットワーククライアントサーバーメッセージ交換とクロック同期ヘルプ
テーブルホッケーである高速の物理ゲームをやっています。マレット2つとパック1つ。ゲームはiphone / ipadで実行され、GameCenterを介してマルチプレイヤーの部分を実行しています。 これがネットワークシステムの動作方法です。マッチにスターを付けるクライアントはサーバーとして解決され、マッチリクエストを受け入れるのはクライアントです。 「サーバー」は物理演算を実行しており、応答は即時であり、クライアントも物理演算を実行しているため、メッセージ交換間でスムーズに見えます。私がサーバーとしてしていることは、パック速度と位置をクライアントに送信し、クライアントがサーバーに関連するパック速度/位置を調整してサーバーを同期させることです。そうしないと、物理が非同期になり、ねじ込みます。 ネットワークレイテンシが良好な場合、100ミリ秒以下の結果はかなり良好です。クライアント側でスムーズにプレイできるゲームが得られ、奇妙な動作は最小限です。ラグが約150〜200ミリ秒のときに問題が発生します。その場合、私のクライアントパックはすでにエッジと逆方向にヒットしていますが、サーバーから遅延メッセージを受信し、少し後ろに戻ってボールの動作に奇妙な感覚を引き起こしています。 私はそれについていくつか読んだ: Pongネットワークの例 同期の例をクリックします クロック同期に関するウィキペディア だから、どうすればこれを解決できますか?私が持っている最良のオプションを読んだ限り、タイムスタンプを使用してサーバー/クライアントでクロック同期を行い、クロックに関連する遅延メッセージが表示された場合は無視して、クライアントのシミュレーションでジョブ。皆さんはそれに同意しますか?また、データを信頼できない(UDP)で送信しているため、メッセージが遅れたり、メッセージが乱れたりすることがあります。 それが最善のアプローチである場合、クロック同期をどのように実装しますか?手順を読みましたが、よくわかりませんでした。 それは言う: クライアントは現在の現地時間を「時間要求」パケットにスタンプし、サーバーに送信します。 サーバーが受信すると、サーバーはサーバー時間にスタンプを付けて戻ります クライアントが受信すると、クライアントは送信時間から現在の時間を減算し、2で除算してレイテンシを計算します。サーバー時間から現在の時間を差し引いてクライアント/サーバー時間のデルタを決定し、待ち時間の半分を追加して正しいクロックデルタを取得します。(これまでのところ、このアルゴリズムはSNTPに非常に似ています) クライアントは、手順1〜3を5回以上繰り返し、そのたびに数秒停止します。他のトラフィックは暫定的に許可される可能性がありますが、最良の結果を得るために最小化する必要がありますパケット受信の結果は累積され、最小遅延から最大遅延の順にソートされます。待機時間の中央値は、この順序付きリストから中間点サンプルを選択することによって決定されます。 中央値からの標準偏差が約1を超えるすべてのサンプルは破棄され、残りのサンプルは算術平均を使用して平均化されます。 この例に従って、私はこれを持っています: ゲームがロードされ、クライアントの時間が0になったふりをして、時間を0としてサーバーに送信します。 メッセージがサーバーに到達するまでに150ミリ秒かかりますが、サーバーのクロックは既に開始されており、クライアントより1秒進んでいます。サーバーがメッセージを受け取ると、時間は1.15になり、その時間をクライアントに送信します。ラグが150ミリ秒で一定であるとしましょう。 これで、クライアントは1.15の時間を受け取り、送信された時間から現在の時間を差し引き、レイテンシを計算するために2で割ります。Wichは、0.3-0 = 0.3 / 2-> 150msです。 サーバー時間から現在の時間を差し引いてクライアントサーバー時間のデルタを決定し、半分の待ち時間を追加して正しいクロックデルタを取得します。 クライアント時間:0.3サーバー時間1.15 0.3-1.15 = .85 +待ち時間(.15)= 1 それはどのように同期されますか?何が欠けていますか? マルチプレイヤーとネットワークの経験が初めてなので、少し混乱しています。 ありがとうございました。


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