タグ付けされた質問 「rendering」

コンピュータプログラミングによってモデルから画像または一連の画像を生成するプロセス。

2
一部のゲームでは、透明性のために従来のアルファの代わりにディザリングパターンを使用しているのはなぜですか?
最近、私はいくつかの3Dゲーム(例:)で、GTA IVある種の順序付けられたディザリングを使用して、透明度/アルファをシミュレートしています。 ポリゴンは通常のように透明ではありませんが、代わりに透明度をシミュレートするために左から右に徐々に切り替わるディザリングテクスチャをレンダリングします。 この効果は不快ではありませんが、最初は驚くべきものです(従来のアルファブレンディングとは対照的) それが生み出す視覚的な美的効果を除いて、いくつかのゲームがこれを行う理由はありますか(パフォーマンスの向上、帯域幅の節約、または私が考えていない他の何か)? Webで検索しましたが、この手法については何も見つかりません。

1
等尺性レンダリングとピッキング?
私は、ダイアモンド型の世界で等尺性タイルをプロット(world-> screen)およびマウス選択(world-> screen)するための式を探していました。私が試したものは常に、うまくいっているように見えます。これを行うための通常/正しい方法は何ですか?

6
ゲームデータ/ロジックをレンダリングから分離する
私はC ++とOpenGL 2.1を使用してゲームを書いています。データ/ロジックをレンダリングから分離する方法を考えていました。現時点では、描画を実装するための純粋な仮想メソッドを提供する基本クラス「Renderable」を使用しています。しかし、すべてのオブジェクトには特別なコードがあり、シェーダーのユニフォームを適切に設定し、頂点配列バッファーデータを整理する方法を知っているのはオブジェクトだけです。コード全体で多くのgl *関数呼び出しが発生します。オブジェクトを描画する一般的な方法はありますか?
21 c++  opengl  rendering  logic  data 

2
AAAゲームの範囲外
多くの一般的なAAAタイトル(特にソースエンジンゲーム)では、境界外やマップの下の傾斜など、プレーヤーが「未分類」の領域に到達したとき。画面に奇妙な効果が発生します(バッファのティアリング?)。 これは、Windows XPがシステムがハングしている間にドラッグされたウィンドウを後に残す可能性があるウィンドウの軌跡に似ていると説明できます。 画面を更新するときに開発者がカラーバッファをクリアしないと仮定することしかできませんか? あれは正しいですか?もしそうなら、なぜですか?
21 rendering 

3
通常、ゲームの1つのフレームでアクティブなシェーダーをいくつ使用する必要がありますか?100のような5つ以上?
現代のゲームでは、1つのシーンで同時にいくつのシェーダーが通常アクティブになっていますか?複数のシェーダーが使用されており、各フレームでゲームが切り替えられることを知っています。シェーダーを介してオブジェクトを描画することは一般的です。 すべてのオブジェクトをシェーダー1で描画します シェーダー1からシェーダー2に変更する シェーダー2ですべてのオブジェクトを描く それでも、特にシーン全体のグローエフェクト、テクスチャへのレンダリングなどのエフェクトの場合、それほど単純ではないことはわかっていますが、ほとんどの場合、そのように動作すると想定できますか?シェーダーの切り替えは高価な操作であるため、「シェーダーごとのグループ化」アプローチが適しています。 片側からは、シーンを高速でレンダリングするため、シェーダーを多くしすぎることはできません。一方、スキン、金属、水などには、多くの異なるシェーダー(または枝を持つ超シェーダー-非常に似ています)が必要です。 理論的、現代的、三人称のPC用3D探偵ゲーム(重要な場合はDirectX 11)は、いくつの(そしてどの)シェーダーを使用しますか?いくつかの「フレームX」で、アクティブのみをカウントする100個のアクティブシェーダーのように、5、20、またはそれ以上ですか?私はそれが1つの数字ではないことを知っていますが、PCゲームを考慮して、どのような規模と要因が重要なのかと思います。 私のサンプルゲームでは、フレームごとに約9〜11を使用します(別の小さなシェーダーまたは1つの超シェーダーとしてカウントします-今は関係ありません)。 スキンシェーダー アイシェーダー(多すぎない? メタルシェーダー グラウンドシェーダー 雪/雨シェーダー(必要な場合) ウォーターシェーダー(シーンに水が存在する場合) グローシェーダー(一部の特殊効果が含まれる場合のみ) 発光シェーダー(街灯など) 標準シェーダー(他のすべての場合は標準シェーディングのみ) 法線マップ付きの標準シェーダー 2Dシェーダー(GUIなど) それは「たくさん」ですか「あまり多くない」ですか?必要ないくつかの重要なシェーダーを忘れましたか?

2
オールドスクール(偽の3D)レーシングゲームを作成するためのベストテクニックは?
アウトランやロータスエスプリターボチャレンジなど、疑似3Dシーンを使用するオールドスクールタイプのレーシングゲームのレンダリングシステムを開発するための良いアプローチは何でしょうか?無限にスクロールする道路があり、風景のグラフィックが看板アイテムなどのように配置されています。あなたはアイデアを得ると思います。 これらはMode7のような同様の方法で開発されていますか、またはその背後に別の技術がありますか?この手法には、Webで検索できる特定の名前がありますか?Flashでそのようなものを開発する必要があります。
20 3d  rendering  racing 

6
2D UIの処理に使用する座標系は何ですか?
アスペクト比の質問に続いて、2D UIシステムで作業しているときに他の人が使用しているものを聞くことに興味があります(ほとんどの場合、独自のソリューションです)。具体的には、座標系をどのように処理しますか。私の考えでは、3つのオプションがあります。 ハードコードされた座標(例:0-> 720、0-> 576) 正規化された座標(0.0-> 1.0、0.0-> 1.0)、レンダリング前に実際の座標にマッピング 仮想座標(例:0-> 1600、0-> 1000)、レンダリング前に実際の座標にマッピング ハードコードは、固定プラットフォームを使用していて、画面スペースの座標が事前にわかっている場合、またはすべての可能な画面サイズのセットの画面レイアウトを作成する準備ができている場合にのみ有用です。 正規化された座標はいいですが、画面の縦横比が固定されていない場合はあいまいになります(たとえば、ワイドスクリーンで実行した場合、4:3よりも異なる物理座標に0.75がマップされます)。また、作成者にとって、UI要素を(0.2 x 0.2)として宣言するのは本当に直観に反し、レンダリング時に実際に正方形ではないことがわかります。 仮想座標は曖昧ではありませんが、再マッピング段階での正規化座標と同じ問題に悩まされます:小さな10進数の不一致により、1つずれたエラーが発生する可能性があります。 同様に、固定解像度の画面がある場合、正規化された座標と仮想座標の両方は、UIイメージ内のアーティストの細かく作成されたピクセルと画面上のピクセル間の1:1マッピングを保証するのが非常に難しいことを意味します。厄介なスケーリングアーティファクト(画面上のテクスチャ付きクワッドとしてレンダリングしていると仮定)。 特に縦横比の曖昧さを避けるために、仮想座標アプローチを採用しました。16:10画面にレンダリングする場合、UIスペースは(0,0)->(1600,1000)ですが、4:3にレンダリングする場合、使用可能なUIスペースは実際には(133,0)->(1467 、0)。 私が気づいていないより良い解決策はありますか?これら3つのアプローチが抱える問題を最小限に抑えるための良い戦略はありますか?
20 rendering  gui 

4
ゲームで「水中の視界」を防ぐ方法
プレイヤーが水中に行くことができる多くのゲームでは、画面の上半分が空中にあり、画面の下半分が水の中にあるように見えるとき、それはほとんど水が存在しないようで、プレーヤーは...水の音でゆっくりと飛んでいますか? これを解決する論理的な方法はありますか?アルゴリズム?多くのゲームがまだこれを持っているので、解決策がまだ登場していないようです。同じ間違いをしたくありません。

3
レンダリング出力を単体テストするにはどうすればよいですか?
最近、テスト駆動開発(TDD)を採用していますが、開発成果とコードベースの復元力に素晴らしい影響を与えました。このアプローチをOpenGLで行うレンダリング作業の一部に拡張したいと思いますが、これに対する良いアプローチを見つけることができませんでした。 具体的な例から始めて、どの種類のことをテストしたいかを理解します。ある軸を中心に回転する単位立方体を作成し、いくつかのフレームで各フレームが正しくレンダリングされるようにしたいとしましょう。 自動テストケースを作成するにはどうすればよいですか?できれば、キューブをレンダリングするコードを書く前にテストケースを書くことさえできます(通常のTDDの慣例に従って)。とりわけ、キューブのサイズ、位置、および向きがレンダリングされた各フレームで修正します。シェーダーのライティング方程式が各フレームで正しいことを確認したい場合もあります。 私が出会ったこれに対する唯一のリモートで有用なアプローチは、レンダリングされた出力を参照出力と比較することです。これは一般にTDDの実践を排除し、非常に面倒です。 他の必要な要件については進めることができますが、既にリストした要件は手の届かないところにあると思います。

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

4
滑らかな2D照明効果を実現するにはどうすればよいですか?
XNAで2Dタイルベースのゲームを作成しています。 現在、私の雷はこのように見えます。 このように見えるようにするにはどうすればよいですか? 各ブロックに独自の色合いがある代わりに、滑らかなオーバーレイがあります。 ある種のシェーダーを想定しており、周囲のタイルの照明値をシェーダーに渡すことを想定していますが、私はシェーダーの初心者なので、よくわかりません。 私の現在の照明は光を計算し、次にそれをaに渡しSpriteBatch、色合いパラメーターで描画します。各タイルにはColor、色合いに使用される照明アルゴリズムで描画する前に計算されるがあります。 これが現在どのようにライティングを計算するかの例です(左、右、下からもこれを行いますが、このフレームごとに行うのは本当にうんざりしました...) したがって、実際にこれまでに光を取得して描画することは問題ありません! 霧の霧とグラデーション円形オーバーレイを使用して滑らかな稲妻を作成する無数のチュートリアルを見てきましたが、すでに各タイルに稲妻値を割り当てる素晴らしい方法があります。 レビューする 照明の計算(完了) タイルの描画(完了、シェーダー用に変更する必要があることはわかっています) シェードタイル(値を渡し、「グラデーション」を適用する方法)

5
OpenGLでテキストをレンダリングする優先方法[非公開]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Game Development Stack Exchangeで話題になるようにします。 2年前に閉店しました。 大学のプロジェクトのために、コンピューターグラフィックスを再び取り上げようとしています。以前のプロジェクトでは、FTGLと呼ばれるライブラリを使用しましたが、かなり重いと感じたため、満足できませんでした(多くのレンダリングテクニックを試しましたが、テキストレンダリングはあまりうまくスケールしませんでした)。 私の質問は、これのための良い効率的なライブラリはありますか?そうでない場合、高速だが見栄えの良いテキストを実装する方法は何でしょうか?いくつかの用途は次のとおりです。 フローティングオブジェクト/キャラクターラベル 対話 メニュー HUD 編集:できればフォントもロードできます

3
CPU-GPUメモリデータフロー[終了]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 6年前に閉鎖されました。 私は初心者のグラフィックプログラマで、最近疑問に思っています-モデルデータ(メッシュとマテリアル)はアプリケーション(CPUメモリ)からグラフィックカード(GPUメモリ)にどのように流れますか?静的モデル(建物など)があり、一度ロードしてセットアップすると、アプリの有効期間中は変更されません。 そのデータはGPUメモリに一度だけ送信され、永遠にそこに座っていますか? モデルが各フレームで実際にレンダリングされるとき、GPUプロセッサはGPUメモリから毎回そのデータをフェッチする必要がありますか?つまり、2つのモデルをそれぞれ複数回レンダリングした場合、最初のモデルを複数回レンダリングしてから2番目のモデルを複数回レンダリングするか、最初のモデルを1回だけレンダリングし、2番目のモデルを1回だけレンダリングして、そのようにインターリーブし続けましたか?この意味で、この質問を「内部GPUデータフロー」と呼ぶことができます。 明らかにグラフィックカードのRAMは限られています-1フレームのレンダリングに必要なすべてのモデルデータを保持できない場合、フレームごとにCPU RAMから(一部)を取得し続けると思いますが、それは正しいですか? インターネットにはこれに関する本や資料がたくさんあることは知っていますが、このデータフローを管理する方法に関する簡単な一般的なガイドラインがあります(何をいつ送信し、いつ、どのようにレンダリングするか)。 編集: 私は1つの区別をするのを忘れ:ありますGPUにデータを送信し、そこの設定/電流としてバッファを結合。後者はデータフローを引き起こしますか? Edit2: Raxvanの投稿を読んだ後、いくつかのアクションを区別したいと思います。 初期化によるバッファ作成 バッファデータの更新(データがCPUラムに保持されている場合は簡単で、GPUラムに保持されている場合はGPUからCPUラムにフェッチする必要があります) バッファをアクティブとしてバインドします(これは、次の描画呼び出しでこのバッファをレンダリングすることをAPIに伝える方法であり、それ自体では何もしませんか?) API draw call(ここで実際に何が起こるかをお聞きしたい)

5
ゲームロジックスレッドとレンダリングスレッド間の同期
ゲームロジックとレンダリングをどのように分離しますか?ここで正確にそれを尋ねる質問が既にあるように思えますが、答えは私にとって満足のいくものではありません。 私がこれまでに理解していることから、それらを異なるスレッドに分ける点は、ブロックされているスワップバッファ呼び出しからレンダリングが最終的に返される次のvsyncを待つのではなく、ゲームロジックが次のティックですぐに実行を開始できるようにすることです。 しかし、具体的には、ゲームロジックスレッドとレンダリングスレッド間の競合状態を防ぐためにどのデータ構造が使用されているか。おそらく、レンダリングスレッドは、描画対象を特定するためにさまざまな変数にアクセスする必要がありますが、ゲームロジックがこれらの同じ変数を更新している可能性があります。 この問題を処理するための事実上の標準技術はありますか。ゲームロジックを実行するたびにレンダリングスレッドが必要とするデータをコピーするようなものです。解決策が何であれ、同期のオーバーヘッドや、すべてを単一スレッドで実行するよりも少ないものは何ですか?

6
2Dゲームのオブジェクトはそれ自体をレンダリングする必要がありますか?
私はタイルベースではない2Dストリートファイターのようなゲームを作っています。通常、人々はエンティティをレンダリングするレンダラーに与えることを推奨しますが、それ自体をレンダリングするのではなく、逆の方が良いようです、 なぜ一方が他方より優れているのですか? ありがとう
16 c++  rendering 

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