CS/그래픽스

[홍정모의 그래픽스 새싹코스 Part1] 그림자 넣기

겜도리도리 2023. 12. 10. 11:20
반응형

앞서

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

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

 

개요

 

광원과 구에 의해서 생기는 그림자를 아래 사각형에 그려줘야 한다.

 

그림자

여기서는 물체에서 다시 광원으로 Ray를 쏴주는 방식으로 구현한다.

관측지점에서 각각 픽셀의 월드좌표에 Ray를 쏴주면 제일 먼저 충돌한 오브젝트를 찾을 수 있다.

그 충돌 지점에서 다시 광원방향으로 ShadowRay를 쏴준다.

ShadowRay의 시작점은 충돌지점(hit.pos), 방향은 광원 방향(light.pos - hit.pos)이 될 것이다.

이때 충돌지점에서 바로 시작하면 자신과 충돌했다고 판별할 수 있으니 시작 위치를 광원 방향으로 조금 당겨준다.

 

여기서 다른 물체와 충돌한다면 (즉, hit.d가 0.0f보다 작다면) 물체 고유의 색상(여기서는 광원에 영향을 받지 않는 amb 색깔)으로 보여주고, 충돌하지 않는다면 정상적으로 빛을 받으므로 앞서 구현했듯이 diffuse와 specular값을 모두 더해서 보여주면 된다.

결과

 

광원의 위치에 따라 그림자가 잘 지는 것을 볼 수 있다.

다만, 이 방법은 부하가 심하기 때문에 실제 그래픽스 파이프라인에서는 다른 방식으로 구현한다고 한다.

반응형