2017-03-31 19 views
6

ボクセル表現を三角形のセットとしてレンダリングするためにthree.jsを使用しています。私は500万の三角形を快適にレンダリングしましたが、それは限界であるようです。それをオンラインで見ることができますherethree.jsで3Dテクスチャを使用して何百万ものボクセルをレンダリングする

解像度3でダブリンモデルを選択すると、多くの三角形が描画されます。

screenshot

私は今のところこれを取得するには、すべてのトリックを使用していた(バッファジオメトリ、ボクセルカリング、複数のバッファ)が、私はそれはOpenGLの三角形が達成できる最大量をヒットしていると思います。

通常、大量のボクセルは3Dテクスチャの画像セットとしてレンダリングされますが、2Dテクスチャを3Dテクスチャにハックする方法についてはいくつかの記事がありますが、テクスチャサイズに最大限の制限があるようです。

私はこのアプローチを使用してチュートリアルや例を検索しましたが、何も見つかりませんでした。誰もがこのアプローチをthree.jsで使用していました

+2

私はあなたがそれらを直接表示しようとしていると思います。あなたはおそらく、ある種のLODingシステムを必要とします。距離をより詳細に表示し、遠くに詳細を表示するには何らかの方法が必要です。 [別の深度データベースのビューアがあります](http://potree.org/demo/potree_1.3/showcase/ca13.html)、ズームインするにつれて詳細がロードされます。 「Apparence-> Materials-> Tree Depth」を選択すると、LODが表示されます。 – gman

+0

私に戻ってくれてありがとう。実際には、オクトリーのバリエーションを使用してLODモデル上に構築されています.PotreeはWebベースのビューアを作成するよう促しました。私はこのデータをレンダリングする際にwebglの厳しい制限に達したと思います。 – jonathanbyrn

答えて

6

あなたのシーンは2倍にレンダリングされます。あなたはWEBGL_depth_texture拡張子 - which have pretty good supportを使うことができます - ただ一つのレンダーパスが必要です。拡張機能が利用できない場合、低パーパス - ダブルパスにフォールバックすることができます。

あなたのボクセルの素材は両面です。それは意図的なことかもしれませんが、それは巨額の借り入れを作り出すかもしれません。

デモでは、MeshPhongMaterialと指向性ライトを使用します。これは不必要に複雑な素材です。ジオメトリには法線がないため、照明を使用できません。より単純な消灯材を使用してください。

  • は、前処理、あなたのジオメトリにhttps://github.com/GPUOpen-Tools/amd-tootleようなものを試してみてください。

    あなたの目標は、そのフレームレートが頂点シェーダに拘束されると仮定すると、頂点の膨大な量をレンダリングすることです。プリフェッチ頂点キャッシュと頂点キャッシュに焦点を当てる。

  • 頂点バッファが使用する帯域幅を減らします。頂点は「グリッド」上に配置されているので、頂点の位置を3つの浮動小数点数ではなく3つの浮動小数点数として保存することができ、VBOのサイズを2減らすことができます。あなただけvec3位置よりも多くの属性が必要な場合)

  • は、一般的に、1つの単一のインターリーブVBOを使用する代わりに、ATTRIBあたり1、フラグメントシェーダ

  • が必要とする可変長の量を減らします。

+1

詳細返信ありがとうございます。私のコードのほとんどは、チュートリアルからコピーして、処理時間に影響を与えずに貼り付けられました。コードをリファクタリングして、深度テクスチャに移動し、ジオメトリを前処理することを見ていきます。 – jonathanbyrn

関連する問題