タグ付けされた質問 「filtering」

1
レイトレーシングでのアンチエイリアス/フィルタリング
レイトレーシング/パストレースにおいて、画像のアンチエイリアスを行う最も簡単な方法の1つは、ピクセル値をスーパーサンプリングし、結果を平均化することです。IE。ピクセルの中心を通してすべてのサンプルを撮影する代わりに、サンプルをある量だけオフセットします。 インターネットを検索してみると、これを行うために多少異なる2つの方法が見つかりました。 必要に応じてサンプルを生成し、フィルターで結果を比較します 1つの例はPBRTです フィルターの形状に等しい分布を持つサンプルを生成します 2つの例は、smallptとBenedikt Bitterliのタングステンレンダラーです。 生成と計量 基本的なプロセスは次のとおりです。 必要に応じてサンプルを作成します(ランダム、成層、低差異シーケンスなど) 2つのサンプル(xおよびy)を使用してカメラレイをオフセットします。 レイでシーンをレンダリングする フィルター関数とピクセル中心を基準としたサンプルの距離を使用して重みを計算します。たとえば、ボックスフィルター、テントフィルター、ガウスフィルターなど) レンダリングから色に重みを適用します フィルターの形で生成する 基本的な前提は、逆変換サンプリングを使用して、フィルターの形状に従って分散されるサンプルを作成することです。たとえば、ガウスの形で分布するサンプルのヒストグラムは次のようになります。 これは、正確に実行するか、関数を個別のpdf / cdfにビニングすることで実行できます。smallptは、テントフィルターの正確な逆累積分布関数を使用します。ビニング方法の例はこちらにあります ご質問 各方法の長所と短所は何ですか?そして、なぜあなたは他の上に1つを使用するのですか?私はいくつかのことを考えることができます: Generate and Weighは最も堅牢であるようであり、任意のサンプリング方法と任意のフィルターの任意の組み合わせが可能です。ただし、ImageBufferの重みを追跡し、最終的な解決を行う必要があります。 フィルターの形状で生成は、負のpdfを持つことができないため、正のフィルター形状のみをサポートできます(つまり、Mitchell、Catmull Rom、またはLanczosはサポートしません)。ただし、前述のように、重みを追跡する必要がないため、実装が簡単です。 ただし、最終的には、メソッド2はメソッド1の単純化と考えることができます。これは、本質的に暗黙的なボックスフィルターの重みを使用しているためです。

1
Metalではミップマップレベルはどのように計算されますか?
私の質問は、特にMetalに関するものです。なぜなら、別のAPIで答えが変わるかどうかわからないからです。 私がこれまでのところ理解していると信じているのはこれです: ミップマップされたテクスチャには事前に計算された「詳細レベル」があり、元のテクスチャを何らかの意味のある方法でダウンサンプリングすることで、より低い詳細レベルが作成されます。 ミップマップレベルは、詳細レベルの降順で参照されます。レベル0は元のテクスチャであり、高レベルはその2のべき乗の縮小です。 ほとんどのGPUは、トライリニアフィルタリングを実装します。これは、各サンプルの2つの隣接ミップマップレベルを選択し、バイリニアフィルタリングを使用して各レベルのサンプルを選択し、それらのサンプルを線形ブレンドします。 私がよく理解していないのは、これらのミップマップレベルがどのように選択されるかです。Metal標準ライブラリのドキュメントでは、lod_options型のインスタンスを指定してもしなくても、サンプルを取得できることがわかります。この引数はミップマップレベルの選択方法を変更するものと思われ、lod_options2次元テクスチャには明らかに3種類あります。 bias(float value) level(float lod) gradient2d(float2 dPdx, float2 dPdy) 残念ながら、ドキュメントではこれらのオプションが何をするのかわからない。bias()自動的に選択された詳細レベルにバイアスがかかると推測できますが、バイアスのvalue意味は何ですか?どの規模で動作しますか?同様に、どのように離散ミップマップレベルlodにlevel()変換されますか?そして、gradient2d()テクスチャ座標の勾配を使用するという仮定の下で動作する場合、その勾配をどのように使用してミップマップレベルを選択しますか? さらに重要なのは、を省略した場合lod_options、ミップマップレベルはどのように選択されるのかということです。これは、実行されている機能のタイプによって異なりますか? また、sample()関数のデフォルトのno-lod-options-specific操作がgradient2D()(少なくともフラグメントシェーダーで)次のようなことをすることである場合、単純な画面空間の派生物を利用するか、ラスタライザーおよび補間されたテクスチャ座標で直接動作しますか正確な勾配を計算するには? 最後に、この動作はデバイスごとにどの程度一貫していますか?古い記事(DirectX 9と同じ)は、複雑なデバイス固有のミップマップ選択について言及しましたが、新しいアーキテクチャでミップマップ選択がより適切に定義されているかどうかはわかりません。

1
パストレーサー-多層材料と重要度サンプリング
現在、モンテカルロパストレーサーを実装しようとしています。私はいくつかの研究を行ってきましたが、材料への一般的なアプローチは、階層化モデルを使用することです。このようなもの: 光が表面に当たると、フレネルは、その光のどれだけが最初の層で反射され、どれだけが2番目の層に行くかなどを示します。 それで、私は似たようなことをしましたが、よりシンプルになりました。鏡面反射の1つのレイヤーと拡散の1つのレイヤーだけです。透過率はまだありません。これまでのところ、拡散反射光には単純なコサイン加重brdfを使用し、鏡面反射にはCook-Torranceマイクロファセットモデルを使用しています。 ここで難しい部分があります:光線が表面に到達したらどうすればよいですか?通常、表面材料に対応するbrdfを選択し、入射光の方向をサンプリングし、brdfを評価し、正しい確率分布関数で除算します。 しかし、ここでは、サーフェスヒットは事実上複数のマテリアルに対応しています。これを処理する素朴な方法は、各レイヤーヒットに対して1回サンプリングすることです。しかし、これは明らかに大きなパフォーマンスヒットの原因であり、私の道が事実上ツリーになります。 より良い解決策はありますか?

2
パストレースでテントフィルターを使用する理由
99行のCパストレーサーSmallptは、レンダリングするピクセルごとに2x2サブピクセルグリッドをレンダリングし、次にテントフィルターを実行してそれらを結合します。 ここでコードを説明する興味深いプレゼンテーションがあり、テントフィルターに言及していますが、なぜ存在するのかは説明していません。 この場合、ボックスブラー(単なるサンプルの平均化)よりもテントフィルターの方が望ましい理由を誰でも説明できますか? バイキュービックエルミート補間など、テントフィルターよりも優れたものを使用する方が高品質でしょうか?

2
異方性フィルタリング(AF)を把握する
最近、テクスチャフィルタリング、つまり最近傍フィルタリング、バイリニアフィルタリング、トリリニアフィルタリング、異方性フィルタリング、MIPマップ、RIPマップなどについて読んでいます。 高レベルの観点からは、異方性フィルタリングを除いて、これらの手法、動作方法、および存在する理由を理解できると思います。異方性フィルタリングは私を混乱させています。 カメラに対してある角度であるサーフェスをテクスチャリングする必要があるという問題を確認できますが、台形のフットプリントをサンプリングすることでこれをどのように解決できるかわかりません(結果は確認できます)。これはおそらく、台形のフットプリントがどのように計算され、テクスチャをサンプリングするために囲まれたテレックスがどのように重み付けされているかを理解していないためです。 Nvidiaによるこの記事では、「テクセルが台形である場合」または「異方性フィルタリングがミップマップの高さまたは幅をテクスチャの遠近歪みに対する比率でスケーリングする」という文を使用することで、さらに混乱します。台形テクセル?MIPmapのスケーリング?これはどういう意味ですか? AFとAFレベルの仕組みを理解するのを手伝ってくれませんか? 私の目標は、OpenGLまたはDirectX AFの実装ではなく、AFが高レベルの観点からどのように機能するかを理解することです。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.