ゲーム開発

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

1
アルファブレンドスプライトを通してシルエットを見るシェーダー
Unityで、これらの例のようなシースルー効果を達成したいと思います。 私の特定のシナリオには、いくつかの要件があります。 スプライトはアルファブレンディングを使用しており、スプライトには透明な領域があります。 キャラクターを遮る2種類の要素があります。1つはシルエット効果を作成し、もう1つは通常のように動作する必要があります。 シルエットを作成する要素を遮蔽するには、ZWriteを有効にし、そうでない要素では無効にします。 キャラクターについては、シェーダーのキューをtransparent + 1に設定して、このパスを追加しました。 Pass { ZTest Greater Lighting Off Color [_Color] } そして、効果は部分的に機能します: シルエットは、透明な部分も含めて、キャラクター全体に描かれます。透明な部分はシルエットを作成しないでください。 シルエットは、スプライトの一部が透明であっても、キャラクターがスプライトの背後にあるときに作成されます。スプライトの透明な部分の後ろにいると、シルエットが作成されません。 キャラクターは、要素の後ろにある場合でも、残りの要素の前に表示されます。これは、キューをTransparent + 1に設定しているためだと思います。ただし、透明のままにすると、キャラクターは正しい順序で描画されますが、シルエットは表示されません。 私は誰かが私に与えたこれらのヒントに従おうとしましたが、私はそれを機能させることができません: 1)スプライトをレンダリングするパスはそのままにします。 2)zバッファーに書き込むパスを追加しますが、clip()を使用してアルファに基づいてピクセルを破棄するシェーダーがあります。z-bufferを使用して、MSAAおよびalpha-toカバレッジを使用せずにソフトzテストを作成することはできません。その品質は素晴らしいものではありませんが、あなたができる最善の方法です。より高速な代替手段は、パターンまたはノイズディザーです。スプライトのエッジがかなり鋭い場合は、古き良きしきい値を使用します。 3)zテストを使用してオクルージョンカラーを描画するオクルード可能なオブジェクトに3番目のパスを追加し、最終パスとして描画されることを確認します。 私は、特にUnityのシェーダーに慣れていないので、適切に機能させる方法がわかりません。

1
ピクセルアートのスケーリングが他の画像と異なるのはなぜですか?
最近、私はピクセルアートゲームを作るのが初めての開発者を指導していましたが、ピクセルアートのスケーリングに関する「従来の知恵」があることに気付きました。だから、ここでそれを修正する試みがあります.... 私は、ピクセルアートを200%、300%などだけスケーリングする必要があると聞きました。120%などの中間サイズではありません。 何故ですか?スケーリングは、他の画像と同じように「機能する」べきではありませんか? 適切なゲームプレイや外観を得るためにキャラクターをほんの少しだけ大きくしたり小さくしたりする必要がある場合はどうすればよいですか?どうすれば修正できますか? 1つのゲームで異なるスケールでピクセルアートを使用するのは「悪い」と言われています-なぜですか? たとえば、各スプライトテクセルが4x4スクリーンピクセルになるようにキャラクターを拡大すると、各スプライトテクセルが6x6スクリーンピクセルになるように背景アートが拡大されます。ピクセルは一日の終わりのピクセルではありませんか?
12 scale  pixel-art 

1
Motion SimulatorプラットフォームでのOculus Rift
現在、既存の(物理的に)大規模なモーションシミュレータプラットフォーム用のVR環境を開発しています。ユーザーはこのモーションプラットフォームに座って加速し、傾けて、研究用カーシミュレーター環境でモーション感を誘発できます。Oculus Riftポジショナルトラッカーは、PCで行うのと同じように、ユーザーの前の移動プラットフォームに既にマウントされています。 現在使用している3DエンジンはUnity 5.3です。プラットフォームの回転角度と直線加速度はすでにUnityに入力されています。しかし、結果は私が目指したものではありません。プラットフォームを傾ける限り回転補正はうまく機能しますが、角速度がゼロになると、トラッカーはリセットされます。線形加速度補正は、常に真の静止点を中心にジッタします。 既に、ネイティブUnity VR実装とOculusプラグインを使用してみました。ただし、センサーフュージョンはこのレベルでは使用できません。Oculusフォーラムにはこの問題に関する多くのトピックがありますが、解決策は見つかりませんでした。 Oculusを移動プラットフォームで使用するために試すことができる代替手段はありますか? 私が理想的にやりたいことは、さらに処理する前に、Oculusセンサーデータから誘導された動きを差し引くことです。私はすでにLibOVRなどのパッチを適用することを検討しましたが、役に立つセンサーフュージョン関連の機能もそこに見つかりませんでした。
12 unity  motion  oculus 

2
ピクセルアートプラットフォーマーを720pから1080pにスケーリングする
私はPCとスマートフォン用のピクセルアート2Dプラットフォーマーを開発していますが、技術的な問題にこだわっています。 32x32タイル解像度と64x64文字スプライト解像度を選択しました。レベルは「スクリーン」と呼ばれるセクションに分割され、各スクリーンには40x23に近似した40x22.5のタイルがあるため、最小解像度は1280x720です。 ゲームでは、ダブルジャンプのメカニックを持っているので、各「スクリーン」に適切な垂直視野範囲が必要です。 ここに問題があります:1280x720はあまり高解像度ではありません。HDモニターでは、ウィンドウは大きくありません。解像度を2倍に拡大すると、2560x1440になり、ウィンドウは実際のHDモニターよりもはるかに大きくなります。1280x720から2560x1440の間のサイズを試してみると、グラフィックが途切れたり、変形したりします。 この問題を解決するにはどうすればよいですか?すべてのタイルとスプライトを16x16形式で再描画する必要がないソリューションはありますか?

2
MMOでサーバー側のすべてのオブジェクトの座標を保存する
MMORPGの場合: 衝突を検出するために、すべての木、茂みなどの座標をサーバー側に保存することは一般的ですか? もしそうなら、そのような膨大な数の座標(データ構造など、パフォーマンスの問題の処理)を保存するための実行可能な方法は何でしょうか? そうでない場合、このタイプの衝突検出は完全にクライアント側で行われ、サーバーはまったくチェックしませんか? または、クライアントが衝突をチェックし、サーバーが検証するという中間的な状況がありますか?もしそうなら、サーバーも同様にサーバー内の座標を維持せずに同じことを検証しますか?

1
OpenGLバインディングとエンティティ間の関係
これは主にドキュメントに関する質問です。これが、プログラマやスタックオーバーフローなどではなく、尋ねるのに適切な場所であることを願っています。 私はOpenGL仕様を読みませんでしたが、書籍(Red Book)やさまざまなチュートリアルから、APIのさまざまなオブジェクトと部分がどのように相互作用し、関係するかを正しく把握できません。 たとえば、VAOがバインドされている場合、VBOをバインドして属性を設定すると、VBOがVAOにバインドされます。 しかし、多くのオブジェクトがあり、それらの関係は異なる場合があります。たとえば、VAOは現在のシェーディングプログラムとはまったく関係ありませんが、描画操作の結果は両方に依存する場合があります。 さまざまなOpenGLコンポーネントすべての中に、A-binds-to-BまたはA-and-B-are-used-by-Cのような関係があります。これらすべての関係は、コンテキストの状態を変更する方法、物事を変更する方法、物事を一緒に保存して最適化する方法を決定することに同意します。 これらの関係だけを説明するリソースを探しています。UMLダイアグラム、グラフ、さらにはテキストドキュメントのように、呼び出しに焦点を当てていませんが、さまざまなOpenGLコンポーネントが相互作用し、相互に関連付ける方法を簡潔に説明します。 そのようなリソースの場所を知っていますか?

4
子孫を介して物語が続くゲーム[終了]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 「ファンタシースターIII:セガジェネシスのドゥームズジェネレーションズ」では、定期的に結婚し、その後、物語はあなたの息子/娘を通して続きます。Rogue Legacyでは、死ぬと再び子孫(IIRC)でプレイします。 私はRPGに取り組んでおり、デスメカニックの同様のコンセプトについて考えています。あなたの戦利品/スキルの一部をあなたの子孫に引き継がせたいので、私は死にたいと思っています。そのようなメカニズムを実装する際の潜在的な設計上の落とし穴は何ですか?私がすでに見ていることの1つは、私がそれをあまりにも罰しすぎると、プレイヤーは十分に罰せずに最後のセーブに戻り、意図的に死ぬということです。 既存のゲームを参照した場合のボーナスポイント(上記の2つを除く)。

1
最適なテクスチャサイズは?
私は最近、プロジェクトにテクスチャパッケージャーを追加しました。これは、次のように、一定量のテクスチャを単一のテクスチャにパックします。 たとえば、これは582x1023ピクセルのサイズです。これらのパックされたテクスチャを追加する目的は明らかにパフォーマンスを向上させることだったので、OpenGL(LWJGLを使用)テクスチャの最適なテクスチャサイズを検索したかったのです。私が見つけたものは、広くサポートされている最大テクスチャサイズはによると、1024×1024であると考えられるということでした。この例のために。明らかに、多くのテクスチャだけがそれよりも大きくなるので、これは奇妙に思えます。ほとんどのグラフィックスカードは、それより大きいテクスチャをサポートしていると確信しています。ほとんどのグラフィックスカードは、たとえば4096x4096のテクスチャ(またはそれよりも大きいかもしれません)を処理できると合理的に期待できますか? 2番目の点に来るには(これがまだ1つの質問としてカウントされることを望みますが、本質的には同じ問題に要約されます):テクスチャのサイズを2の累乗にする必要があります(256x256、512x512、1024x1024、2048x2048、..)次の2の累乗よりも小さいテクスチャをパディングしますか?よると、この質問 2011年から、それは必須ではありませんが、性能や回避マイナーなバグを向上させることができ、この1 2012年からは、あなたは間違いなくパッドのテクスチャをすべきと述べています。ですから、これらの質問は以前に尋ねられたことがわかりますが、答えが変更されたと合理的に日付が付けられており、さらにそれぞれが私の質問に部分的にしか答えていません。他のプロジェクトはどのようにこれを処理しますか? TL; DR:ほとんどのグラフィックカードで処理できるテクスチャサイズはどれくらいですか?最適なテクスチャサイズは何ですか(またはありますか)。テクスチャの幅を次の2の累乗でパディングする必要がありますか?

2
XNA / MonoGameでフレームレートのロックを解除すると、コードの効率がわかりますか?
MonoGameのフレームレートのロックを解除する方法は次のとおりです。 this.graphics.SynchronizeWithVerticalRetrace = false; base.IsFixedTimeStep = false; そして、それをゲームでの更新と描画の効率の基礎として使用します。 解像度では240×160、フレームカウンタを除いて描かれたり更新されて何も私はFPSの値を取得9000に11,000 FPSを。 コードをすべて追加すると、約1,100 FPSになります。 これは、コードがGPUの速度を大幅に低下させている(10倍)ことを示す良い兆候ですか?ゲームは60 FPSで実行されるので、私はまだそれからかなり離れていますが、ロック解除されたフレームレートのどの時点で心配する必要がありますか? GPU:AMD FirePro W5000(FireGL V)

4
大きなMMORPGはどのくらいの頻度で物理学を更新しますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 私の知る限り、ほとんどの大規模ゲームでは固定タイムステップを使用して、安定したシミュレーションを実現しています。 ゲームサーバーについて、どの「フレームレート」を課していますか?または、別の言い方をすれば、どの固定タイムステップを使用する傾向があるのでしょうか? 多くの人が「彼らが逃げることができる限り早く」と言うことを知っています。確立されたMMORPGの直接的な経験がある場合、それがどれくらい速いかを知りたい。

2
なぜzで割るために4番目の座標が必要なのですか?
私はここで応答を読みました: グラフィックスカードは、ベクトルの4番目の要素を最終位置として何をしますか? 「4番目のコンポーネントは、透視投影を追跡するためのトリックです。透視投影を行うとき、zで除算する必要があります。x '= x / z、y' = y / zですが、これは操作ではありませんx、y、zのベクトルで動作する3x3行列で実装できます。これを行うための標準になったトリックは、4番目の座標wを追加し、x、y、zが常にwで除算されることを宣言することですすべての変換が適用された後、ラスタライズ前。 しかし、3x3マトリックスを使用してzで除算できない理由を理解できませんでした。 ただ掛けることはできません 1/z 0 0 0 1/z 0 0 0 1/z 取得するため [x/z y/z 1] ?

4
開発の後半の段階で、ネットワークコードをどのように記述できますか?
私は現在、ゲームの作成の初期段階にあり、最終的にはほとんどの面で改善したいと思っています。 ネットワークコードの作成をスキップして、かなり簡単に実装したまま、つまり追加するだけでゲーム全体を書き直す必要がないようにするにはどうすればよいですか。 何を覚えておく必要がありますか? 物理学/衝突検出、ゲームロジック、データタイプ、アニメーション/レンダリングを互いに分離するコンポーネントパターンがあります。 ネットワークコードがまだ実装されていないクライアントとサーバーを作成して、ローカルでテストする方法を教えてください。 クライアントで何をすべきか、サーバーで何をすべきか?ネットワークコードが終了し、サーバーとクライアント間でメッセージを送信し、遅延などがない場合でもアカウントにメッセージを送信するふりをする必要がありますか? 編集:トップダウンRPGになる予定です。友人のためにサーバーをホストするシンプルなマルチプレイヤーは私が考えていることです。それでも、「サーバーは常に正しい」というアプローチにしたいと思います。 編集2:私は私の心のセットがどうあるべきかについてのいくつかのポインタを探していると思います。すべてのエフェクト/変更を即座に適用するのではなく、キーボード入力やアニメーションなどをどのように処理すればよいですか。うーん、私は結局のところどこかに行く前にネットワークについて適切に読む必要があるかもしれません。

3
LibGDXゲームとApplicationAdapter
新しいLibGDXプロジェクトを作成すると、CoreプロジェクトのメインクラスがApplicationAdapterを拡張します。これがどのように見えるかです。 package com.marimba.apptest; import com.badlogic.gdx.ApplicationAdapter; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.GL20; public class AppMain extends ApplicationAdapter { @Override public void create () { } @Override public void render () { Gdx.gl.glClearColor(1, 0, 0, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); } } したがって、画面を切り替えるためにsetScreenメソッドを呼び出す場合は、ApplicationAdapterをGameに変更する必要があります。それでは、ApplicationAdapterの使用は何ですか?いつ使用しますか?
12 java  libgdx 

2
ゲームループ内でゲームを一時停止する
ゲームループ内では、Pを押すとゲームが一時停止します。つまり、ゲームループは実行されなくなります。問題は、このループが停止した後、ループ自体の中にあったため、ループを再開するためにPを再度押すことができないことです。Pをもう一度押すとループが再び機能するようにするにはどうすればよいですか?
12 game-loop 

2
ロールシャッハインクブロット(別名心理学テスト写真)シェーダー
(ソース:bonnefil.com) この壮大なパターンを自分のゲームに入れたいです。これまでのところ、私は理解しました... 片側を描画してから、左右に2回レンダリングします。 このパターンを片側にレンダリングするにはどうすればよいですか?うーん... 私は助けが必要です。 このためのシェーダーの作成に関する洞察が必要です。 シェーダーフィッティングタスクではないと思う場合は、できれば代替ソリューションをお知らせください! ただし、GPUを使用せずにこれを達成する方法はありません。(rorscach picの準備された写真の束を保存することを提案しない限り)

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