据置デカールの通常の問題


11

私は延期デカールシステムに取り組んできました。ここまでで、投影パーツを完成しました。つまり、シーン内の何かをクリックすると、デカールがオブジェクトの表面に適切に投影されます。

このシステムに追加したいことが他にいくつかあります。通常のクリッピングと通常のマップされたデカールです。通常のクリッピングは、鋭角に引き伸ばされたフラグメントを破棄するときです。見てここに。これを解決する方法は、Gバッファの法線とデカールの法線との間に大きな差があるフラグメントを破棄することです。これには、Gバッファの通常のテクスチャを読み取る必要があります。

デカール法線マッピングを行うには、デカールの法線(法線マップからの)をGバッファの法線とブレンドする必要があります。では、Gバッファの通常のテクスチャに書き込む必要があります。

これら2つの機能をサポートするために、同じシェーダーパスで通常のテクスチャを読み書きする必要があることは明らかです。残念なことに、これは未定義の動作なので、これらの機能を実装する他の方法があるかどうか疑問に思っています。

回答:


1

どのレンダリングシステムを使用していますか?次の情報はすべてのレンダリングシステムに有効ですが、DX11以降のOpenGLバージョンでは、UAVを使用したより良い解決策があるかもしれません。

-

各パスの前に通常のバッファをコピーする必要があります。デカールが同じ画面スペースフラグメントを変更しないことがわかっている限り、コピーを更新する必要はありません。

すべてのデカールを別々のバッファーにレンダリングし、1つの通常のバッファーコピーを使用して通常のバッファーに1回だけブレンドパスを行うこともできます。これは、あなたが持っているデカールの量に合わせてはるかによくスケーリングします。

通常のバッファを書き込まない限り、たとえば通常のクリッピングを実行するだけで、呼び出す場合は、元の通常のバッファをサンプリングできますが、レンダーターゲットとしてバインドすることはできません。

DX9では、最近接ポイントフィルタリングのみを使用し、現在書き込んでいるものとは異なるピクセルを読み取らない限り、同じテクスチャへの読み取りと書き込みを行うと、予期した出力が得られることがわかりました。これは未定義の動作であるため、このように動作しないドライバーやグラフィックカードが存在する可能性があります。DX10は、レンダーターゲットとして現在バインドされているテクスチャーをバインド解除することで、これを防止します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.