ゲーム開発

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

6
シームレスなタイルマップレンダリング(境界のない隣接画像)
タイルセットイメージからタイルを描画してタイルマップを描画する2Dゲームエンジンがあります。デフォルトでは、OpenGLはテクスチャのGL_REPEAT一部()ではなくテクスチャ全体のみをラップできるため、各タイルは個別のテクスチャに分割されます。次に、同じタイルの領域が互いに隣接してレンダリングされます。意図したとおりに動作しているときの外観は次のとおりです。 ただし、分数スケーリングを導入するとすぐに、継ぎ目が表示されます。 なぜこれが起こるのですか?これは、四角形の境界線をブレンドする線形フィルタリングによるものだと思いましたが、それでもポイントフィルタリングでは発生します。私がこれまでに見つけた唯一の解決策は、すべての位置決めとスケーリングが整数値でのみ発生するようにし、ポイントフィルタリングを使用することです。これにより、ゲームの視覚的品質が低下する可能性があります(特に、サブピクセルの配置が機能しなくなるため、動きがそれほど滑らかになりません)。 私が試した/考えたこと: アンチエイリアスは、継ぎ目を減らしますが、完全に排除しません ミップマッピングをオフにしても効果はありません 各タイルを個別にレンダリングし、1ピクセルずつエッジを押し出します-しかし、これは最適化されていません。タイルの領域を一度にレンダリングできなくなり、透明領域のエッジに沿って他のアーティファクトを作成するためです。 ソース画像の周囲に1pxの境界線を追加し、最後のピクセルを繰り返します-しかし、それらは2のべき乗ではなくなり、NPOTサポートのないシステムとの互換性の問題を引き起こします タイル化された画像を処理するためのカスタムシェーダーを記述しますが、それではどうしますか?GL_REPEAT境界で画像の反対側からピクセルをつかみ、透明度を選択しないでください。 ジオメトリは正確に隣接しているため、浮動小数点の丸め誤差はありません。 フラグメントシェーダーが同じ色を返すようにハードコーディングされている場合、縫い目は消えます。 テクスチャに設定されている場合GL_CLAMPの代わりにGL_REPEAT、継ぎ目が消え(レンダリングが間違っているが)。 テクスチャがに設​​定されているGL_MIRRORED_REPEAT場合、縫い目は消えます(ただし、レンダリングは再び間違っています)。 背景を赤にしても、縫い目は白のままです。これは、透明ではなく、どこかから不透明な白をサンプリングしていることを示唆しています。 そのため、シームGL_REPEATは設定されている場合にのみ表示されます。このモードでのみ何らかの理由で、ジオメトリの端にブリード/漏れ/透明度があります。それはどうですか?テクスチャ全体が不透明です。

1
ゲームエンジンの設計-Ubershader-シェーダー管理設計[終了]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 2年前に閉店しました。 遅延シェーディングを備えた柔軟なUbershaderシステムを実装したい。私の現在のアイデアは、FlatTexture、BumpTexture、Displacement Mappingなどの特定の機能を処理するモジュールからシェーダーを作成することです。色をデコードしたり、トーンマッピングなどを行う小さなモジュールもあります。これには、 GPUがサポートしていない場合、特定のタイプのモジュールを交換します。そのため、現在のGPU機能に適応できます。このデザインが良いかどうかはわかりません。私は今、悪いデザインを選択し、後でそれを支払うことができるのではないかと恐れています。 私の質問は、シェーダー管理システムを効果的に実装する方法に関するリソース、例、記事はどこにありますか?ビッグゲームエンジンがこれを行う方法を知っている人はいますか?


4
「ツール開発」とは何ですか?
私はゲーム業界でさまざまな仕事を見てきましたが、広告で見た仕事の多くは「ツール開発者」の職に就いています。これが実際に何なのかわかりません。 誰かがこれが私にとって何であるかを説明してもらえますか?そして、もし誰かが私がそれをより理解するのを助ける資料へのリンクを持っているならば、それは非常に高く評価されるでしょう。

3
ユニットが追加または削除されたときに長方形の形成を維持するにはどうすればよいですか?
行と列のある長方形のボットがあります。ボットがフォーメーションに追加または削除されると、問題が発生します。これが発生すると、ボットは、長方形の構成がほぼ同じアスペクト比で、可能な限り長方形になるように、自分自身を再配置する必要があります。これを行う方法? いくつかのアイデア: ボットを追加または削除する場合、ボットの新しい合計数と目的の一定のアスペクト比を使用して、そのアスペクト比に最も近いフォーメーションの新しい幅と高さを計算します。次に、何らかの方法でボットをシャッフルし、新しい次元に合わせます。 ボットが削除されたら、その背後にあったボットをその場所に移動し、フォーメーションの最後に到達するまで続行します。次に、バックランクのボットを何らかの方法でシャッフルすることにより、バックランクを可能な限り均等にします。 まったく異なる別のアイデアは、分子構造が一緒に留まる方法を模倣することです。4つの最も近いボットを引き付け、残りのボットを撃退することで、すべてのボットを4つの他のボットに囲ませます。逆二乗則を使用して分離を確保するには近すぎるボット(4つを含む)をすべて撃退します。また、構造全体の形状に追加の力が必要になります。しかし、これは非常に計算コストがかかります。 更新:だからサラームの答えを見て、良い次元を与える良い一般的な関数を思いついた。 最初に、以下の幅と高さの連立方程式を解いてから、答えを丸めました。 width/height=aspect ratio of your choice width*height=number of bots これにより、ボット数に対してそのアスペクト比に最も近い整数の長方形が得られます。最も近い長方形は、半分の時間が大きすぎ、半分の時間が小さすぎます(もちろん、ちょうどいいかもしれませんが、それらを気にする人もいます)。長方形が少し大きすぎる場合は、何もする必要はありません。バックランクはほぼ満杯になり、理想的です。長方形が少し小さすぎる場合は、問題が発生します。小さなオーバーフローは独自のランクに移動する必要があるため、少数のボットのみのランクが作成されますが、見た目は美しくありません。違いが大きい場合もあります(幅の半分よりも大きい)。この場合、1つのランクを加算または減算して、差を小さくします。次に、長方形が小さすぎる場合は、列を1つ追加して少し大きくします。それを行った後、バックランクは常に他のランクの少なくとも半分のボットを持っているように見えます。 更新 寸法を取得したら、それらを現在の寸法と比較します。新しい次元の間口が大きい場合、ランクごとに、下のランクからボットをポップし、そのランクのボットの数が間口と等しくなるまで、現在のランクにプッシュします。バックランクに達するまで、そのアルゴリズムを続けます。このアルゴリズムを使用すると、ボットは新しい次元に効率的に収まるように移動します。その後、単に新しい古いものをバックランクにプッシュします。アルゴリズムは、新しい間口が小さい場合と若干異なりますが、あなたはそれを把握できます! 次に、さらに2つの問題があります。削除、および新しいボットが必ずしもバックランクに割り当てられるわけではなく、追加された時点で最も近い位置にあるボットの柔軟な追加方法。


3
バージョン管理から無視できるlibgdxプロジェクトファイルは何ですか?
自動的に作成されたlibgdxプロジェクトで、Git(または他のリビジョン管理システム)に無視するファイルを安全に伝えることができるのはどのファイルですか? 私はこれらを検討しています: *-android/.settings/ *-android/bin/ *-desktop/.settings/ *-desktop/bin/ *-html/.settings/ *-html/gwt-unitCache/ *-html/war/WEB-INF/classes/ *-html/war/WEB-INF/deploy/ *-html/war/assets/ *-html/war/ */.settings/ */bin/ 私はいくつか欠けていますか?どこかに完全なリストはありますか?

2
クロスプラットフォームのゲームエンジン開発にC ++ 11を使用する
注:これは、C ++ 03およびC ++ 11に関する「意見を述べる」質問ではありません。 C ++ 03で記述されたゲームエンジンは、Windows、OSX、iOSでコンパイルされるように設計されています。Linuxサポートは(非常に)近い将来に予定されています。コンソールに関しては経験が限られているため、この質問をしています。 現在、C ++ 11に切り替えて、C ++ 11標準の非互換機能を使用すると、近い将来、現在のgenコンソール(おそらく、一部のコンソールでサポートされているコンパイラはまだC ++ 11をサポートしていませんか?知りません...)。 だから、複数のプラットフォームとコンソールで経験を積んだゲーム開発者は、新世代のコンソールが登場し、ほとんどの人がC ++ 11標準に切り替えられるまで、C ++ 03に固執すべきだと思いますか?または、ほとんどのコンソールは、すでにC ++ 11機能をサポートしているコンパイラー(VC ++、GCCまたはバリアント)を使用/サポートしていますか?

4
MMORPGがまだ複数のサーバーを使用するのはなぜですか?
MMORPG、League of Legends、またはStarCraft 2などの一部のMOBAは、通常、サーバーの選択を強制します。通常、それらは米国、EU、およびSEAであり、MMORPGでは場所ごとに多数存在します。それは数年前に必要だったことがわかりますが、AWSや「サーバーパワー」をシームレスに拡張できる同様の製品の登場により、なぜ別のサーバーがあるのですか? 私の思考の流れは次のようなものです(スターウォーズ:旧共和国を例として):-あなたは常に1つの惑星、他の惑星から孤立した「インスタンス」にいます。-1つの惑星に人が多すぎる場合、SW:TORは世界の新しいインスタンスを作成し、そこにプレイヤーを配置します。-あなたが世界を離れる/インスタンスを切り替えると、ロード画面があります それでは、なぜこのゲームはこの惑星のインスタンスを作成できないのでしょうか。このインスタンス(およびこのインスタンスのみ)は、データベースに現在のデータを保持し、xプレーヤーを管理します。x-50プレイヤーがこのインスタンスにいるとすぐに、新しいサーバーが起動し、新しいインスタンスがそのインスタンスに出現します。50のスポットは、グループへの切り替えなどのために予約されています。 レイテンシーを低く抑えるために、3つの主要地域すべてにインスタンスが存在する可能性がありますが、140ミリ秒の遅延でライブできる場合は、SEAから他のプレイヤーとプレイすることができます(これはまだ何もありません)。 インスタンスを切り替えたり、別の世界に移動したりするたびに、現在のサーバーはすべてのデータを次のサーバーに提供し、1つの大きな集中データベースが必要ないようにします。分析目的で定期的に更新を取得するものを使用することもできます。 ログオフするか、サーバーが接続を失うと、データを保存するために最適化された大規模なデータベースにデータを転送できます。その後、インスタンスサーバーを高スループット用に最適化できます。 これが機能しない特別な理由はありますか?私が見逃している他の問題はありますか?
18 architecture  mmo 

2
タイルグリッドのナビゲーションメッシュを生成するにはどうすればよいですか?
私はまだ実際にこのプログラムのプログラミングを開始していませんが、とにかくこれをどのように実行するかを知りたかったのです。 タイルのグリッドがあり、すべて同じサイズで、一部は通過可能で、一部はそうではないとします。このグリッドからポリゴンのナビゲーションメッシュを作成するにはどうすればよいですか? 私のアイデアは、通過不可能なタイルを取り出して、そこからラインを延長してポリゴンを作成することでした...これまでのところ、これで終わりです。何かアドバイス?

1
棚を検出するにはどうすればよいですか?
私のゲームでは、キャラクターが棚をつかんで保持できるようにし、そうする余裕があれば自分自身を引き上げることができるようにします。 棚があるかどうか、キャラクターが登るのに十分なスペースがあるかどうかを検出するにはどうすればよいですか?
18 physics 

7
PointオブジェクトとVectorオブジェクトが必要ですか?または、単にVectorオブジェクトを使用してPointを表すことは問題ありませんか?
私が友人と一緒に開発しているエンジンのコンポーネントを構築すること(学習目的)で、私はこの疑問に思いつきました。 最初は、次のようなPointコンストラクターがありました。 var Point = function( x, y ) { this.x = x; this.y = y; }; しかし、それらにいくつかのVector数学を追加し始め、Vector2dに名前を変更することにしました。 しかし、現在、行を作成するために使用される次のようないくつかの方法は(少なくとも私の意見では)少し混乱しています。 //before the renaming of Point to Vector2, the parameters were startingPoint and endingPoint Geometry.Line = function( startingVector, endingVector ) { //... }; Pointオブジェクトの特定のコンストラクターを作成する必要がありますか、またはポイントをベクトルとして定義するのに問題はありませんか? ベクトルには大きさと方向がありますが、オブジェクトの位置を表すためだけにベクトルを使用している人が非常に多いと思います。

2
Unity3Dのポータルを移動するときに2つのカメラをブレンドする方法
私が質問する前に、最も明白な解決策は正規化されたビューポート長方形を使用することであることを知っていますが、長方形よりも複雑な形状が必要であり、ビューポート長方形の使用を検討しましたが、そうではないようです私の解決策です。 編集:一部の人々は私の質問に混乱していたので、もう少し詳しく見てみましょう。 プレイヤーが1つのポータルに移動すると、クローンFPSコントローラーを作成し、他のポータルから移動します。これにより、2台のカメラと、右上に表示されるビューが提供されます。1つのカメラを表示し、ポータルを切り取っているだけです。私が欲しいのに似たものである。このカメラがブレンドして滑らかな移行の錯覚を作成します。私がやりたいのは、下の画像の緑のチェッカー画像から左にあるものをすべて削除し、それを他のカメラに置き換えます。これにより、カメラAのビューの一部がポータルの外に出て、カメラBのビューの一部が他のポータルの外に出て、1つの完全な画像が得られます。ポータル内を移動すると、カットが適切に変更されます。 ポータルシステムを設計してきましたが、プレイヤーがポータル内をスムーズに移動できるようにするなど、すべてがダウンしています。私の主な問題は、Valveのカメラブレンドエフェクトを取得することです。ポータルから頭を突っ込んでいるかのように、2つのカメラがシームレスにブレンドする必要があります。そして、それは単なる長方形ではなく、プレイヤーがポータルを通して見ているものと一致しなければなりません。 現時点での私の最善のリードは、各ポータルの背後に深度マスクシェーダーを投影し、移動しているポータルのカメラを深度のみにすることです。その後、どういうわけか2つのカメラをミックスします。私の主な問題は、これをどのように行うか、2番目のカメラでポータルの外にあるもののみをレンダリングし、残りをデフォルトでカメラ1に設定して全画面投影を行う方法を正確に把握することです。 あなたが私にアイデアを与えることができるか、私が非常に役立つだろう深さマスクシェーダーでこれを行う方法を説明することができれば。私はこれに取り組み続け、突破口を作りながら更新します。
18 c#  unity  camera  valve  portals 

3
ゲームにスマートスクリプトを実装するにはどうすればよいですか?
ゲームエンジンを開発しています。エンティティ/コンポーネントベースのものであると想定されています。ゲーム自体を開発するために、スクリプト言語を使用してエンティティを実際に作成することを考えました。 たとえば、プレイヤーに攻撃的な種類のモンスターを追加したい場合、それはいくつかのコンポーネントを持つエンティティになります。これらのコンポーネントはモンスターの種類によって変わるため、ゲーム内に100種類のモンスターがいる場合、ゲームコードでそれらのそれぞれに対して新しいメソッドを直接作成する必要はありません。 コンポーネントの観点から、このエンティティを記述するためにスクリプト言語を使用する必要がありますか?より一般的には、ゲームでスクリプトを使用するにはどうすればよいですか?

2
GLSL-ワンパスガウスぼかし
ワンパスガウスぼかしを行うフラグメントシェーダーを実装することは可能ですか?2パスブラー(ガウスおよびボックスブラー)の実装が多数見つかりました。 http://callumhay.blogspot.com/2010/09/gaussian-blur-shader-glsl.html http://www.gamerendering.com/2008/10/11/gaussian-blur-filter-shader/ http://www.geeks3d.com/20100909/shader-library-gaussian-blur-post-processing-filter-in-glsl/ 等々。 私はガウスぼかしを畳み込みとして実装することを考えてきました(実際、それは畳み込みであり、上記の例は単なる近似です)。 http://en.wikipedia.org/wiki/Gaussian_blur

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