CS/그래픽스

[홍정모의 그래픽스 새싹코스 Part1] 투명한 물체와 빛의 굴절

겜도리도리 2023. 12. 17. 04:07
반응형

앞서

이 포스팅은 홍정모의 그래픽스 Part1을 수강하고 작성한 내용입니다.

강의의 세부 코드는 첨부하지 않고, 결과와 이론 위주로 포스팅했습니다.

 

개요

 

투명한 구를 그리고자 한다. 아직 투명한 물체를 어떻게 렌더링할 지 코드가 작성되지 않았기 때문에 까맣게만 뜨는 모습이다.

 

투명한 물체에서의 빛의 굴절

 

투명한 구를 바라봤을 때, 구에 들어갈 때 한 번, 구에서 나올 때 한 번, 총 두 번 빛의 굴절이 일어나게 된다.

이때 굴절이 얼마나 일어나는지는 다음 과정을 통해 구할 수 있다.

 

벡터 d가 구로 들어갈 때 이전 강의에서처럼 전반사되는 경우도 있고, 지금처럼 매질이 다른 경우 벡터 t 방향으로 꺾이기도 한다.

굴절된 빛을 t라고 하자.

공기중에서 유리로 빛이 들어가면 밀도가 빽빽해지므로 -n 방향으로 t가 쏠리고

반대로 유리에서 공기 중으로 빛이 들어가면 밀도가 널널해지므로 m방향으로 t가 쏠린다.

이때 벡터 t를 구하는 과정은 다음과 같다.

 

1.  벡터 -d의 벡터 n을 내적해 cos세타1의 값을 구하고, sin세타1의 값 또한 계산한다.

2. 벡터 m은 이전 강의에서 처럼 벡터 -d의 벡터 n 위로의 그림자벡터를 통해 구할 수 있다.

3. 공기에서 유리로 매질 이 바뀔 때 sin세타1 / sin세타2의 값은 1.5이다. 1에서 구한 값을 통해 sin세타2의 값과 cos세타2의 값을 구한다.

3. t의 x성분은 벡터 m, t의 y성분은 벡터 -n을 통해 구할 수 있다. 충돌 지점과 t가 이루는 각의 세타2이므로

t = -n * cos세타2 + m * sin세타2로 구할 수 있다.

 

t를 구했으므로 충돌 지점에서 정규화해 준 t의 방향으로 다시 Ray 체크를 해주면 투명한 물체를 그릴 수 있게 된다.

 

결과

 

구의 굴절률을 0.5로 잡았을 때의 모습.

구 뒤의 배경이 굴절 때문에 뒤집혀서 나타나는 모습을 확인할 수 있다.

반응형