오늘은 빛의 굴절되는 현상을 알아보도록 하겠습니다.
아래에는 참고하기 좋은 예제입니다.
Introduction to Shading
Scratchapixel is used by 400,000 people yearly, yet no company supports us, not even with free software licenses. There's a global demand for accessible, high-quality education, and if these profitable companies refuse to help, we'll show them they're wron
www.scratchapixel.com
구 모양이 있을 때 위아래가 바뀌고 휘어있는 형태로 나타납니다.
빛이 들어가면 표면에서 굴절되고 안 쪽으로 지나가고
물체에서 나올 때 다시 한번 굴절됩니다.
위 그림은 빛이 물체에 충돌하면 안 쪽에 새로운 굴절 Ray를 만듭니다.
그리고 다시 밖으로 나갈 때 충돌을 감지합니다.
밖으로 나갈 때 충돌값을 이용해 빛의 굴절을 구할 것입니다.
굴절 유도 과정
a · (-b) = - a · b
a · b = b · a
unit vector 기준 a · b = cosθ 이며,
코사인 사인 공식을 사용하면
cos^2θ + sin^2θ = 1
sin^2θ = 1 - cos^2θ
sinθ = sqrt(1 - cos^2θ)
sinθ = sqrt(1 - a · b ^ 2)
sinθ를 구할 수 있습니다.
위에 그림에서
-d 와 n의 각도를 θ1 이라고 하고
-n과 t의 각도를 θ2라고 가정하겠습니다.
물리학자들이 계산한 결과
sinθ1 / sinθ2 는 일정하다는 것을 알아냈습니다.
η = sinθ1 / sinθ2 = 1.5 -> (공기 -> 유리표면)
η = sinθ1 / sinθ2 = 1 / 1.5 (유리 -> 공기)
η = sinθ1 / sinθ2 = 1.3 -> (공기 - >물)
η 는 공기, 물, 유리 등 상황에 따라 숫자가
1.3, 1.5, 1 / 1.5 로 알 수 있는 숫자입니다.
-d는 Ray의 방향 n은 노말벡터로 가정하겠습니다.
일단 -d와 n를 내적해서 θ1을 알 수 있습니다.
cosθ1 = -n · d
sinθ1 = sqrt(1 - cos^2θ1) = sqrt(1 - (-n · d) ^ 2)
그럼 sinθ1를 구했으니 sinθ2를 구할 수 있습니다.
sinθ2 = sinθ1 / η
cosθ2 = sqrt(1 - sin^2θ2)
t = -ncosθ2 + msinθ2
이렇게 t의 방향을 계산하고
굴절 광선을 t 방향으로 쏴주면 굴절을 구할 수 있습니다.
'컴퓨터 그래픽스 > Ray Tracing' 카테고리의 다른 글
Ray Tracing(11) - 빛의 반사 (0) | 2024.07.10 |
---|---|
Ray Tracing(10) - 슈퍼 샘플링 (0) | 2024.07.10 |
Ray Tracing(9) - 텍스처링(2) (0) | 2024.07.08 |
Ray Tracing(8) - 텍스처링(1) (3) | 2024.07.08 |
Ray Tracing(7) - 무게 중심 좌표계 (0) | 2024.07.05 |