-
[NeRF 기본] 레이마칭 (Ray Marching)NeRF 2023. 8. 4. 01:41
- 레이트레이싱(Ray Tracing) : 물체에 빛을 쏘아 반사된 빛을 추적한다.
- 경로 추적(Path Tracing) : 모든 물체에 랜덤 방향의 Ray를 추적시켜 현실 빛 효과를 재현한다.
레이마칭 (Ray marching) 이란?
메시(Mesh) 데이터를 이용하는 기존의 3D 렌더링 방식과는 달리, 거리함수(Signed Distance Function, SDF)를 이용해 오브젝트 표면을 정의하는 방법.
카메라로부터 스크린 픽셀들을 향해 레이를 전진시키고(Ray Marching), 해당 픽셀의 레이가 오브젝트 표면에 닿으면 그 픽셀에 오브젝트 표면을 렌더링하는 방식이다.
Ray Marching 레이 마칭 과정
- 레이의 원점 (Ray Origin, ) 정하기
Ray Origin은 Ray의 출발지점을 의미하며, 카메라의 3D 공간상의 위치이다. - 화면 좌표(Screen UV) 정의
XY 평면(Image plane)상에 화면 좌표(Screen UV)를 정의한다. - 방향 벡터(Ray Direction, ) 정의
Screen UV 좌표에 깊이(Z축 좌표)를 추가하여 3D 공간 상의 화면 좌표를 생성한다. 는 정규화된 벡터이다. 방향벡터는 물체의 표면을 이루는 모든 픽셀에 대해 정의된다. 따라서, 물체의 표면을 이루는 픽셀이 200*100 개라면 2e4개의 가 존재한다. - SDF(Signed Distance Function) 정의
공간 상의 물체 표면 정보를 SDF 함수를 통해 정의한다. - 레이 전진 알고리즘 정의
하나의 레이에 대해 , SDF가 정의된 상태에서, 1) ()에서 각 물체에 대해 SDF(거리함수)를 통해 최단거리()를 계산한다. 2) 최단거리만큼 방향 벡터 방향으로 전진한다 (). 3) 전진한 위치에서 각 물체에 대해 SDF로 최단거리를 계산한다. 4) 물체 표면에 닿을 때 까지 스텝을 반복한다. 만약, 물체에 닿지 못하고 일정 거리 이상에 도달하면 종료한다. 5) 계산한 거리()를 통해 물체 표면의 공간 상 위치()를 구할 수 있다.
Ray 전진 알고리즘 레이 마칭 이후 과정
- 노멀 벡터(normal vector) 계산
1) 위에서 얻은 거리()를 이용해 3D 공간상에서 각 표면의 위치()를 계산한다.
2) 계산한 위치()에서 x, y, z 축으로 미세하게 떨어진 위치()에서 가장 가까운 물체 표면까지의 거리를 계산한다.
3) 지금까지 얻은 를 사용하여 법선 벡터()를 구한다. - 라이트(Directional Light) 계산
디퓨즈 계산 방식과 동일하게, 가상 라이트 벡터()와 노멀 벡터()를 내적하여 라이트를 계산한다.
참조:- https://vateran.tistory.com/52
- https://michaelwalczyk.com/blog-ray-marching.html
- https://studyfield.tistory.com/503
- https://rito15.github.io/posts/ray-marching/
Raymarching and Signed Distance Function (번역)
다음 글은 jamie-wong.com/2016/07/15/ray-marching-signed-distance-functions 블로그 글을 번역한 것입니다. 똥번역이어도 도움이 되었으면 좋겠습니다. Signed Distance Functions 줄여서 SDF. 특정한 공간상의 지점(point)
vateran.tistory.com
Ray Marching
Software Engineer & Media Artist 📷 Instagram 💻 Github 📝 LinkedIn
michaelwalczyk.com
[HKU] 렌더링 기법 RayTracing, RayMarching, PathTracing 장점과 단점 비교
HKU 대학교 Niel 교수님의 오늘 맡아주신 수업 내용을 요약했습니다. RayTracing : RayTracing : 가상적인 광선이 물체의 표면에서 반사되어, 카메라를 거쳐 다시 돌아오는 경로를 계산한다. 적게는 물체
studyfield.tistory.com
레이 마칭(Ray Marching)
레이 마칭이란?
rito15.github.io