5. Light Scattering

이현기·2022년 8월 30일
0
  • 주의 사항
  1. 이 글은 RayTracing:The Rest of Your Life를 공부하며 작성한 글이다.
  2. 모든 사진, 글은 RayTracing:The Rest of Your Life에서 가지고 왔다.
  3. 영어 해석, 이론적으로 틀린 내용이 존재할 경우가 매우 크다. (지적해주시면 감사합니다.)
  4. 글을 쓰는 능력이 매우 안좋으니 이해해주세요. 연습 중 입니다.

Albedo

우리가 여태 만들었던 우리의 프로그램은 이미 surface와 volume으로부터 scatter을 할 수 있게 구현해 봤다. 이것은 흔하게 모델의 surface에 대한 light interacting에 관해서 사용된다. 이거서을 더 자연스럽게 만드는 방법은 probaility를 이용해서 하는 것이다. 먼저 light가 surface에 흡수될 수 있는 가를 판단해야 한다.
light가 scattering의 확률을 AA라고 하자. 그리고 light가 absorbed(흡수)될 확률을 1A1-A라고 하자.
여기에서 A는 Albedo를 뜻한다. Albedo는 하나의 기술적인 용어라고 생각하면된다. 그러나 모든 상황에서 Albedo는 reflection의 비율로 정의가 된다. 이 fractional reflectance(=Albedo)는 color나 발생하는 direction을 바꾸게 된다.

저번 One in weekend에서 사용한 albedo가 의미하는 것을 나타내고 있는 것 같다.

Scattering

거의 Physically based renderer들은 RGB보다 light color에 대한 주파수를 사용한다. 우리는 이것을 고주파수, 중간 주파수, 짧은 주파수의 수학적인 혼합 RGB를 생각함으로써 이해를 하면 된다.
만약 light가 scatter가 된다면 그것은 우리가 solid angle의 면적을 표현한 PDF를 묘사할 수 있는 directional distribution을 가진다. 우리는 이것을 scattering PDF라고 표시한다고 한다. s(direction)s(direction). 그 scattering PDF는 또한 incomming ray의 들어오는 방향에 관한 incident direction에 의해 변경될 수 있다. 우리가 만약 반사된 도로 같은 것을 봤을 때, 다양한 incident direction을 볼 수 있다.
표면의 색깔은 아래의 방정식에 의해 계산된다.

Color=A    s(direction)    color(direction)Color = \int A \; \cdot \; s(direction) \;\cdot\; color(direction)

여기서의 AAss는 view direction과 scattering position에 관하여 영향이 존재한다. 그러므로 그 출력 되는 color의 값은 view direction과 scattering position에 따라 변경된다.

The Scattering PDF

만약 우리가 MC를 기본으로 하는 방정식을 적용 시켜서 위의 statistical estimate를 해본다면

Color=A    s(direction)    color(direction)p(direction)Color = \frac{A \;\cdot\; s(direction) \;\cdot\; color(direction)} {p(direction)}

여기에서 p(direction)p(direction)은 randomly하게 생성된 direction의 PDF를 뜻한다. Lambertian surface을 위해서 우리는 cos 밀도 함수와 같은 특별한 case를 위해서 위에서 말한 formula를 구현해보았다. 위에서 말하는 Lambertian surface를 나타내는 s()s()함수는 cos함수와 비례한다. 여기서 θ\theta는 상대적인 surface의 normal vector를 뜻한다. 우리는 모든 PDF함수가 적분을 하게 된다면 1이 된다는 것을 기억해야 한다. cos함수의 return이 0보다 작으면 즉 음수가 나온다면 s(direction)s(direction)은 0을 return하게 된다. 그리고 hemisphere에 대해서 적분을 진행하게 된다면 값은 π\pi를 나타내게 된다.
먼저 spherical coordinates에 대한 것을 아래에서 살펴보자.

dA=sin(θ)dθdφdA = \sin (\theta) d \theta d \varphi

그래서 아래와 같이 또 표현할 수 있다.

Area=02π0π/2cos(θ)sin(θ)dθdφ=2π12=πArea = \int^{2\pi}_0 \int^{\pi / 2}_0 \cos(\theta)\sin(\theta)d\theta d \varphi = 2 \pi \frac{1}{2} = \pi

그래서 Lambertian surface에 관한 scattering PDF는 아래와 같다.

s(direction)=cos(θ)πs(direction) = \frac{\cos (\theta)}{\pi}

만약 우리는 PDF 함수를 사용해서 sample을 하게 된다면

p(direction)=s(direction)=cos(θ)πp(direction) = s(direction) = \frac{\cos (\theta)}{\pi}

그래서 우리는 위의 식에서 분자와 분모를 정리를 한다면 최종적으로 아래와 같은 식을 얻는다.

Color=A    color(direction)Color = A \;\cdot\; color(direction)

위의 방정식은 우리가 사용했던 original의 ray_color()함수를 나타낸다! 그러나 우리는 일반화를 할 필요가 있다. 그래서 추가의 중요한 direction을 나타내는 ray를 보낼 수 있다. 하지만 이러한 방식은 표준적인 방식이 아니다. 그래서 위의 대안 대신 우리는 읽었던 내용 중에 BRDF를 이용해서 이것을 간단하게 나타낼 수 있다.

BRDF=A    color(direction)cos(θ)BRDF = \frac{A \;\cdot\; color(direction)}{\cos (\theta)}

그래서 우리는 Lambertian surface를 위해서 변경을 한다.


우리는 여기에서 값에 표현에 대한 Lambertian surface에 관하여 이용해서 PDF를 이용하여 sampling을 진행하는 방법을 공부했다. 이 부분을 다시 한번 보면서 공부를 진행해 보자.

profile
안녕하세요!

0개의 댓글