날짜 : 2025-03-11
이름 : 신성현
주제 : Distance Field를 활용한 Sphere Tracing에 대하여
언리얼 버전 : UE 5.4.4
이전 포스팅 ([UE5] Distance Field - 개요) 에 이어서 제가 관심있게 본 Distance Field의 활용처에 대해서 포스팅 진행하겠습니다. 다룰 내용은 Ray Marching과 Sphere Tracing 입니다. 최근 업무에서 복셀 관련 작업을 진행한 경험이 있는데, 여기에도 활용할 수 있을 것 같아 관심있게 보게 됐습니다.
Ray Marching이란 광선(Ray)을 일정한 단계로 점진적으로 진행(Marching)하며 메시나 볼륨의 표면을 찾는 방법을 의미합니다. 즉, 광선이 어떤 물체와 교차하는 지점을 찾기 위해 정해진 간격으로 점을 이도하면서 표면과의 교차 여부를 확인하는 방식입니다.

위 이미지를 참고하면 쉽게 이해할 수 있을 것 같습니다.
Sphere Tarcing은 Ray Marching의 한 종류입니다. 하지만, 일정 간격이 아닌 Signed Distance Field에서 제공하는 거리를 기반으로 다음 점으로 이동합니다. 그 모습이 마치 Sphere를 활용하는 것과 유사하여 Sphere Tracing 라는 이름이 지어진 것 같습니다.

언리얼에서는 해당 기법을 레이 트레이싱에 활용하고 있는 것으로 확인하였습니다.
좀 더 자세한 설명을 위해 한 단계씩 나눠서 설명하겠습니다.

1. 좌측에 있는 초록색 점에서 광원이 시작한다고 가정을 하겠습니다. 현재 위치에서 가장 가까운 구체는 빨강입니다.

2. 이전에 판별한 거리 이하는 레이를 쏴도 충돌하는 다른 구체가 없습니다. 따라서 해당 거리만큼 레이를 전진시킵니다.

3. 다시 가장 가까운 구체를 탐색합니다. 여전히 빨강이지만 거리가 줄어들었습니다.

4. 구체와 충돌하거나 혹은 최대 거리 이상 진행할 때까지 위 과정을 반복합니다.


위 기능을 응용하면 기존의 프리미티브를 넘겨서 렌더링하는 방식과 전혀 다른 새로운 방식으로 렌더링을 할 수 있습니다. 아래는 그 예시입니다.

https://computergraphics.stackexchange.com/questions/161/what-is-ray-marching-is-sphere-tracing-the-same-thing
https://www.youtube.com/watch?v=khblXafu7iA