Shadow 구현 방법

그림자 구현 방법



눈의 지점 Eye의 Point로부터 픽셀을 지나 물체로 향하는 벡터를 Primary ray라고 합니다.
primary ray가 충돌한 물체의 위치를 P라고 할 때, P에서 빛의 위치로 향하는 벡터를 Shadow ray라고 합니다.

Shadow ray를 다시 쏴줌으로써 빛을 받는 위치에서 다른 물체와의 충돌 여부를 체크해서 가려지는지 여부를 판별할 수 있습니다.

이 포스팅에서는 빛의 대한 충돌 구현 방법은 적지 않으니 충돌 체크에 대한 방법론은 아래 레퍼런스를 참고하시길 바랍니다.


https://www.scratchapixel.com/lessons/3d-basic-rendering/minimal-ray-tracer-rendering-simple-shapes/parametric-and-implicit-surfaces.html

 

A Minimal Ray-Tracer: Rendering Simple Shapes (Sphere, Cube, Disk, Plane, etc.)

Parametric and Implicit Surfaces Reading time: 13 mins. Introduction In the previous lesson, we learned how to generate primary rays, but we haven't been able to produce an image yet, because we haven't learned how to calculate the intersection of these pr

www.scratchapixel.com

 

 

컴퓨터가 그림자를 판별하는 원리

 

 


Code




픽셀로부터 발사된 Ray의 충돌 지점을 통해 빛의 방향으로 Ray를 다시 쏘아서 충돌 체크를 한 후 만약 물체가 가로막고 있다면 해당 픽셀을 그림자가 맺히도록 검은색 픽셀로 그려주도록 하는 코드 입니다.



Ray shadowRay{ hit.point + dirToLight * 1e-4f, dirToLight };



Shadow ray는 픽셀로 부터의 광선의 충돌 지점에서 빛 방향으로 향하는 Ray입니다.



주의할 점

여기서 충돌 지점에서 바로 사용하게 되면 컴퓨터의 수치해석 문제로 인해 바로 충돌 처리가 되어버리는 버그가 생길 수 있으므로, Shadow ray가 향하고자 하는 방향으로 primary ray를 아주 미세한 수치만큼 이동시켜주는 것이 중요합니다.

 

 


Reference:
https://jmhongus2019.wixsite.com/mysite

 

'Graphics & DirectX' 카테고리의 다른 글

[Graphics] Bloom (shader effect)  (0) 2023.05.07
[Graphics] Separable convolution  (0) 2023.05.05