9. Volumes

이현기·2022년 8월 15일
0

RayTracing:The-Next-Week

목록 보기
8/9
  • 주의 사항
  1. 이 글은 RayTracing:The Next week을 공부하며 작성한 글이다.
  2. 모든 사진, 글은 RayTracing:The Next week에서 가지고 왔다.
  3. 영어 해석, 이론적으로 틀린 내용이 존재할 경우가 매우 크다. (지적해주시면 감사합니다.)
  4. 글을 쓰는 능력이 매우 안좋으니 이해해주세요. 연습 중 입니다.

마지막 이론 적인 공부인 챕터 9이다.

마지막 chapter 10은?

이건 마지막 Rendering 최종 sence를 구성하는 것이기 때문에 코딩만 해서 이론적인 공부는 필요가 없다고 생각을 했다. 마지막 이론 공부이니 열심히 해보장.


Ray Tracer에 추가하기 아주 좋은 것은 smoke/fog/mist 효과를 추가하기 좋다. 왜냐하면 이것들은 때때로 volumes 또는 participating media에 호출이 되기 때문이다. 또 다른 기능은 subsurface scattering을 추가하기 좋다. 이것은 물체 내부의 짙은 안개와 같다고 생각을 하면 된다. 이것은 보통 volume이 다른 표면과 다르기 때문에 기존과 다르게 처리를 해주어야 한다. 그러나 하나의 random surface의 volume을 만드는 것은 매우 쉽다. 많은 연기는 볼륨의 모든 지점에서 확률적으로 거기에 있을 수도 있고 없을 수도 있는 표면으로 대체될 수 있다.

volume의 constant Density Mediums

먼저 우리는 volume의 constant density를 확인해야 한다. 하나의 Ray가 volume을 지나갈 때 아래의 그림처럼 그대로 가다가 흩어질 수도 있고 아니면 그대로 통과를 할 수도 있기 때문이다.

가볍고 아니면 얇은 volume을 가지게 된다면 그대로 통과하는 Ray가 더 많아질 가능성이 높다. 광선이 부피를 통해 얼마나 멀리 이동해야 하는지 또한 광선이 통과할 가능성이 얼마나 높은지를 결정한다. 광선은 부피를 통과할 때, 어느 시점에서든 흩어질 수 있다. 볼륨이 밀도가 높을수록, 그럴 가능성이 더 높다. 가능성은 아래와 같이 나타낼 수 있다.

probability=C    Lprobability = C \;\cdot\; \triangle L

위의 식에서의 CC는 Volume에 optical density 즉, 빛이 volume안에 얼마나 있는지에 대해 비례하다. 만약 너가 그대로 모든 미분 방정식을 통과하게 된다면, 난수의 경우 산란이 발생하는 거리를 얻는다. 그리고 만약 distance가 volume 밖으로 나가게 된다면 그것은 hit 판정이 되지 않는다. 일정한 constant volume을 위해서 우리는 단지 밀도를 나타내는 CC와 boundary가 필요하다.

이제 코드를 작성해 보자.

코드에 if문이 진짜 많은 이유는 이 logic에서 Boundary에 대해서 조심스럽게 다루어야 하기 때문이다. 왜냐하면 volume안에서는 어떤 상황이 발생할지 모르기 때문에 상황처리를 다 해준 것으로 보인다. 그리고 코드에서 Ray가 일정한 공간을 벗어나게 된다면 그 Ray는 공간 밖에서도 계속 작용을 한다고 가정을 한다. 다시 말해서 boundary의 모양이 볼록 하다고 가정을 하자. 그러면 이런 상자나 sphere에 대해서는 작동을 하지만 공극이 포함된 작은 도넛 모양을 가진 것에는 연산이 틀리게 된다.


결과

profile
안녕하세요!

0개의 댓글