2012-11-23 3 views

답변

13

나는이 페이지에 정보를 조금에서 그것을 알아 냈다. 나는 그것이 조금 다르게 다음에 어떻게 보여 졌는지 생각하지만 개념은 매우 간단합니다.

무슨 일이 일어나고 어떻게 구현하는지에 대한 일반적인 아이디어를 설명 할 수 있습니다 (간결하게하려고 노력할 것입니다). 빛은 모든 방향 (일반적으로 말하자면)에서 주어진 점을 반사하기 때문에 실제로 render-pt와 여러분의 눈 사이에 오는 단일 광선이 아닙니다. render-pt를 떠나 눈쪽으로 확장되는 빛의 원뿔입니다. 눈/카메라의 렌즈는이 광선을 굴절시켜 콘이 확장을 멈추고 다시 수축하기 시작합니다. 완벽하게 초점이 맞춰지기 위해서는 원뿔이 망막/프레임의 한 점에 수축해야하지만, 렌즈와의 특정 거리 (참조 된 페이지의 "초점면"으로 표시되는 거리)에서만 작동합니다. 그것은 실제로 비행기가 아닌 눈을 중심으로하는 구이어야합니다).

초점면 앞에있는 것이 있으면 빛의 원뿔이 더 많이 구부러집니다 : 망막/프레임 앞의 한 지점에 초점을 맞춘 다음 프레임에 도달 할 때까지 다시 확대하기 시작합니다. 더 이상 포인트가 아니라 원입니다. 마찬가지로, 초점 평면 뒤의 점에 대해서는 원뿔이 덜 구부러지고 프레임에 도달 할 때까지 초점이 수렴되지 않습니다. 두 경우 모두 효과는 단일 지점에서 장면이 여러 픽셀에 번지는 것입니다.

구현의 경우,이 아이디어를 머리로 돌려 놓을 수 있습니다. 장면의 모든 점을 여러 픽셀로 렌더링하는 대신 몇 개의 가까운 점을 단일 픽셀로 렌더링 할 수 있습니다. 물론 실제로 일어날 수 있습니다. 인접한 점들로부터 "번짐"한 빛의 원이 겹쳐지기 때문에 각각이 하나의 픽셀에 기여하기 때문입니다. 그래서 여기

내가 그것을 구현하는 방법은 다음과 같습니다 망막/프레임에 눈과 평행 평면 지역 센터 :

첫째, 조리개을 정의합니다. 조리개 값이 클수록 DOF 효과가 더 커집니다. Aperture는 일반적으로 원형에 불과하며이 경우 반경으로 쉽게 정의 할 수 있습니다. 다른 모양은 다른 조명 효과를 초래할 수 있습니다.

"초점 거리"도 정의하십시오. 나는 그것이 실제로 그것의 정확한 기간이라고 생각하지 않지만, 그것은 일들이 완벽하게 초점을 맞출 수있는 눈으로부터의 거리입니다. 현장에 픽셀 아웃을 통해 눈에서 정상과 같은 광선을 캐스팅하여

  1. 시작 :

    각 픽셀을 렌더링합니다. 하지만 장면의 오브젝트와 교차시키는 대신, 눈에서 거리가 선택한 초점 거리와 같은 광선상의 점을 찾고 싶을뿐입니다. 이 점을 픽셀의 초점이라고합니다.
  2. 이제 조리개에서 임의의 시작점을 선택하십시오. 원형 조리개의 경우 매우 쉽습니다. 무작위 극각과 무작위 반경 (조리개 반경보다 크지 않음)을 선택할 수 있습니다. 전체 조리개에 걸쳐 균일 한 분포를 원하거나 중심이나 다른쪽으로 향하게하려고하지 마십시오.
  3. 초점을 통해 조리개에서 선택한 지점의 광선을 전송하십시오.반드시 같은 픽셀을 통과 할 필요는 없습니다. 괜찮습니다.
  4. 평소처럼이 광선을 렌더링합니다 (예 : 경로 추적 또는 가장 가까운 교차점 찾기 등).
  5. 매번 구경의 다른 임의의 시작점을 사용하여 2, 3, 4 단계를 여러 번 반복하지만 초점을 통해 항상 캐스팅하십시오. 모든 광선에서 렌더링 된 색상 값을 합친 다음이 픽셀의 값으로 사용합니다 (평소처럼 필요에 따라 일정한 감쇠 계수로 나누십시오).

각 픽셀에 사용하는 광선이 많을수록 품질이 향상됩니다. 저는 픽셀 당 약 150 개의 광선을 사용해 왔지만 훌륭한 품질은 얻지 못했습니다. 꽤 적은 물음으로 효과를 볼 수 있지만 (50 또는 60 광선과 같음) 이미지에 입자가 생기는 경향이 적은 광선, 특히 초점이 맞지 않는 광선의 경우. 필요한 광선 수는 조리개 크기에 따라 달라집니다. 작은 조리개는 많은 광선을 필요로하지 않지만 많은 번짐 효과를 얻지는 않습니다.

분명히, 이것을 수행하여 작업로드를 크게 늘릴 수 있습니다. 픽셀 당 광선 수를 본질적으로 곱하십시오. 따라서 레이 트레이서에 최적화가 남아 있다면, 이제는 할 수있는 좋은 시간이 될 것입니다 그것. 좋은 소식은 다중 프로세서를 사용할 수있게되면 픽셀의 초점을 찾으면 당황 스럽다는 것입니다.

아래 이미지는 당신에게 무슨 일이 일어나고 있는지에 대한 아이디어를 제공해야하고, 그것을 밖으로 작동하는 이유 정말 눈이나 카메라에 어떤 일이 발생하는지에 해당 될 조금 더 설명. 두 개의 픽셀이 렌더링되고, 한 픽셀은 빨간색으로, 다른 픽셀은 파란색으로 표시됩니다. 눈에서 각 픽셀을 통과하여 초점 "평면"까지 연장되는 점선은 처음에 투영 한 광선으로 픽셀의 초점을 결정합니다. 반투명 한 콘은 각 픽셀을 렌더링하기 위해 무작위로 선택 될 수있는 완전한 광선 세트를 나타냅니다 (픽셀 1은 빨간색 원뿔, 픽셀 2는 파란색 원뿔). 모든 광선이 초점을 통과하기 때문에 각 원추가 초점에 정확히 일치하는 지점에 수렴합니다.

원뿔의 겹치는 영역은 픽셀 1과 픽셀 2 모두로 렌더링 될 수있는 장면의 점을 나타냅니다. 즉, 번들 거리지 않게됩니다. 모든 원추가 초점 "평면"의 한 점이기 때문에 여기에는 원뿔 사이에 겹침이 없으므로이 거리의 점은 단일 픽셀에만 렌더링됩니다. 즉, 완전히 초점을 맞 춥니 다. 그 사이에 초점을 맞춘 "평면"(전방 또는 후방)에서 멀어지면 더 많은 원뿔이 퍼져 나올 수 있기 때문에 더 많은 원뿔이 주어진 점에서 중복됩니다. 따라서 매우 가깝거나 매우 멀리있는 점은 많은 수의 다른 픽셀로 렌더링되는 경향이 있으므로 초점이 너무 흐려집니다.

Model of DOF implementation for raytracing.