基本的なレイトレーサーがあり、被写界深度を実装したいと思います。私が使用できるリソース、本、コードを教えていただけますか?
ありがとう
このページの少しの情報からそれを理解しました:http://cg.skeelogy.com/depth-of-field-using-raytracing/、特に下部の図。表示方法とは少し違うと思いますが、コンセプトはかなりシンプルです。
何が起こっているのか、そしてそれをどのように実装するのかについての一般的な考え方を説明することができます(簡潔にするように努めます)。光は特定のポイントですべての方向(一般的に言えば)で反射するため、実際には、render-ptと目の間を通過する単一の光線ではなく、render-ptを離れて目の方向に広がる光の円錐です。あなたの目/カメラのレンズは、円錐が膨張を停止し、再び収縮し始めるように、これらの光線を曲げる傾向があります。完全に焦点を合わせるには、円錐が網膜/フレーム上の点に収縮する必要がありますが、これはレンズから1つの特定の距離、つまり参照ページの「焦点面」で示される距離でのみ機能します(ただし、平面ではなく、実際には目の中心にある球である必要があります)。
焦点面の前にあるものはすべて、光錐がさらに曲がります。網膜/フレームの前のポイントに焦点を合わせ、再び拡大し始めるため、フレームに到達するまでに光錐はなくなります。ポイントですが、円です。同様に、焦点面の後ろのポイントの場合、円錐は曲がりが少なくなり、フレームに到達した時点ではまだ収束していません。どちらの場合も、1つのポイントで、シーンが複数のピクセルに塗りつぶされてしまうという効果があります。
実装では、このアイデアを頭に浮かぶことができます。シーン内のすべてのポイントを複数のピクセルにレンダリングする代わりに、近くのいくつかのポイントを1つのピクセルにレンダリングできます。これは、もちろん、「スミア」以降に実際に発生することです。隣接するポイントからの「アウト」ライトサークルはオーバーラップすることになり、したがってそれぞれがピクセルに寄与します。
これが私がそれをどのように実装したかです:
まず、アパーチャを定義します。これは、目の中心で網膜/フレームに平行な平面領域です。絞りが大きいほど、より多くの被写界深度効果が明らかになります。アパーチャは通常、単なる円です。この場合、アパーチャは半径で簡単に定義できます。他の形状は、異なる照明効果につながる可能性があります。
また、「焦点距離」を定義します。それは実際には正しい用語ではないと思いますが、それは物事が完全に焦点を合わせる目からの距離です。
各ピクセルをレンダリングするには:
もちろん、各ピクセルに使用する光線が多いほど、品質は向上します。私はピクセルあたり約150の光線を使用して、まともな品質を実現していますが、品質はそれほど高くありません。効果はかなり少なく(たとえば50または60光線)で見ることができますが、光線が少ないと、特に焦点が非常にずれているものの場合、画像にざらつきが生じる傾向があります。必要な光線の数は、絞りのサイズによっても異なります。絞りが小さいほど多くの光線は必要ありませんが、ぼかし効果はそれほど得られません。
明らかに、これを行うことで作業負荷が大幅に増加し、基本的にピクセルあたりの光線数を掛けます。したがって、レイトレーサーで行う最適化が残っている場合は、今がそれを行う良い機会です。複数のプロセッサを使用できる場合の朗報は、ピクセルの焦点を見つけたら、これが驚異的並列であるということです。
もう少し説明
下の画像は、何が起こっているのか、そしてなぜそれが目やカメラで実際に起こっているのと同等であることがわかるのかを示しているはずです。レンダリングされている2つのピクセルが表示され、1つのピクセルは赤で、もう1つのピクセルは青で示されています。目から各ピクセルを通って焦点の「平面」まで伸びる破線は、ピクセルの焦点を決定するために最初に投じる光線です。半透明の円錐は、各ピクセルをレンダリングするためにランダムに選択できる可能性のある光線の完全なセットを示します(ピクセル1の場合は赤い円錐、ピクセル2の場合は青い円錐)。すべての光線が焦点を通過するため、各円錐は正確に焦点の点に収束することに注意してください。
円錐の重なり合う領域は、ピクセル1とピクセル2の両方にレンダリングされる可能性のあるシーン内のポイントを表します。つまり、塗りつぶされます。すべての円錐は焦点の「平面」上の点であるため、ここでは円錐間にオーバーラップはありません。したがって、この距離の点は1つのピクセルにのみレンダリングされ、完全に焦点が合っています。一方、焦点の「平面」から離れるほど(前方または後方)、錐体が広がるため、任意の点でより多くの錐体が重なります。したがって、非常に近いまたは非常に遠いポイントは、多数の異なるピクセルにレンダリングされる傾向があるため、焦点が非常にずれます。