2016-04-14 17 views
1

ちょうど一般的なガイダンスを探して、それは非常に長い時間を過ごして以来、私は何か3Dとフィーリングがたくさん変わったので、おしゃべり3Dレンダリングのパフォーマンス/パイプラインの詳細レベル(LOD)メッシュのための3つの

私は、ブラウザでレンダリングする必要がある現実の地形スキャンから生成された非常に詳細な3Dモデル(それぞれ3M +の顔)を多数持っています。それらは「不規則」であり、グリッド/ DEMなどからレンダリングすることはできません。

モデルを小さなオブジェクトに分割し、オブジェクトごとに3つのレベル(3つのレベル)を生成し、共通の頂点セットと3つのインデックスバッファを作成しました。

私は、カメラからの距離に基づいてオブジェクトごとにLODを指定することによって、フレームを500k〜1Mポリゴンの間のどこかにレンダリングするつもりです。

私の質問は、どのようにこれらのレベルを効率的に切り替えるのですか?

データがGPUに送信されるときに、フレームレートで自然にバンプとグリッチを生成する単純なアプローチを試しました。しかし、私は、すべてのデータ(頂点と3つのインデックスバッファ)をGPUメモリに送り、特定のインデックスバッファ、つまり低解像度のバッファを使ってレンダリングしてから、medまたはhighに切り替える方法を探していましたresバッファに保存されます。

Three.LOD()ソリューションは、私の素朴なソリューションと同じfpsグリッチを生成するだけなので、私にとってはまったく役に立たないようです。

ただし、一般的なガイダンスに感謝します。乾杯!

答えて

4

カメラからの距離に基づいてオブジェクトの詳細レベル(LOD)を効率的かつスムーズに変更したいと考えています。

ユースケースを考えると、オブジェクトごとに、詳細レベルの3つをすべて含むBufferGeometryを作成する方法があります。つまり、「インデックス付き」バッファジオメトリを使用し、共有頂点の配列を指定し、3つのインデックス配列を1つにまとめることになります。

次に、BufferGeometrydrawRangeプロパティを設定して、必要なLODの面をレンダリングします。

geometry.setDrawRange(startIndex, count); 

幾何

一旦GPUにプッシュされ、変化LODは、単に平滑絹のようでなければならない drawRange、均一に、変化の問題です。

three.js r.75

+0

ありがとう。概念的には思っていたのとほぼ同じですが、このメソッドはThree.js APIから廃止されているようです。私は最新の同等物が何であるか、完全にはっきりしていないのですか? –

+0

ソースコードを確認しましたか? – WestLangley

+0

ありがとう、これを試してみるのに数日かかりましたが、そのトリックをするようです。乾杯! –

関連する問題