ゲーム開発

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

2
OpenGLでの遅延タイルシェーディング、タイルフラスタ計算
OpenGLで計算シェーダーを使用して遅延タイルシェーディングを実行しようとしていますが、各タイルの錐台を作成しようとしたときに障害が発生しています。AMDのForward +デモ(D3Dで記述)をガイドとして使用していますが、ライトがカリングされるべきではないときにカリングされているようです。 更新 更新については以下をお読みください。 これは私の(完全な)計算シェーダーです: #version 430 core #define MAX_LIGHTS 1024 #define MAX_LIGHTS_PER_TILE 40 #define WORK_GROUP_SIZE 16 struct PointLight { vec3 position; float radius; vec3 color; float intensity; }; layout (binding = 0, rgba32f) uniform writeonly image2D outTexture; layout (binding = 1, rgba32f) uniform readonly image2D normalDepth; layout (binding = …

3
オブジェクトをレンダリングから分離する必要があるのはなぜですか?
Disclamer:私はエンティティシステムパターンが何であるかを知っており、それを使用していません。 オブジェクトとレンダリングの分離についてたくさん読みました。ゲームロジックは、基盤となるレンダリングエンジンから独立している必要があるという事実について。それはすべてうまく、そしてダンディであり、それは完全に理にかなっていますが、他の多くの苦痛も引き起こします: ロジックオブジェクトとレンダリングオブジェクト(アニメーションの状態を保持するオブジェクト、スプライトなど)間の同期の必要性 レンダリングオブジェクトがロジックオブジェクトの実際の状態を読み取るために、ロジックオブジェクトを公開する必要があります(多くの場合、ロジックオブジェクトは、ダムゲッターおよびセッターオブジェクトに簡単に変換されます) これは私には良い解決策のように聞こえません。一方、オブジェクトをその3D(または2D)表現として想像することは非常に直感的であり、維持も非常に簡単です(そして、はるかに多くのカプセル化も可能です)。 グラフィックス表現とゲームロジックを一緒に維持し(同期の問題を回避)、レンダリングエンジンを抽象化する方法はありますか?または、上記の欠点を引き起こさないゲームロジックとレンダリングを分離する方法はありますか? (例として、私は抽象的な講演の理解があまり得意ではありません)

2
GL_TEXTURE_WRAP)_(S / T)を変更するとどうなりますか?
私はいくつかの初心者向けOpenGLチュートリアルに取り組んでおり、現在のチュートリアルでは、単純な長方形にテクスチャを適用する方法を教えています。チュートリアルの状態では、テクスチャパラメータGL_TEXTURE_WRAP_SおよびGL_TEXTURE_WRAP_TをGL_CLAMP_TO_EDGEに設定するように指示されていますが、これが実際に何をするかはわかりません。それがマップされているスペースよりも大きい/小さいテクスチャがどのように処理されるかに関係していることはわかっていますが、これが実際にどのような動作を引き起こすかはわかりません。GL_CLAMP_TO_EDGEは何をしますか、そしてこれはGL_CLAMP、GL_CLAMP_TO_BORDER、GL_REPEATとどう違うのですか?どうもありがとうございました。私のようなバカに画像を提供できると助かります。
11 opengl  textures 

2
マルチプレイヤーでのジャンプなどのアクションを同期する方法は?
私は初心者のゲーム開発者で、マルチプレイヤーゲームについて研究しています。私は常にある程度の待ち時間があることを観察しました、プレイヤーは常に過去のアクションから更新を取得します。しかし、レイテンシを処理する推測航法のようなテクニックがあります。動きを予測してスムーズに動きます。しかし、ジャンプ、歩行停止などのアクションを同期させるにはどうすればよいでしょうか。 クライアントAが動いていて、100m /秒の速度で10.2時間に100mにいて、この情報を送信したとします。クライアントBはこの情報を少し後で受け取り、10.4にします。クライアントBでは、予測を使用して、クライアントAを120mに配置できます。しかし、クライアントが10.3で110mでジャンプしたとしたらどうでしょう。それを予測することはできません。予測を使用しているため、クライアントAの過去のジャンプを示すことはできません。 ジャンプアクションをまったく送信しないことで、この問題に対処できます。しかし、私のゲームにプレーヤーが転んで死ぬ可能性があるいくつかの空白がある場合はどうでしょうか。したがって、ジャンプアクションを同期しない場合、他のプレーヤーは1人のプレーヤーが走っていることを観察し、その後彼は無効になり、画面に表示されて視覚的なエンゲージメントを破壊します。 ジャンプは単なる例であり、予測が機能しない多くのシナリオがあるかもしれません。だから、どうやってそれらに対処するのですか?そのような例の1つは、Awesomenautsのようなマルチプレイヤーオンラインバトルアリーナゲームです。

3
1より大きい、または0より小さいテクスチャ座標に遭遇する可能性があるのはなぜですか
私がテキストを勉強していますtexture mappingし、中preparing to drawのセッション、私が読んで: テクスチャラッピングパラメータを定義します。これにより、1.0より大きいか0.0より小さいテクスチャ座標が検出された場合の処理​​が制御されます。 glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,wrap); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,wrap); wrapは次のとおりです 。GL_REPEAT:0.0未満または1.0より大きい変換されたテクスチャ座標が検出された場合、このパターンが繰り返される(つまり、ラップアラウンド)ことを指定します。 GL_CLAMP:パターンが0.0または1.0の値に「固定」されることを指定します。 しかし、そのようなテクスチャ座標に遭遇する理由が何であるかについての説明はありませんか? たとえば、長方形を描いたばかりで、その上にテクスチャとして画像を適用したい場合、そのような座標に遭遇することは可能ですか?

3
エンティティ/コンポーネントシステムでエンティティを同時に処理するための読み取り/計算/書き込みステップを効率的に分離
セットアップ エンティティコンポーネントアーキテクチャがあり、エンティティは一連の属性(動作のない純粋なデータ)を持つことができ、そのデータに作用するエンティティロジックを実行するシステムが存在します。基本的に、やや疑似コードで: Entity { id; map<id_type, Attribute> attributes; } System { update(); vector<Entity> entities; } すべてのエンティティに沿って一定の速度で移動するシステムは、 MovementSystem extends System { update() { for each entity in entities position = entity.attributes["position"]; position += vec3(1,1,1); } } 基本的に、私はupdate()をできるだけ効率的に並列化しようとしています。これは、システム全体を並行して実行するか、1つのシステムの各update()にいくつかのコンポーネントを与えることにより、異なるシステムが同じシステムの更新を実行できるようにして、そのシステムに登録されたエンティティの異なるサブセットに対して実行できます。 問題 示されているMovementSystemの場合、並列化は簡単です。エンティティは相互に依存せず、共有データを変更しないため、すべてのエンティティを並行して移動できます。 ただし、これらのシステムでは、エンティティが相互にやり取りする(データを読み書きする)ことが必要な場合があります。同じシステム内でも、相互に依存する異なるシステム間である場合がよくあります。 たとえば、物理システムでは、エンティティが互いに相互作用する場合があります。2つのオブジェクトが衝突し、それらの位置、速度、およびその他の属性がオブジェクトから読み取られて更新され、更新された属性が両方のエンティティに書き戻されます。 エンジンのレンダリングシステムがエンティティのレンダリングを開始する前に、他のシステムが実行を完了するのを待って、関連するすべての属性が必要な属性であることを確認する必要があります。 これを盲目的に並列化しようとすると、異なるシステムが同時にデータを読み取り、変更する可能性がある従来の競合状態が発生します。 理想的には、他のシステムが同じデータを同時に変更することを心配することなく、またプログラマが実行と並列化を適切に順序付けすることを気にすることなく、すべてのシステムが必要なエンティティからデータを読み取ることができるソリューションが存在しますこれらのシステムを手動で(場合によっては不可能になることもあります)。 基本的な実装では、これはすべてのデータの読み取りと書き込みをクリティカルセクションに配置するだけで実現できます(ミューテックスで保護します)。しかし、これは大量のランタイムオーバーヘッドを引き起こし、パフォーマンスに敏感なアプリケーションにはおそらく適していません。 解決? 私の考えでは、考えられる解決策は、データの読み取り/更新と書き込みが分離されているシステムであり、1つの高価なフェーズでは、システムはデータの読み取りと計算に必要なものだけを計算し、何らかの方法で結果をキャッシュしてからすべて書き込みます。別の書き込みパスで変更されたデータをターゲットエンティティに戻します。すべてのシステムは、フレームの先頭にある状態でデータに作用し、その後、フレームの終わりの前に、すべてのシステムが更新を完了すると、シリアル化された書き込みパスが発生し、すべての異なるキャッシュ結果がキャッシュされますシステムは反復され、ターゲットエンティティに書き戻されます。 これは、簡単な並列化の勝利が結果のキャッシュと書き込みパスのコスト(実行時のパフォーマンスとコードのオーバーヘッドの両方の点で)を上回るほど大きくなる可能性がある(多分間違っているか?)という考えに基づいています。 質問 最適なパフォーマンスを実現するために、このようなシステムをどのように実装するのでしょうか?そのようなシステムの実装の詳細と、このソリューションを使用するエンティティコンポーネントシステムの前提条件は何ですか?

2
データ駆動型設計とは何ですか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 6年前に閉鎖されました。 私はゲームのデータ駆動型設計をカバーする多くの記事を読んでいます。それは次のようになります: ハードコーディングなし エンジンにゲーム固有のコードはありません AI、カットシーンなどのスクリプト。 再利用のためのコードの一般化 コンポーネント設計 モジュール性 低カップリング エディター(データ、マップ、スクリプト用) 外部データ検索 テキストファイルに保持される定数(.iniまたはその他) デザイナーによるスクリプト作成と操作のためにエディターを介してデータを公開する さて、私の質問は、この理解は正しいですか?

1
プレーヤーがサインインしているかどうかを知る方法は?
「プレーヤー」がサインインしているかどうかを知る方法はあるのだろうかと思っていましたか? このようなもの: if (GamePad.GetState(PlayerIndex.Two).IsConnected && !Gamer.PlayerTwo.IsSignedIn) コントローラーが接続されて使用できるようになりますが、プレーヤーはアカウントにサインインしていません。推測のようなもの。

4
ターンベース、距離ベースの戦略ゲームで可能な動きの範囲を決定する方法は?
私はc ++とSFML-2.0を使用して、2次元のターンベースの戦略ゲームを作成しています。移動はグリッドベースではなく距離ベースであり、いくつかの異なる三角形のピースが所定のターンで所定の位置で回転するか、前方に移動します。 動きは、プレイヤーが駒を移動する場所を選択するように機能します。これにより、駒が進む可能性のあるパスが生成されます。プレーヤーが決定を確認すると、ピースはそのパスに沿って目的の場所に移動します。パスは次の2つの要素によって制限されます。距離、曲がり角を考慮して、ピースが移動できる距離です(カーブがある場合、ポイントからポイントに直接ではなく、カーブに沿った長さになります)。ステアリングアングル、ピースが移動中に任意のポイント(およびすべてのポイント)で回転できる距離(たとえば、-30から30度)。 私の質問は、ピースを移動させるためにプレーヤーが選択できる潜在的な場所の範囲をどのように決定すればよいですか? ここで使用する方程式やアルゴリズムは完全にはわかりません。私の最初の計画は非常に複雑で、実装することはほぼ不可能であり、説明は言うまでもありませんでした。この時点で、プロジェクトが停滞して完全に迷っています。 回転半径を考慮して、ユニットが移動できる範囲をどのように決定できますか? たとえば、次の画像では。赤、青、緑の線はすべて同じ長さになります。紫色の円は、ユニットが移動できる移動範囲を示します。(形状はおそらく不正確であり、ラインはおそらく実際には同じ長さではありませんが、あなたはアイデアを得るでしょう)

3
私の超シンプルなマルチプレイヤーセットアップはおそらく良いアイデアではないことを知っていますが、なぜですか?
単に楽しみのためにシンプルな小さなMOBAを作成しています。私はすべてをシングルプレーヤーにしていたときに、「マルチプレーヤーを追加する必要があるだろう」と気づきました。 私はこれまでネットワーキングで何もしたことがないので、Lidgrenをゲームに統合する方法を学ぶのは楽しくて素晴らしいものでした。問題は、私が行っている方法が間違っていることはよくわかっています。なぜなら、私が知る限り、メインストリームゲームを使用するには十分に堅牢ではないからです。しかし、何が問題になっていますか? 私がやっていることは、基本的に、プレイヤーがアクションを実行するたびに、「ちょっと、これをやっただけだ」というメッセージをサーバーに送信することです。サーバーとクライアントはどちらも同じシミュレーションを実行しています。次に、サーバーは他のすべてのクライアントにメッセージを送信して、その人がそのことをしたことを伝えます。 いくつかの場合を除いて、ほとんどの場合、プレーヤーが何かをするとき、クライアントはそれがクールであると想定し、自分でそれを進めます。したがって、どこかを右クリックしてそこに移動すると、そのプレーヤーのクライアントは彼の男をそこに移動し始め、それを知らせるメッセージをサーバーに送信します。 だから基本的に: プレイヤー1が呪文を唱えると、6秒間100%速く動くようになります プレーヤー1のローカルクライアントがそのバフをユニットオブジェクトに追加します プレーヤー1のクライアントがサーバーに「この呪文を唱えただけだ」というメッセージを送信します。 サーバーは、彼がその呪文を唱えるのに十分なマナを本当に持っていることを確認し、もしそうであれば、そのバフをサーバーのそのUnitオブジェクトのコピーに追加します サーバーは他のすべてのクライアントに「この男はこの呪文を唱えた」というメッセージを送信します 他のすべてのクライアントはメッセージを受信し、「ああ、大丈夫」に進み、そのバフをそのプレーヤーのローカルユニットオブジェクトに追加します ビッグゲームがマルチプレーヤーでどのように機能するかを確認するために、さまざまな情報をざっと調べてきましたが、この機能に手を出し始めたばかりのユーザーを混乱させるようなものですが、Sourceエンジンは、すべての変更を含むパケットを世界のすべてのダニ?繰り返しますが、これはまったく新しいことですが、それほど多くのデータを頻繁にプッシュできますか これが少し乱暴である場合は申し訳ありませんが、基本的には、なぜ私のシンプルなシステムが適切な方法ではないのかと思っていました。

2
key_callbackをラッパークラスインスタンスに関連付けるにはどうすればよいですか?
私のGLFW3呼び出しを単一のクラスにラップしようとしています: class WindowManager { private: GLFWwindow* window_; GLFWmonitor* monitor_; Keyboard* keyboard_; ... } そして、実行中に押されたキーを収集するシングルトンキーボードクラスをセットアップしようとしています。GLFWではkey_callback、クラス定義の外にある関数(フリー関数)を設定できます。 WindowManager::WindowManager() { ... glfwSetKeyCallback(window_, key_callback); ... } // not a class function void key_callback(GLFWwindow* window, int key, int scan code, int action, int mods) { ... } オブジェクト値をWindowManager設定できるように、コールバックとインスタンスを関連付けるにはどうすればkeyboard_よいですか?key_callbackそのメンバー関数はWindowManagerWindowManagerクラスのメンバーになるため機能せず、クラスのC ++メンバー関数では名前がぶら下がってしまうため、メンバー関数を作成できません。
11 c++  glfw 

2
自動編成/スマート在庫システム?
過去1週間、Unity3Dを使用して在庫システムに取り組んできました。最初はDesign3の人たちから助けを得ましたが、パスを分割するまでそれほど長くありませんでした。彼らのコードのやり方が本当に好きでなかったので、OOPの匂いはまったくありませんでした。 私はさらに一歩進んだ-アイテムは複数のスロット、高度な配置システム(アイテムはベストフィットを見つけるために最善を尽くす)、ローカルマウスシステム(マウスはアクティブなバッグ領域に閉じ込められる)などをとります これが私の作品のデモです。 私たちがゲームに入れたいのは、自動整理機能ではなく、自動整理機能です。この機能が必要なのは、インベントリが「リアルタイム」になるためです。バイオハザード1、2、3などでは、ゲームを一時停止してインベントリで何かを行うのとは異なります。ゾンビに囲まれた粘着性のある状況で自分を想像してみてください。弾丸はなく、周りを見回すと、地面に近くに弾丸があることがわかります。そのため、弾丸を手に取り、拾ってみますが、弾丸はありません合わない!あなたはあなたの持ち物を見て、あなたがアイテムのいくつかを再編成するならば、それが合うことを見つけます!-現在、プレーヤー-ゾンビに囲まれているため、再編成する時間がないため、スペースを確保するために停止して在庫を整理すると、死亡します(在庫をリアルタイムで記憶し、一時停止しないでください)- それが自動的に行われるのはいいことですか?- はい! (これはDungeon siegeなどの一部のゲームに実装されていると思うので、実行可能であることを確認してください) たとえば、この写真を見てください。 はい、そのため、問題を自動並べ替えると、スペースが表示されますが、次の理由で不良です。左下に移動すると、自動ソートと同じスペースが得られます。2-「それはFが私のものを再注文するように誰に言ったのですか?」 私はこれのために「コードを書く方法」を求めているのではなく、いくつかのガイダンスを求めています。これはグラフや最短経路に関するものですか?大学での勉強を続けることができなかったのではないかと思います:/でも、もしそうなら、教えてください。関連することを学びます。 解決策は1つだけではないことに注意してください。だから私が最初にしなければならないことは、状況が「解決可能」かどうかを判断することだと思います。状況が解決可能かどうかを判断する方法を知っていれば、「解決」できます。私はそれを「解決可能」にする条件を知る必要があるだけです。そして、これにはいくつかのアルゴリズム/データ構造が必要だと思います。 これは、1x3のアイテムをフィットさせようとする複数のソリューションの写真です。 矢印は解決策の1つを示していますが、見れば、複数の解決策が見つかるはずです。これは私が最終的に自動分類しないものですが、解決策を見つけてそれを適用します。 私がそれに時間を費やした場合、私はそれを解決する方法を思い付くでしょうが、それは最善の方法ではないでしょう、それは、あなたの手ではなく足で車の車輪を握るようなものです!XDまたは、配列が必要な問題を解決しようとするのと同じですが、それらの存在をまだ認識していません。これに対する正しいアプローチは何ですか? 解説からの更新 @Stephen私は本当にAlogsの第一人者ではありません。あなたは「ナップサック」と@BlueRajaについて言及しました-Danny Pflughoeftは2Dビンのパッキングアルゴについて言及しました。それらはどういうわけか関連/同じですか?-私はこれにどのように取り組むべきかについてまだ混乱しています。 そして、はい、私はすでに「ヒューリスティック」を使用していますが、自分がそうであるとは本当に知りませんでした。Dは、最初の使用可能なスロットを見つけ、アイテムがそこに収まるかどうかを確認します。 たとえば、2x2と1x4のアイテムがあるため、それらの「かさ高さ」(nSlotsRequired = nRowsReq * nColsRecと呼びます)に基づいてアイテムを注文しても機能するかどうかはわかりません。次の項目の残りの部分に異なる影響を与えます。そう... :/ 私はこのビデオを見て、完全な梱包のアイデアが本当に好きでしたが、在庫が2Dであるため、どうすればよいか疑問に思います。私が複数のバッグを持つことができるのは確かですが、ビンの梱包がここでの鍵であるかどうかさえわかりませんが、ゲームでは1つのバッグになるだけです。つまり、「1つの」バッグにアイテムを収めることだけが問題です。したがって、そのvidの例(パイプとバス)は実際には私の問題と一致しません。また、このナップザックの事柄についても注意深く見ましたが、「値」がアイテム/在庫にどのように関連しているかはわかりませんでしたが、「重量」はかさ高さと同じだと思います。

2
RPGではいつスキルツリーとスキルリストを使用する必要がありますか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 6年前に閉鎖されました。 ロールプレイングゲームにおけるスキルツリーとフラットスキルリストの長所と短所は何ですか?どちらの状況が適切なのですか? 以下は、Elder Scrolls IV:Oblivionから取得したスキルリストの例です。 以下は、ディアブロIIから抜粋したスキルツリーの例です。 追加の質問: スキルツリーは本質的にスキルリストよりも複雑ですか? スキルリストはキャラクターの能力を広くカバーする傾向がありますが、スキルツリーはキャラクターの特定の呪文や側面に焦点を当てていますか? The Elder Scrolls:Morrowindはスキルリストを使用し、Skyrimで削除されたAthleticsと呼ばれるスキルを持っています。スキルリストのスキルの疎結合により、役に立たないまたは無関係なスキルを作成しやすくなりますか?
11 game-design  rpg 

2
どのようにすれば、攻撃者は攻撃者だけを攻撃し、攻撃者は攻撃者を攻撃するだけですか?
私のゲームには、さまざまなタイプの善人とさまざまなタイプの悪者がいます。それらはすべてお互いに発射体を発射しますが、どちらのアラインメントでも偶発的な付随的な損傷が発生することは望ましくありません。そのため、悪者は他の悪者を打ったりダメージを与えたりしてはならず、善人は他の善人を打ったりダメージを与えたりすべきではありません。 私がこれを解決することを考えている方法は、Unitインスタンス(これはjavascript、btw)がまたはのalignmentいずれかのプロパティを持つようにすることです。そして、衝突が起きるのは、goodbad class Attack boolean didAttackCollideWithTarget(target) return attack.source.alignment != target.alignment and collisionDetected(attack.source, target) もちろん、これは疑似コードです。 しかし、私がこの質問をしているのは、Unitクラスにさらに別のプロパティを追加する以外に、これを設計するはるかにエレガントな方法があるかもしれないという感覚を得ているからです。

3
ブロックベースの2Dゲームでオクルードライティングを実装するにはどうすればよいですか?
ゲーム内オブジェクトでブロックできる2Dライティングが欲しい。私のゲームにはトップダウンビューがあり、すべてのゲームオブジェクトは長方形で表されます。 10x10の世界があり、1x1にライトを配置し、そのライトの周りに壁を配置するとします。光源が壁に遮られているため、1x1で光源を見ることができるようにしたいのですが、他の場所では光源を表示できません。 光線を当てることで効果があると聞いたことがありますが、実際にはどのように機能しますか?

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