カバレッジ-アルゴリズムの欠陥-その使用を取り除く方法は?


10

前書き

メインラインのベクターグラフィックスレンダリングエンジンの多くには、アルゴリズム上の欠陥があります。これらは、各シェイプを個別にレンダリングし、ピクセルカバレッジを計算してアンチエイリアスを作成してから、それらを重ね合わせます。はい、それは簡単ですが、正しい解決策はさらに簡単です。

これは、透明度によってカバレッジを膨らませるので、融合の問題につながります。アルファブレンディングは、状況を正確に表さないルールに従います。たとえば、50%カバーされているピクセルが、50%補完カバーされているピクセルに隣接している場合、100%のカバレッジではなく、75%のカバレッジになります。 。これがどのように見えるかは、アルゴリズムの調整方法やその他の詳細によって異なりますが、本質的にはこれは既知のエラーです。誰かが、さまざまなエンジンエラーを文書化し、それをどのように改善できるかを示す論文を書くという困難を乗り越えました。

ここに画像の説明を入力してください

画像1:完全に代表的ではないサンプル。上の行に拡大されたエラーを示す三角形でできた形状をレンダリングしたサンプル。SVGソース

この問題には、単純な単純な解*があり、カバレッジ計算を行わずにスーパーサンプルを使用して、画像をフィルターで絞り込みます。おまけとして、ボックスフィルタリングよりも優れた画像再構成アルゴリズムを使用できます(「ピクセルは正方形ではありません3」を参照)。現在のソリューションと同等の速度を持つソリューションもあり、これらのソリューションはハードウェアラスタライゼーションパイプラインで実行する方がはるかに簡単です(この問題を回避するために構築されているため、GPUでこのエラーが表示されることはほとんどありません)。

これもコストがかからない問題ではありません。グラフィックデザインに携わっている多くの人が、この問題を手動で回避するために重要な時間を費やして、ここでオーバーラップがあり、オーバーラップがないことを確認して、コンピューターがそれらの問題を修正するようにします。そして多くの場合見事に失敗します。しかし、クライアントはなぜエラーがそこにあるのか気にせず、修正する必要があります。

質問

エラーはどのように伝播しますか?それらはすべて同じエラーを実行しているため、アルゴリズムに同じソースを使用していると結論付けることができます。デザイナーがこのアルゴリズムを選択した原因は何でしょうか?3Dプログラマーだけがこのエラーを認識し、2Dプログラマーが認識しなかったのに、APIと教育でその部分を成文化したのはなぜですか?

このエラーがそれ以上伝播しないようにする方法を教えてください。


補遺(これについては質問していません)

*どうやら、スーパーサンプリングは問題なく機能するという私の主張は並外れており、並外れた証明が必要です。スーパーサンプリングが機能するためのは、スーパーサンプリングがカバレッジ処理を行わないことです。本質的に、スーパーサンプラーは各サンプルをポイントサンプルとして扱います。ポイントサンプルは、基になる領域を想定していないため、アルファ比較が発生しない場所では発生しません。

答えの1つで説明されているように、それが一貫して機能するために。一貫性を保つために、サンプルを整数サンプリングで処理する必要があります。これにより、一度スクリーンスペースに変換された各ポイントが、等しい座標に対してまったく同じソリューションを取得し、サンプルがピクセル境界によって2回シェーディングされないことが保証されます。これを行うには、サンプルが左下のサンプルである場合、サンプルがピクセルをトリガーしない可能性があります(したがって、正確なエッジは> vs <=で処理されるというルールを作成します)。1つを除くすべてのコンソールグラフィックカードは、このように機能します。これにより、余分なデータをキャッシュしたり、近くで追加のテストを行ったりする必要がなくなります。このソリューションは、カバレッジベースのソリューションよりも安定しており、より一般的で一貫しています。

アルゴリズムは元のコードとまったく同じで、コードが少し少なく、サンプルが少し多くなっています。したがって、カバレッジベースのアルゴリズムと同じかそれ以上ではありません。これは、グラフィックスカードだけでなく、他のほぼすべての信号処理分野で古くからこのような方法を使用してきたためです。

この方法には欠点がありますか?まあ、単純な仮定をすると、少し遅くなります。理論的には、カバレッジラスタライザよりも速い漸近的な振る舞いをします。レイトレーサーのように、典型的なシーンではまだ同等です。また、畳み込みベースのエフェクトの使用を実装するのがより困難になる可能性があります。


仕事が終わったら、記念品の写真を追加します。結局、これはグラフィックス処理です。視覚的に解釈されます
joojaa

回答:


6

スーパーサンプリングは、単純に行うと計算コストが高くなります。たとえば、ディスプレイのピクセルサイズの半分を使用する場合、メモリとバンド幅の4倍が必要になるためです。ウィキペディアはこれに言及し、また可能なスーパーサンプリングを可能な解決策として挙げています。しかし、それによってアルゴリズムははるかに洗練され、複雑になり、実装が困難になります。

そして、それがあなたが探している理由だと思います:より多くのメモリと実行時間を必要としないアルゴリズムが必要な場合、物事は素朴な「透明性」アプローチよりもはるかに複雑になっています。


実際にサンプルを保存する必要はありません。必要なのは、ラスタライズ設定を保存することだけです。カバレッジベースのメソッドもそれらを格納しないため、これは後戻りではありません。単純な方法は、理解しやすく、優先度ベースのサンプリングを簡単に実行できるため、提示されています。また、カバレッジベースのソリューションをGPUに移動する場合は、多くの追加作業を行う必要があり、そのモデルとの互換性がなくなります。
joojaa

@joojaa:「ラスタライズ設定を保存する」とはどういう意味なのか、20ページを超える科学論文を掘り下げる必要がないようにアプローチを説明しているリンクを教えてください。
Doc Brown

各ピクセルは互いに独立しているので、ピクセルの実行中にサンプルを保存するだけでよいので、この後にサンプルを安全に破棄できます。より高次のフィッターを使用する場合は、限られたビューしか保存できません。したがって、実際に行う必要があるのは、処理コアにメモリを割り当てることだけなので、おそらく(スレッドあたり16〜256バイト)
joojaa

申し訳ありませんが、ボックスフィルタリングを行う場合は、サンプルを保存する必要さえありません。移動/移動平均の式を使用するだけで、個別のサンプルを保存する必要がありません
joojaa

@joojaa:わかりません。まず、関連するすべての形状(おそらく数百または数千)のサンプルを計算し、その後、ラスター表示にフィルターをかける必要はありませんか?
Doc Brown、

6

スーパーサンプリングは一般的に問題を解決しません。それは単にそれを目立たなくするだけです。ピクセルのサイズが半分の場合、問題は半分ほど顕著になりますが、なくなることはありません。

これらのデザインの背後にあるアーキテクチャ上のポイントは、「render triangle ABC」コマンドに明確な意味を持たせたいということです。描画コマンドのコレクションの一部と見なされる場合を除いて、あいまいにならないようにします。たとえば、「レンダリングトライアングルBCD」もコレクション内にある場合に1つの意味(同じまたは異なる色)を持ち、そうではありません。

たとえば、1,000個の三角形を考えると、ABCと1つの辺または1つの辺の一部を共有するすべての三角形を見つけることは、計算的に重いです(1000回再実行する必要があることを思い出してください)。他にも多くの実用的な問題があります。特に、新しい追加のリクエストのために再評価する必要がある場合に備えて、元のレンダリングリクエストは、かなり前に描画された場合でも、保持する必要があります。

結論として、完全に一貫したソリューションは実用的ではないということです。疑問が残っています。可能な場合は、現在の状況を改善しようとする必要がありますか?一般に、その質問への答えは「いいえ」です。モデル自体に図に示した制限がある場合でも、モデルの完全に一貫した実装は常に優れています。代替手段は、特定のケースでこれら2つのうちどちらが保持されるかをプログラマが知る方法がない、場合によってはうまくいく場合もあれば、そうでない場合もあります。さらに、プログラマーが行った小さな変更の結果として、またはプログラマーの制御外の変更の結果としても、「より良い」から「より良くしない」にジャンプする可能性があります。プログラミングの文脈では、予測可能性ははるかに優れています。


これは、私のスーパーサンプリングがカバレッジ計算を行わない場合のカバレッジ計算の問題です。問題を減少させるだけでなく、rea答えに収束するため、問題はありません。これを証明するためにいくつかのコードが必要ですか?これがグラフィックカードの動作方法であり、この問題は発生しません。そうでなければ、あなたが見るすべてのゲームが問題を示すでしょう。それは誤った論理に基づいているので、私はこの答えを買っていません。
joojaa

@joojaaゲームは、アンチエイリアスを行わないか、アンチエイリアスにスーパーサンプリングを使用します。これにより、通常4つのレベルのアンチエイリアスが提供されます。これは、アンチエイリアスで約64レベルが必要なプレゼンテーション品質のグラフィックには十分ではありません。したがって、ゲームは1つの問題を別の問題と交換します。
ピートカーカム2016

@PeteKirkhamは設定に依存しますが、一部のガムンではサンプル量を指定できます。とにかく、ボックスフィルタリングよりも高次のフィルターを使用する場合、プレゼンテーションレベルAAを生成するために16を超えるサンプルは必要ありません。私の例では、エラーのない画像は、ハードウェア再ラスタライザ内のスーパーサンプリングによって行われていることに注意してください。
joojaa
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.