WebGL を使用して GLPoints として巨大な点群 (150 万点) をレンダリングしていますが、当然パフォーマンスの問題が発生します。
したがって、私の最初のアイデアは、画面に描画されるポイントの量を制限することです。特にカメラから離れたポイントは「役に立たない」ため、レンダリングしないでください。
任意の点とカメラの間の距離を計算することでそれを実現しました。私の頂点シェーダーでは、カメラに十分「近い」ポイントのみをレンダリングしたいと考えています。これまでのところ、距離 "s" がカメラとクリッピング プレーンの間にある場合 (したがって負の場合)、それらをスキップしようとします。
if( s < 0.0){
gl_Position = vec4(0.0, 0.0, 0.0, 0.0);
frontColor = vec4(0.0, 0.0, 0.0, 1.0);
gl_PointSize = 0.0;
}else{
gl_Position = ps_ProjectionMatrix * ecPos4;
}
ただし、表示された FPS からわかるように、頂点を完全にスキップする代わりに (見えなくても) レンダリングされます。頂点シェーダー内の頂点を完全に無効化/スキップ/「削除」する方法はありますか?
フラスタム カリングがスピードアップにどのように役立つかがわかります。明確にするために、いつ淘汰を行うべきですか?カメラが動くたびにカリングを再計算する必要があるため、メインループに入れる必要がありますか? しかし、1 Mio をやっています。レンダー ループでの計算はあまり良い考えではないようです。
カメラがポイントとはまったく異なる方向に見えると、これらは WebGl/ハードウェアによって自動的にクリップされる必要があることを正しく理解していますか? それでも、「目をそらす」ことは役に立たない気がします。(FPSが上がらなかった) 誰かもう少し詳しく説明してくれませんか!
私が使用するエンジンには、デフォルトの透視投影マトリックスがあります。明らかに、すべての頂点の座標に影響します。射影行列は自動クリッピングとどのように関連していますか?