問題タブ [culling]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
2435 参照

opengl - タイルベースのカリングを使用した遅延レンダリングの概念の問題

編集: OpenCL または計算シェーダーの使用に関するヘルプをまだ探しています。OGL 3.3 を使用し続け、OGL 4.3 と OpenCL 1.2 の不適切なドライバー サポートに対処する必要がないようにしたいのですが、2 つのうちの 1 つを使用せずにこのタイプのシェーディングを行うことは考えられません (ライトとタイル)。GPGPU を使用せずにタイルベースのカリングを実装することは可能ですか?

OpenGL 3.3 で遅延レンダリングを作成しました。現在、ライト パスのカリングは行っていません (すべてのライトに対してフル スクリーン クワッドをレンダリングするだけです)。これには(明らかに)大量のオーバードローがあります。(場合によっては ~100% になることもあります)。このため、ライト パス中のパフォーマンスを改善する方法を検討してきました。(ほぼ) 誰もが考える最善の方法は、スクリーン スペース タイルを使用してシーンを選別することです。これは Frostbite 2 で使用された方法でした。SIGGRAPH 2010 での Andrew Lauritzen のプレゼンテーションを読みました ( http://download-software.intel.com/sites/default/files/m/d/4/1/d/8 /lauritzen_deferred_shading_siggraph_2010.pdf ) であり、その概念を完全に理解しているかどうかはわかりません。(そして、それが他の何よりも優れている理由、そしてそれが私にとって優れているかどうか)

プレゼンテーションで、Laurtizen は、シーンをカリングするためのライト ボリューム、クワッド、およびタイルを使用したディファード シェーディングについて説明します。彼のデータによると、タイル ベースの遅延レンダラーが (群を抜いて) 最速でした。なぜなのかはわかりませんが。タイルごとにすべてのライトがまとめられているという事実と関係があると思います。プレゼンテーションでは、G バッファを 1 回読み取ってからライティングを計算するように指示されていますが、これは私には意味がありません。私の考えでは、これを次のように実装します。

これには、G-Buffer を大量にサンプリングする必要があります。それを行うと、すべてのライトに対して画面に合わせたクワッドをレンダリングするのと同じ(悪くはないにしても)パフォーマンスが得られると思います。言葉遣いからすると、次のようなことが起こっているように思われます。

しかし、一部の GPU でフラグメント シェーダーの命令制限を超えずにこれを行う方法がわかりません。誰でもこれで私を助けることができますか?また、ほとんどすべてのタイル ベースの遅延レンダラーが計算シェーダーまたは OpenCL (ライトをバッチ処理するため) を使用しているように見えますが、これはなぜですか?これらを使用しなかった場合はどうなりますか?

0 投票する
1 に答える
198 参照

actionscript-3 - 回転したタイルマップで画面境界のタイル インデックスを検索する方法は?

通常、軸に沿って配置された (回転 = 0) タイルマップは、画面に表示されているタイルを簡単に反復処理できます。

しかし、タイルマップ全体が回転しているときに、タイル インデックスをどのように「選別」またはフィルタリングするのでしょうか?

ここに画像の説明を入力

: これは、ActionScript 3.0 ( Genome2D 内) のタイル レンダリング クラスを改善するためのものですが、他のコンピューター言語での回答も同様に適用できます。:)

0 投票する
0 に答える
117 参照

hidden - オクルージョン カリング テスト 3d

シェルが平らな三角形 (ポリゴン メッシュ) で表されるボディがあるとします。メッシュは、必要な精度レベルのために数百万のポリゴンで構成されています。さらに、体は凸状ではありません (球体ではありません。体の良い例であるイルカについては、Wiki ページの「ポリゴン メッシュ」を参照してください)。

特定のアプリケーションでは、特定のポイントから見たポリゴンを知りたいです。三角形が見えるかどうかのテストを中心点にすることができることを強調したいと思います。したがって、三角形が見えるか(中心点が見える場合)、または隠される可能性があります。半分しか見えないポリゴンには興味がありません。

そのための良い方法を教えてください。ポリゴンの可視性に関するデータを、画面ではなくメモリ (プログラミング変数-データをさらに使用できるようにするため) への出力として取得したいと思います。

0 投票する
1 に答える
1755 参照

opengl - レンダリングにおける最先端のカリングおよびバッチ処理技術

私は現在、OpenGL レンダリング エンジンのアップグレードと再構築に取り組んでいます。このエンジンは、建築データの大規模なシーン (インテリアのある建物) を視覚化するために使用され、オブジェクトの量がかなり大きくなる可能性があります。どの建物でもそうであるように、壁の中に遮られたオブジェクトがたくさんあり、同じ部屋にあるオブジェクト、または外にいる場合は外にあるオブジェクトしか見えません。これにより、オクルージョン カリングとフラスタム カリングによってオクルードされるべき多数のオブジェクトが残ります。

同時に、レンダーバッチでバッチ処理できる反復ジオメトリが多数あり、インスタンス化されたレンダリングでレンダリングできるオブジェクトも多数あります。

私の見方では、レンダーバッチ処理とカリングを最適な方法で組み合わせるのは難しい場合があります。同じ VBO であまりにも多くのオブジェクトをバッチ処理すると、そのバッチのレンダリングをスキップするために CPU 上のオブジェクトを選別することが難しくなります。同時に、CPU でのカリングをスキップすると、多くのオブジェクトが見えない間に GPU によって処理されます。CPU をより簡単に選別するためにバッチ処理を完全にスキップすると、不要な大量のレンダー コールが発生します。

これらの問題が現代のグラフィックスでどのように解決されるかについて、既存の技術と理論についていくつかの調査を行いましたが、具体的な解決策を見つけることができませんでした。同僚と私が思いついたアイデアは、バッチを互いに比較的近いオブジェクトに制限することでした。たとえば、部屋内または半径 n 人以内のすべての椅子です。これは、oct-tree を使用することで簡素化および最適化できます。

最先端のグラフィックエンジンでシーン管理、カリング、バッチ処理などに使用される手法へのポインターはありますか?

0 投票する
1 に答える
7388 参照

c++ - DirectX 11 前面方向

ラスタライザを作成するとき、ラスタライザの説明を次のように設定しました。

これはうまくいきます。しかし、私がに変わるFrontCounterClockwisefalse。何もレンダリングされません (すべてがカリングされていると思います)。の目的を誤解していFrontCounterClockwiseますか? 予想していたのは、反時計回りではなく、時計回りの面を前面として使用することです。私は何を間違っていますか?

編集: 完全な初期化コードは次のとおりです。

0 投票する
1 に答える
3600 参照

c++ - C/C++ OpenGL オクルージョン カリング

生の OpenGL を試しているので、スキルを向上させるために、3D ブロックに基づいた非常に単純なゲームをコーディングすることにしました。

私が遭遇した最後の問題は、間引きでした。錐台カリングと背面カリングを作成する方法をようやく見つけました。どちらもうまく機能しますが、残念ながら、プレーヤーに近い他のボックスで覆われているボックスを表示しないようにオクルージョン カリングをコーディングする方法がわかりません。

メインの描画ループでテストするためだけに、すべてのボックスをループしています。後でより効率的な方法に変更します。コードは次のようになります。

そしてCube::Draw:

先に述べたように、このコードはすぐに最適化される予定です。今、私はそれを機能させようとしています。bool 変数 showSide は検出用に作成されており、隣に別のボックスがあるボックスがある場合、それらの間の辺は描画されません。

オクルージョンカリングを作成する方法を探してグーグルで検索しましたが、失敗しました。簡潔な情報または理論しかありません。

私の質問は、カバーされたブロックを描画しない方法を教えてくれる人はいますか? 私がコンパイルして挿入した GLEW があると聞きましたが、次の 2 つの行があります。glEndQuery(GL_SAMPLES_PASSED);

どうやらクエリは私の問題を解決するのに役立ちますが、Google でさまざまな方法で使用しようとして失敗しました。最初にキューブが描画されず、次にゲームが以前のように描画され、キューブもカバーされました。