web-dev-qa-db-ja.com

GLFW_SAMPLESの選択は実際に何をしますか?

この変数の設定は何をしますか?たとえば、4に設定した場合、それはどういう意味ですか?

「フレームバッファ関連のヒント」セクションにあるglfw.orgの説明(ここを参照: GLFWウィンドウガイド )を読みました。マニュアルには、「GLFW_SAMPLESは、マルチサンプリングに使用するサンプルの希望数を指定します。ゼロはマルチサンプリングを無効にします。GLFW_DONT_CAREは、アプリケーションに優先順位がないことを意味します。」

また、一般的なマルチサンプリングの説明も読みました(ここを参照してください: Multisampling by Shawn Hargreaves)。

マルチサンプリングの意味については大まかな考えがあります。画像のサイズを変更して再描画する場合、画像の再描画に使用するポイントの数は、画像を正確に表現できるように十分に近づける必要があります。同じアイデアがデジタルオシロスコープでも浮かび上がります---正弦波信号をサンプリングしているとしましょう。サンプリングレートがたまたま波の周波数(f)と正確に等しい場合、スコープには定電圧が表示されます。これは、期待している入力信号とは大きく異なります。これを回避するために、ナイキスト定理は、少なくとも2fのレートでサンプリングする必要があることを示しています。だから私はコンピュータグラフィックスでどのように問題が発生する可能性があるかはわかりますが、正確には何の機能かわかりません

glfwWindowHint(GLFW_SAMPLES, 4);は行います。

10
Mike Bell

この変数の設定は何をしますか?たとえば、4に設定した場合、それはどういう意味ですか?

_GLFW_SAMPLES_は、マルチサンプリングを有効にするために使用されます。したがって、glfwWindowHint(GLFW_SAMPLES, 4)は、アプリケーションで4x [〜#〜] msaa [〜#〜] を有効にする方法です。

4x MSAAは、ウィンドウのバッファの各ピクセルが4つのサブサンプルで構成されていることを意味します。つまり、各ピクセルは、いわば4つのピクセルで構成されています。したがって、200x100ピクセルのサイズのバッファーは、実際には800x400ピクセルになります。


画面の4倍の大きさの追加のフレームバッファを作成する場合。次に、フィルターとして_GL_LINEAR_を使用してテクスチャサンプラーとして使用すると、基本的に同じ結果が得られます。 _GL_LINEAR_は問題のピクセルに最も近い4つのサンプルしか取得しないため、これは4x MSAAの場合のみであることに注意してください。

アンチエイリアシングに関しては、MSAAを使用することは非常に効果的ですが、費用のかかるソリューションです。非常にクリーンで見栄えの良い結果が必要な場合は、間違いなくそれが最適です。 4x MSAAは、それを使用することで品質とパフォーマンスのバランスが取れているため、通常選択されます。

パフォーマンスの点でより安価な代替手段は、 [〜#〜] fxaa [〜#〜] を使用することです。これは後処理ステップとして実行され、通常は無料で提供されます。違いは、MSAAがより大きなサイズでレンダリングし、品質を失うことなく、必要なサイズにダウンサンプリングすることです。 FXAAは単純にピクセルをそのまま平均化するのに対し、基本的には画像をぼかします。 FXAAは通常、本当にまともな結果をもたらします。

また、ドライバーはほとんどの場合、デフォルトでそれを有効にします。ただし、使用しない場合はglEnable(GL_MULTISAMPLE)を使用してください。


最後に、まだ読んでいない場合は、 LearnOpenGLのアンチエイリアシング チュートリアルを読むことを強くお勧めします。これは、これらすべての非常に詳細な説明を提供します。

11
vallentin