CS/그래픽스

[홍정모의 그래픽스 새싹코스 Part1] 빛의 반사

겜도리도리 2023. 12. 15. 14:08
반응형

앞서

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

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

 

개요

 

위 이미지의 구에 반사 효과를 주고자 한다. 반사 효과를 넣게 되면 아래 배경도 비춰질 것이고, 옆의 구 또한 비춰질 것이다.

 

반사 효과

 

어떤 충돌 지점 hit가 있을 때, d는 관측 지점에서 hit까지 오는 벡터이고 n은 hit에서의 노말벡터라고 하자.

우리가 구해야 하는 것은 d가 hit에 도달한 뒤, 같은 각도로 반사되는 벡터 r인데, r은 2m -d로 구할 수 있다.

m을 구하는 방법은 -d의 n 위로의 그림자 벡터를 구하고, d와 그림자 벡터를 더하면 m을 구할 수 있다.

 

위 과정을 거치면 r 벡터를 구할 수 있고, hit 지점에서 다시 r 방향으로의 광선 충돌을 검증한 뒤, 반사율에 따라 색깔을 더해주면 반사 효과를 구현할 수 있다. 반사를 검증하는 횟수는 recurseLevel로 잡아주었는데, 여기서는 5번 정도 반복했다.

따라서 반사되는 물체가 2개 이상 있다면, 그 물체끼리 서로 반사를 하기 때문에 반사되는 물체의 자신의 모습 또한 자신의 표면에 그려지게 된다.

결과

 

두개의 구 모두 반사율을 50%정도로 설정해보았다. 두 구 모두에서 바닥이 반사되는 모습을 볼 수 있으며, 서로 뿐만 아니라 자기자신까지도 비춰지는 장면을 확인할 수 있다.

주의점

 

반사광을 hit에서 쏴줄 때, 조금 이격시킨 상태로 쏴주어야 한다. 조금 이격시킨 상태에서 쏘지 않는다면 위 이미지와 같이 hit 지점마다 반사를 확인할 떄 자기 자신을 반환하는 경우가 생겨 반사효과가 정확하게 나오지 않을 수 있다.

반응형