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

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

2
別々のスレッドで更新してレンダリングする
シンプルな2Dゲームエンジンを作成しています。スプライトをさまざまなスレッドで更新してレンダリングし、その方法を学びたいと思います。 更新スレッドとレンダリングスレッドを同期する必要があります。現在、2つのアトミックフラグを使用しています。ワークフローは次のようになります。 Thread 1 -------------------------- Thread 2 Update obj ------------------------ wait for swap Create queue ---------------------- render the queue Wait for render ------------------- notify render done Swap render queues ---------------- notify swap done この設定では、レンダリングスレッドのFPSを更新スレッドのFPSに制限しています。さらにsleep()、レンダリングと更新の両方のスレッドのFPSを60に制限するために使用するので、2つの待機関数はそれほど待機しません。 問題は: 平均CPU使用率は約0.1%です。場合によっては、25%に達することがあります(クアッドコアPCの場合)。これは、待機関数がテストおよび設定関数を使用したwhileループであり、whileループがすべてのCPUリソースを使用するため、スレッドが他のスレッドを待機していることを意味します。 私の最初の質問は:2つのスレッドを同期する別の方法はありますか?私は気づいたstd::mutex::lock、それは、whileループではないので、リソースをロックするために待っている間、CPUを使用しないでください。どのように機能しますか?std::mutex1つのスレッドでロックし、別のスレッドでロック解除する必要があるため、使用できません。 他の質問です。プログラムは常に60 FPSで実行されるため、CPU使用率が25%に急上昇することがあるのはなぜですか。(2つのスレッドはどちらも60fpsに制限されているため、理想的には多くの同期は必要ありません)。 編集:すべての返信をありがとう。まず、レンダリングのためにフレームごとに新しいスレッドを開始しないようにしたいと思います。最初に、更新とレンダーループの両方を開始します。マルチスレッディングで時間を節約できると思います。FastAlg()とAlg()という関数があります。Alg()は私の更新objとrender objの両方であり、Fastalg()は私の「レンダーキューを「レンダラーに送信」」しています。シングルスレッドでは: Alg() //update FastAgl() Alg() //render 2つのスレッド: Alg() //update while …

3
画面の一部のみを詳細にレンダリングする
グラフィックスが大きな視野角でレンダリングされる場合(非常に大きなテレビやVRヘッドセットなど)、ビューアは実際には画像全体に焦点を合わせることができず、その一部だけに焦点を合わせることができません。(実際、これは通常サイズの画面にも当てはまります。) 視聴者の目を追跡する方法(ほとんどの場合VRで実行可能です)と組み合わせると、理論的にこれを活用して、グラフィックスを視聴者の焦点から遠ざけ、徐々に細部と解像度を下げて、知覚される品質を失うことなくパフォーマンスを得ることができます。 これを利用できる、または現在開発中のテクニックはありますか?

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

1
複数のモニターでUnityをレンダリングする
現時点では、2つのモニターで実行できるように統一しようとしています。私はいくつかの調査を行いましたが、これは厳密に言えば可能であることを知っています。両方のモニター間で統一してレンダリングするために、基本的にはウィンドウサイズをフラフにする必要がある回避策があります。 私がやったことは、次の画像の3840 x 1080に示すように、両方のモニターの幅を取り込む新しいカスタム画面解像度を作成することです。 ただし、Unityゲームexeを実行しようとすると、そのサイズは利用できません。私が得るすべては以下です: 私のカスタムサイズは一番下にあるはずですが、そうではありません。exeを介してゲームを実行する際に、カスタム画面サイズを統合するために、私が行っていない、または見逃しているものはありますか? 奇妙なことに、ユニティエディター内で、カスタム画面サイズが取得され、ゲームウィンドウでそれを設定できます。 ファイルメニューからゲームをビルドして実行するときに、忘れてしまったことはありますか?誰かがこれまでにこの問題を克服したことがありますか?
11 unity  rendering 

3
スローモーションでの衝突を計算的に緩和していますか?
多くのレーシングゲーム(たとえば、バーンアウトパラダイス)では、衝突が発生しようとすると、ゲームのプレイは自動的にスローモーションに切り替わり、衝突が完了するまでスローシーケンスで続行されます。 これは効果のためだといつも思っていました。衝突の一部を見逃したくない!しかし、私の友人の1人は、衝突が発生したときに必要とされる処理の圧倒的な速度がないことを確認するためにこれが行われることを最近提案しました。 今、私はそれが実際には逆だと思います。衝突が発生すると、多くの詳細がスローモーションで表示されるため、コンピューティングとレンダリングのパイプラインにオーバーヘッドがあると確信しています。 何が正しいですか? スローモーションシーンは、CPU / GPU使用量を増やしますか、それとも減らしますか?

1
高さに基づくボリュームフォグを作成するにはどうすればよいですか?
最近、私はゲームワールドのY位置レベルでボリュームフォグを作成するテクニックを探しています。しかし、私が見つけたすべては、私が探しているものに実際には適合しない、パーティクルシステムまたは組み込みのエンジンフォグを使用して作成されたフォグです。 私の場合、効率的で密度の高い霧が必要です。それはゲームの世界のいたるところにあるはずですが、明らかに、パフォーマンス上の理由から、カメラまたはシェーダーの一部としてしかレンダリングできず、単なる幻想ではありますが、動いているように見えます。それが最良の選択であれば、私はパーティクルシステムを設定し、それをカメラに取り付けて動かすことができます。 したがって、主な質問はまだ残っています-高密度で効率的に機能するボリュームフォグを実装するにはどうすればよいですか? 私が使用している特定のエンジンとしては、Unityです。 私が言っている例として、私が探している効果を持つゲームへのリンクがあります:Astromike
10 unity  shaders  rendering  fog 

1
テクスチャアトラスとアレイテクスチャ:CPUとGPUによる処理の違いと、パフォーマンスへの影響
Unity 5.4(現在ベータ版)は、配列テクスチャ-OpenGLのArrayTextureと同じ無駄に待望の機能(2013年以降)をもたらします。ただし、配列-テクスチャーとテクスチャーアトラスについて少し読んだ後でも、CPUとGPUによるそれらの使用法の技術的な違いを完全には理解できません。 具体的には、CPUとGPUがテクスチャアトラスとテクスチャ配列を処理する方法の主な違いと、最も重要なのは、そのような違いがパフォーマンスとメモリの処理にどのように影響するか(例:テクスチャ配列がテクスチャアトラスよりもパフォーマンスを向上させる方法など)。 Unityの実装に関する技術的な詳細が、残念ながらクローズドソースであるために欠けている場合は、OpenGL.s ArrayTextureに関する回答で十分満足しています。

1
自作のレンダリングシステムにリソースをキャッシュする方法
バックグラウンド: 私は、C ++とOpenGLを使用して、エンティティコンポーネントシステムタイプアーキテクチャ用のシンプルな3Dレンダリングシステムを設計しています。システムは、レンダラーとシーングラフで構成されています。レンダラーの最初の反復を終えたら、シーングラフをECSアーキテクチャーに配布します。今のところ、それは何らかの方法でプレースホルダーです。可能であれば、レンダラーの目標は次のとおりです。 シンプルさ。これは研究プロジェクト用であり、システムを簡単に変更および拡張できるようにしたい(したがって、ECSアプローチ)。 パフォーマンス。私のシーンには、多くの小さなモデルと、多くのジオメトリを持つ大きなボリュームがあるかもしれません。OGLコンテキストからオブジェクトを取得し、レンダリングフレームごとにジオメトリをバッファリングすることはできません。キャッシュミスを回避するために、データの局所性を目指しています。 柔軟性。スプライト、モデル、ボリューム(ボクセル)をレンダリングできる必要があります。 分離。レンダラーを作成した後、シーングラフがコアECSアーキテクチャにリファクタリングされる場合があります。 モジュラー。シーングラフを変更せずに、さまざまなレンダラーを入れ替えることができると便利です。 参照透明度、つまり、いつでも有効なシーンを指定できるため、そのシーンでは常に同じ画像がレンダリングされます。特にこの目標は必ずしも必要ではありません。シーンのシリアル化を簡略化し(シーンの保存と読み込みができるようにする必要があります)、テスト/実験の目的で実行時に異なるシーンを入れ替える柔軟性が得られると思いました。 問題とアイデア: 私はいくつかの異なるアプローチを考え出しましたが、各レンダリングノードのOGLリソース(VAO、VBO、シェーダーなど)をキャッシュする方法に苦労しています。以下は、これまでに考えてきたさまざまなキャッシングの概念です。 一元化されたキャッシュ。各シーンノードにはIDがあり、レンダラーにはIDをレンダリングノードにマップするキャッシュがあります。各レンダーノードには、ジオメトリに関連付けられたVAOとVBOが含まれています。キャッシュミスはリソースを取得し、ジオメトリをキャッシュ内のレンダーノードにマップします。ジオメトリが変更されると、ダーティフラグが設定されます。レンダラーがシーンノードを反復処理しているときにダーティジオメトリフラグを確認すると、レンダラーを使用してデータを再バッファーします。シーンノードが削除されると、イベントがブロードキャストされ、レンダラーは関連するレンダーノードをキャッシュから削除し、リソースを解放します。または、ノードに削除のマークが付けられており、レンダラーがノードを削除する責任があります。このアプローチは、4と5も考慮しながら、最も厳密に目標6を達成すると思います。2は、配列アクセスの代わりにマップルックアップを使用すると、複雑さが増し、データの局所性が失われます。 分散キャッシュ。上記と同様ですが、各シーンノードにはレンダーノードがあります。これにより、マップルックアップがバイパスされます。データの局所性に対処するために、レンダーノードをレンダラーに保存できます。その場合、シーンノードは代わりにレンダリングノードへのポインターを持つことができ、レンダラーはポインターをキャッシュミスに設定します。この種のエンティティコンポーネントアプローチを模倣しているので、アーキテクチャの他の部分と一貫性があると思います。ここでの問題は、シーンノードがレンダラー実装固有のデータを保持することです。レンダラでのレンダリング方法を変更する場合(スプライトとボリュームのレンダリングなど)、レンダーノードを変更するか、シーンノードに「コンポーネント」を追加する必要があります(つまり、シーングラフも変更します)。プラス面では、これは、最初の反復レンダラーを起動して実行する最も簡単な方法のようです。 分散メタデータ。レンダラーキャッシュメタデータコンポーネントは、各シーンノードに格納されます。このデータは実装固有ではなく、ID、タイプ、およびキャッシュに必要なその他の関連データを保持しています。次に、IDを使用して配列内で直接キャッシュルックアップを実行できます。タイプは、使用するレンダリングアプローチのタイプ(スプライトとボリュームなど)を示します。 訪問者+分散マッピング。レンダラーはビジターであり、シーンノードはビジターパターンの要素です。各シーンノードは、レンダラーのみが操作するキャッシュキー(メタデータのようにIDのみ)を保持します。IDは、一般化されたマップ検索の代わりに配列に使用できます。レンダラーを使用すると、シーンノードのタイプに基づいてシーンノードが異なるレンダリング関数をディスパッチでき、IDは任意のキャッシュで使用できます。デフォルトまたは範囲外のIDは、キャッシュミスを示します。 この問題をどのように解決しますか?それとも何か提案はありますか?私のテキストの壁を読んでくれてありがとう!

1
OpenGLでは、「ゼロ状態」レンダリングとは何ですか?
最近の就職の面接で、私は自分の近代的なOpenGLと頂点バッファーオブジェクトを使用したレンダリングについて学びました。なぜなら、私の大学では、即時モードレンダリングを使用する固定関数パイプラインしか教えていないためです。インタビュアーは、VBOが「ゼロステートレンダリング」と呼ばれるものに効果的に置き換えられたと私に簡単に割り込んだので、続けます。 すぐに別のテーマに移り、面接官は忙しいスケジュールのために最後に時間切れになったので、私は後でそれが何を意味するかについて尋ねるのを忘れていました。 その後、オンラインで「OpenGLゼロ状態」と「ゼロ状態レンダリング」を検索しましたが、関連すると思われる結果は得られませんでした。ほとんどがOpenGL状態に関するものだけです。 問題の組織は非常に研究に基づいているため、現在ほとんどサポートされていない拡張機能である可能性がありますか、それとも最先端の性質のために使用される用語が異なる可能性がありますか?

3
何かが消えるのに近づくにつれて、フラッシュ/点滅をより頻繁にする方法を教えてください。
私のゲームでは、敵を倒すと、ヘルスパックやゴールドなどをドロップすることがあります。これには時間制限を設けて、手に取らなければ最終的には消えるようにしたい。ドロップが「死」に近づくほど、アイテムをより頻繁に点滅させたいです。「より頻繁に点滅する」アルゴリズムをどのように実行しますか?

2
ゲーム「Do n't Starve」のように、2.5Dパースペクティブで地形をレンダリングするにはどうすればよいですか?
Terrariaなどの2Dサイドスクローラーゲームを作成した経験がありますが、自分自身に挑戦して、2.5Dの視点を持つゲームを作成したいと考えています。私が模倣しようとしているゲームは、Do n't Starveです。現在、私の焦点は、地面をレンダリングする方法を理解することです。彼らがどのように地面を生成し、それをレンダリングしたかを理解するのに苦労しています。彼らが地面をレンダリングしたと思う方法は、最初にいくつかのペイントプログラムで地面をペイントし、次にその平面イメージを何らかの方法で操作して、奥行きがあるように見せることです。 実際にそのタイプの地形をどのようにレンダリングするかについて、私は完全に混乱しています。地形に次の機能を持たせたい: Do n't Starveの地形のように見える、これはDo n't Starve の地形を示すビデオです 地形は平坦になり、カメラの角度と視点は固定されます ヒントやヒントをいただければ幸いです。よろしくお願いします。 (私は軽量Javaゲームライブラリ(LWJGL)を使用してJavaで作業しています。)

4
エンティティシステムとレンダリング
わかった、これまで私が知っていること。エンティティには、次のような情報を保持するコンポーネント(データストレージ)が含まれています。-テクスチャ/スプライト-シェーダー-など そして、これをすべて描画するレンダラーシステムがあります。しかし、私が理解していないのは、レンダラーの設計方法です。「ビジュアルタイプ」ごとに1つのコンポーネントが必要ですか。シェーダーなしのコンポーネント、シェーダー付きのコンポーネントなど これを行うための「正しい方法」についての入力が必要です。注意すべきヒントと落とし穴。


4
サーフェスが別のサーフェスと正確に重なる原因は何ですか?
あるサーフェスが別のサーフェスとオーバーラップする原因を実際には理解できません。私が作成している3Dエンジンで、私のテクニックはエッジケースで失敗しています。 私の方法は、ペイントするサーフェスを最も遠いものから最も近いものに並べ替えます。近さを判断するために、平均z値を比較しています。ただし、場合によっては、オーバーラップしているサーフェスの平均z値が、オーバーラップしているものよりも高くなることがあります。したがって、より遠い表面が近い表面の上にペイントされます-このような奇妙なレンダリングになります: 見ようとしているのは、立方体の紫色の前面のみですが、赤い側面は紫色のものの上に描かれています。紫色の表面の平均Z値は高く、したがって「遠く」にあります。だから私はこのテクニックが正しいかどうかについていくつかの疑問を持っています。 また、カメラ(原点)から表面までの距離を取得することも試みましたが、ポイントが必要でした。各サーフェスの中央を選択しましたが、すべてのサーフェスが互いに同じ大きさではないため、これが常に機能するとは限りません。 したがって、原点に向かう表面の近さの順序を決定する信頼できる方法は何ですか?
10 3d  rendering 

2
動的に変化するメッシュに泡跡を投影する方法
私は水を作成しようとしていますが、今はメッシュ上に動的に波を発生させています。しかし、今私は私のボートにこれらの波を操作させて、これの上にケルビンウェイクを起こさせたいです。 事実は、異なるパターンを使用して水を生成し、同じパターンを動的に繰り返します。それで、動的に生成されたメッシュ(平面)の上にこれをどのように生成しますか?他のタイル(プレーン)も操作せずに?
10 c#  unity  rendering 

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