본문 바로가기
공부/DirectX3D

[DirectX3D] 레이 캐스팅 ( Ray Casting ) & 레이 트레이싱 ( Ray Tracing) (feat.충돌)

by MY블로그 2023. 5. 31.

레이 캐스팅 ?

레이 캐스팅이란 빛(Ray)를 쏴서(Casting) 충돌한 물체의 표면을 감지하는 기술 입니다.

빛의 시작지점 부터 물체까지의 거리를 바탕으로 얼마나 가까이에 렌더링해야하는 지를 결정할 수 있습니다.

 

화면의 임의 위치에 모든 픽셀마다 카메라가바라보고 있는 방향으로 빛을 투사한 후 충돌체 까지의 거리를 구하여 충돌체 까지의 거리가 멀수록 가로 1픽셀 짜리 짧은 세로줄을 해당 합니다.

 

반대로 거리가 가까울 수록 가로 1픽셀 짜리 긴 세로줄을 해당 하여 그리는 방식으로 원근감이 있는 3D 느낌을 줄 수 있습니다. (즉, 멀수록 작아보이고 가까울 수록 커보이게 됩니다.)

 

예시 이미지 출처 : https://www.semanticscholar.org/

위처럼 레이 캐스팅은 무한하게 뻗어있는 점들이 마치 선처럼 구성되어 있는 형태 입니다.

 

D3D 에서 레이 캐스팅 관련 코드

예시는 카메라에서 마우스 커서 방향으로 Ray를 만들고 물체와 충돌하면 충돌 좌표를 반환 받는 코드 입니다.

Main.cpp
SimpleMath.h
Util.cpp
Collider.cpp


 

레이 트레이싱 ?

레이 트레이싱이란 레이 캐스팅 처럼 빛을 쏘지만 빛이 해당 물체의 표면에 닿은 후 현실처럼 빛이 다시 재귀적으로 반사되어 결과물을 렌더링 하는 방식 입니다.

 

레이 트레이싱은 수평선으로만 빛을 쏘는 것이 아닌 화면에 보이는 모든 필셀마다 빛을 쏘아서 충돌에 따라 해당 픽셀을 색칠하는 방식 입니다.

 

화면의 모든 픽셀마다 빛을 쏘는 개념이지만 엄밀히 말하면 촘촘한 그리드 형태로 되어있는 캔버스에 빛을 쏘는 것입니다. 캔버스의 각 필셀이 모니터의 픽셀을 구성하게 됩니다.

 

이미지 출처 : https://www.ee.cit.tum.de

위처럼 레이 트레이싱은 빛을 쏘는 광원을 기준으로 보이는 시야각 모든 방향으로 빛을 쏩니다.

 

 

 

댓글