2012-01-16 4 views
5

私はメモリにロードされたBSPツリーを持っています。私はまず自分の葉が何であるかを調べます。次に、私はPVSを解読します。それから、私はそのPVSの各地域を行き来し、それが私の錐台の中にあるかどうかを見ます。BSPツリーを正しくレンダリングしていませんか?

これは間違ったレンダリング方法であり、実際にはBSPツリーを横断してレンダリングを行うべきだと言われています。どのように私はこれを正確に行うのですか?私はこれを行うためのさまざまな方法を見てきました。それが私が尋ねる理由です。

たとえば、Quake 3 BSPレンダリングでは、次のように表示されます。 BSPを走査して、カメラのどの葉に位置するかを判断します。 このリーフのPVSを取得して解凍し、PVSを繰り返し、BSPにリーフをマークします。 遠くにあるBSPを横切る ノードにマークが付いていない場合は、それをスキップします。 Camera Frustrumに対してNode Boundary Boxをテストします。 現在のリーフをレンディションリストに追加します

これは現在でも、または少なくとも単純なゲームではまだこれが標準的な方法ですか。 OrgnlDaveとして

+0

前から後へのレンダリングは現在好ましいレンダリングです。ペインタのアルゴリズム(すなわち、圧縮された高帯域幅のzバッファが望ましい前に)にのみ必要であった。フロントツーバックでは、初期のz拒否(z値の決定とチェック以外の多くの作業が行われる前に、あなたが描いたものの背後にあるものは現代のハードウェアでは拒否されます)が可能です。私はもう少し分かったときに私は再びコメントします。 –

答えて

1

は言った:

もしプリミティブを描画

、zバッファの前に配置された画素は塗料やプログラムシェーダが実行されるであろう。しかし、ピクセルがシーンの背後にある場合、ピクセルは拒否されます。背中合わせのような描くような義務はありませんが、パフォーマンスの向上は最悪です。

ただし、ブレンドオブジェクトを使用する場合は、ソリッドオブジェクトごとに1つずつ描画し、前後に並べる必要があります。ちょうど後に置かれたオブジェクトに色を混ぜる必要があるからです。

+0

@OrgnlDaveもそうだ。ピクセル塗りつぶしは高価です。これは共有リソースに書き込みアクセスが必要なパイプラインの1つのポイントです。頂点シェーダは同時に実行してジオメトリリストを同時に生成できますが、Pixel ShaderがカラーバッファまたはZバッファに書き込んでいるときは、一度に1つのプログラムだけが同じメモリにアクセスできます。覆われているオブジェクトのピクセル塗りつぶしを除去し、不透明なジオメトリを背面から前面にレンダリングするため、不明瞭なジオメトリはアルファブレンドに加重されます。 – Dan

関連する問題