1. ホーム
  2. c

[解決済み】昔々、>が<より速かった頃・・・。待って、何?

2022-04-02 06:55:03

質問

私は、以下の記事を読んでいます。 素晴らしいOpenGLチュートリアル . 本当に素晴らしいです、私を信じてください。私が今いるトピックは、Z-bufferです。それが何であるかの説明はさておき、著者はGL_LESS、GL_ALWAYSなどのカスタム深度テストを実行できることに触れています。また、深度値の実際の意味(どれがトップでどれがそうでないか)もカスタマイズできることを説明しています。ここまでは理解できました。そして、著者は信じられないことを言う。

範囲 zNear は範囲 zFar よりも大きくすることができます。 を構成するという意味で、ウィンドウ空間の値は逆になります。 視聴者に最も近いか最も遠いか。

先ほど、ウィンドウ空間の Z 値が 0 のときが最も近く、0 のときが最も低いという話をしました。 1が最も遠い。しかし、クリップスペースのZ値を否定すると、「1」が最も遠くなります。 深度1が最もビューに近く、深度0が最もビューに近いということになります。 最も遠い。しかし、深度測定の方向を反転させると(GL_LESSから GL_GREATERなど)、全く同じ結果が得られます。つまり、これは単なる という規約があります。 確かに、Zの符号と深度テストの符号を反転させることは、かつて は、多くのゲームでパフォーマンスの最適化に不可欠なものでした。

私の理解が正しければ、パフォーマンス的には、Zの符号を反転させ、深度テストを行うのは、何も < という比較から > を比較することができます。つまり、私の理解が正しく、著者が嘘や作り話をしていないのであれば < から > 以前は 重要な最適化 多くのゲームにおいて

筆者の作り話なのか、私が何か勘違いしているのか、それとも本当に一度 < が遅くなった( 極めて と比べて、著者が言うように > ?

この不思議な問題を明確にしてくれてありがとうございます。

<サブ 免責事項:アルゴリズムの複雑さが最適化の主な原因であることは十分承知しています。さらに、現在では間違いなく何の違いもないだろうと思いますし、何かを最適化するためにこれを求めているわけではありません。ただ、非常に、痛いほど、もしかしたら法外なほど興味があるのです。

どのように解決するのですか?

<ブロッククオート

私の理解が正しければ、パフォーマンス的に、Zと深さテストの符号を反転させることは、<比較を>比較に変更することにほかなりません。つまり、私が正しく理解し、著者が嘘や作り話をしていないのであれば、< を > に変更することは、かつて多くのゲームにとって不可欠な最適化だったということです。

特に重要なことではなかったので、説明しなかったのです。ただ、ちょっとしたトリビアとしておもしろいと思っただけです。特にアルゴリズムについて説明するつもりはなかったんです。

ただし、文脈が重要です。私は、<比較が>比較より速いとは言っていません。私たちは、グラフィックスハードウェアの深度テストについて話しているのであって、CPUについて話しているのではないのです。違う operator< .

私が言及したのは、特定の古い最適化のことで、1つのフレームで GL_LESS で、範囲は [0, 0.5] です。次のフレームでは、レンダリング時に GL_GREATER で、範囲は [1.0, 0.5] です。このように、フレームごとに Z と深度テストの符号を文字通り反転させながら、行ったり来たりします。

これは深度精度を1ビット失うことになりますが、深度バッファをクリアする必要がなく、昔はかなり遅い操作でした。最近は深度クリアが無料になっただけでなく、この手法よりも実際に速いので、人々はもう深度クリアを行わなくなりました。