誰かが二重輪郭を説明できますか?


9

私はボクセルレンダリングを理解しようとし、デュアルコンターリング(DC)を検討してきました。

これまでのところ私はこれを理解しています:

  1. グリッドポイントのセットに対して密度関数を実行します(つまり、ノイズ関数)
  2. グリッドのどのエッジにエンドポイント間の変更が含まれているかを見つける
  3. これらのエッジから交差点(つまり、ベクトル)を作成します

これが私が行き詰まっているところで、次は法線を生成することですが、どうやって?このトピックを見ると、この画像は通常トリミングされます。

                                                   Hermiteデータでタグ付けされたエッジを持つ署名付きグリッド

研究を行うと、法線は等値面から生成されることが示されます。ノイズから等値面、法線に行くと思うのは正しいですか?もしそうなら、各ステップをどのように達成しますか?

私の理解では、次のステップはDCペーパーの次のとおりです。

符号の変化を示す各エッジについて、エッジを含む4つの立方体の最小化する頂点を接続する四角形を生成します。

この見積もりは上の画像で表されていますか?

最後に、次のステップは、交点と法線を使用してQEFを実行することです。これにより、頂点データが生成されます。これは正しいです?


私はこのプロセスを理解しているので、...ノイズ>点群>等値面>法線...のようなものですが、このプロセスを適切に説明できると主張するほどスマートではないので、答えを試みません。
戦争

回答:


3

法線は、エッジとサーフェスの間の交点を取得すると同時に、密度関数の勾配に基づいて生成されます。球のような単純で閉じた形の場合は、法線を分析的に計算できますが、ノイズがある場合はサンプルを取得する必要があります。

次のステップの順序が間違っています。最初に、符号の変化を示す各セルの頂点を生成します。最小化するQEFは、そのセルの交点/法線のペアによって定義される各平面までの合計距離です。次に、符号の変化を示すエッジをウォークスルーし、4つの隣接する頂点(最後のステップで生成されたことが保証されている)を使用して四角形を作成します。

今、これを実装する上で私の最大のハードルはQEFを解決することでした。実際に、GPUで(たとえば)並列に実行できる単純な反復ソリューションを思い付きました。基本的に、頂点はセルの中心から開始します。次に、頂点から各平面に取られたすべてのベクトルを平均し、その結果に沿って頂点を移動し、この手順を固定回数繰り返します。結果に沿って約70%移動すると、最小限の反復で安定します。


それで、サインの変化を示すことがわかっているセル/ボクセル(つまり、MCのようなケース)があるとします。セルの8隅ごとにノイズ関数を実行して、その密度を見つけました。これから理解できないのは、QEF の変数xn、およびpをどのように見つけるかです。
Soapy 2014

xは頂点の位置です。各交点には、p(位置)とn(法線)があり、これが私が話していた平面を構成しています。
jmegaffin 2014

pは、エッジに沿った2つの密度の加重平均がゼロである場所を見つけることによって求められます。次に、pでの密度関数の勾配を使用してnを計算します。
jmegaffin 2014

だから、基本的には各キューブのために、私は計算したpをし、nは、それぞれ12本のエッジについて、その後、各セルのQEFを実行するエッジのpをし、n個Xあなたの例ではで開始するボクセル/セルの中心にありますか、?次に、4つのセルが同じエッジを共有する場合、4つのセルxを接続するクワッドを作成しますか?そして、結果の四角形は私の多角形データですか?
Soapy 2014

すべてのエッジが交差するわけではないため、12平面のQEFを必ずしも解決する必要はありません。それ以外にあなたはそれを手に入れました!
jmegaffin 2014

1

2ページまでの論文を読むと、ボリュームの重みは、通常のマーチングキューブスタイルのアルゴリズムが好むキューブ自体の重みではなく、グリッドの隅に格納されているように見えます。これらのコーナーの重みは、2つのコーナー間のエッジに沿って、コーナーからコーナーへの符号の変化があるポイントを定義します。符号が変化するエッジには、OPの2D表現の角度付き線であるエッジの法線も格納されます。その通常の情報は、マーチングキューブスタイルアルゴリズムで期待されるような等値面が生成された後ではなく、ボリュームの作成中に(編集ツールまたは手続き型ボリューム作成メソッドが使用されている場合)定義されます。この通常のデータは、ポイントを通過するライン/サーフェスが事前定義された通常の値を持つ必要があることを「述べています」。マーチングキューブがその点で線を曲げて隣接するエッジの別の点と一致する場合、拡張マーチングキューブとデュアルコンターリングはどちらも、線上の点を通過する線/面と交差するまで線/面を延長します。正常値が異なる隣接エッジ。これにより、基本的なマーチングキューブアルゴリズムが表面を多少丸めるボリュームデータから鋭い角を作成できます。QEF(二次誤差関数)がこれにどのように作用するのか私はよく理解していません。ただし、コーナーが配置されるキューブ内の拡張ポイントを計算するのが簡単になるようです。拡張マーチングキューブとデュアルコンターリングは、どちらも、通常の値が異なる隣接エッジのポイントを通過するライン/サーフェスと交差するまで、ライン/サーフェスを延長します。これにより、基本的なマーチングキューブアルゴリズムが表面を多少丸めるボリュームデータから鋭い角を作成できます。QEF(二次誤差関数)がこれにどのように作用するのか私はよく理解していません。ただし、コーナーが配置されるキューブ内の拡張ポイントを計算するのが簡単になるようです。拡張マーチングキューブとデュアルコンターリングは、どちらも、通常の値が異なる隣接エッジのポイントを通過するライン/サーフェスと交差するまで、ライン/サーフェスを延長します。これにより、基本的なマーチングキューブアルゴリズムが表面を多少丸めるボリュームデータから鋭い角を作成できます。QEF(二次誤差関数)がこれにどのように作用するのか私はよく理解していません。ただし、コーナーが配置されるキューブ内の拡張ポイントを計算するのが簡単になるようです。

ここでは、OPの表現で描かれているように、ここでは2Dの意味で線とエッジについて話していることに注意してください。ボリュームメッシュを生成するために、これを3Dに拡張するには、もう少し読んで考える必要があります。

法線を生成する方法についての質問の後半に対処し、ノイズドリブンの手順の観点から考えると、ボリュームをノイズデータで満たし、符号の変化のあるエッジを探し、4つのキューブを調べるように思われます。エッジを共有して、どの三角形が生成されるかを把握し、頂点を共有する各三角形の法線の平均を取って、複数の三角形の他の交差と同じように頂点法線を計算します。紙は主にCSG操作とスキャン変換されたメッシュから生成されたボリュームを扱っているため、これは私の推測では非常に推論です。

少なくともこの回答の最初の部分で、基本的なマーチングキューブとはかなり異なる方法で重量データを表現および使用する方法の違いに対処し、ボリューム生成プロセスのかなり早い段階で通常のデータを作成する必要がある理由を説明します。基本的なマーチングキューブでは、通常、法線はメッシュ生成プロセスの最終段階として作成されます。

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