edge-flip 하는 순간에 두 외접원이 겹쳤다가 continuous하게 변하므로 gradient-based optimization 적용 가능!
Ray Tracing :
장점 :
ray 단위로 처리하므로 굴절, 반사 등 빛 효과 반영 가능
non-pinhole 실제 camera 지원 가능 (image-centric rasterization 기법과 달리 object-centric ray-tracing 기법이라서)
단점 및 극복? :
rasterization에 비해서는 속도가 느림 현재 많은 3D 논문들은 volume rendering을 기반으로 하여, 특히 3DGS tile-based rasterization은 parallelism 덕분에 빠른 recon. 가능 하지만 ray-tracing의 경우 mesh-based representation이 regular하지 않아서 recon.에 불리했고, rasterization에 비해 느렸음. 하지만 본 논문에서는 voronoi representation에 많은 정보를 저장함으로써 FPS를 높였는데, 이를 계기로 앞으로 더 발전할지도?
rasterizer : primitive 단위로 처리하기 때문에 그림자 같은 빛 효과 반영 어렵
ray tracer : ray 단위로 처리하는데, ray는 intersected info.를 모두 가지고 있으므로 그림자나 global illumination effects 반영 쉬움
Ray Tracing with Bounding Volume Hierarchy (BVH) :
단점 : overlapping Gaussian 때문에 속도 느림 (비효율)
3D Representation :
3DGS는 rasterization을 위해, 2D projection이 가능하도록 3D covariance를 가진 learnable 3D pcd이다
3DGS에 ray-tracing을 적용하기 위해, learnable 3D pcd를 이용한 또 다른 3D scene representation은 없을까? \(\rightarrow\) ray-tracing을 적용하기 위해, 공간 자체를 partitioning하는 voronoi diagram을 사용하자!!
Method
Delaunay Triangulation
triangle mesh를 표현하는 데 있어서 point D가 triangle ABC의 외접원의 내부에 있으면 implausible \(\rightarrow\) edge-flip으로 해결!
reference: https://charlieppark.kr
Delaunay Triangulation :
문제 : triangle mesh의 vertex location을 continuously 바꿔도 edge-flip 일어나면 triangle mesh의 connectivity (edge)는 discrete하게 변해서 gradient-based optimization 적용 불가능
Voronoi Diagram
Voronoi Diagram :
Delaunay Triangulation의 dual graph
How :
Step 1) Delaunay Triangulation의 each triangle mesh의 외접원을 그림
Step 2) triangle mesh의 외접원의 중심들을 잇기
장점 :
triangle mesh의 learanble vertex location (아래 그림의 빨간 점)을 continuously 바꾸다가 두 외접원이 만나서 edge-flip 일어나면 triangle mesh의 edge (아래 그림의 초록색 삼각형)는 discrete하게 변하지만, 두 외접원 (아래 그림의 파란 원)은 겹쳤다가 continuously 변하므로 voronoi diagram (아래 그림의 검은색 벌집모양)은 continuously 변함 그래서 gradient-based optimization 적용 가능!
외접원을 3DGS처럼 간주하여 3D 공간을 partitioning
Ray Tracing Algorithm
Ray Tracing Foams :
How :
a ray와 Voronoi Diagram’s cell을 이루는 면의 교점을 sampling point로 사용
a ray가 Voronoi Diagram의 a cell에 진입했을 때 ray direction과 normal vector가 90도 미만의 각도를 가지는 면 (위 그림에서 green) 중 가장 먼저 만나는 면에 exit intersection이 존재하고 ray direction과 normal vector가 90도 이상의 각도를 가지는 back-facing 면 (위 그림에서 blue)는 무시! exit intersection이 존재하는 면에 인접한 cell에 a ray가 진입하여 위의 과정을 똑같이 반복
Ray Tracing은 reflection 등 빛 효과인데 위의 알고리즘에는 surface reflection에 대한 설명이 없어서 surface reflection과 volume rendering을 어떻게 섞어서 구현했는지는 코드로 확인해야 할 듯! TBD ???
Loss
Loss : \(L = L_{rgb} + \lambda L_{quantile}\)
L2 photometric loss
quatile loss \(L_{quantile} = E_{t_{1}, t_{2} \sim U[0, 1]} | W^{-1}(t_{1}) - W^{-1}(t_{2}) |\) where \(W^{-1}(\cdot)\) : quantile function (inverse CDF) of the volume rendering weight distribution along the ray
distortion loss of MipNeRF360 Blog 와 비슷한데, expensive quadratic nested sum 항을 제거
실제로 object가 있는 곳에 Gaussian’s weight on a ray 가 높도록 하여 floater artifacts 제거하는 regularization
Experiment
Conclusion
Voronoi-based 3D representation :
Limitation :
high memory consumption :
Ours는 이웃한 점들 사이의 cell boundaries가 equidistant해야 한다는 가정 필요
그래서 surface를 정의하기 위해서는 많고 작은 empty cells (high VRAM) 필요
심지어 Voronoi param. size에 비해 foam model의 3D 공간이 너무 넓다
need SfM :
need SfM to initialize voronoi diagram
Future Work :
Voronoi diagram을 넘어 representation을 generalize함으로써 위의 가정 완화
여러 foam models를 compose together efficiently
illumination이 계속 변하는 경우에 대응
static scenes 말고 dynamic content에 대응
scene editing via Voronoi representation
generative model을 결합하여 unseen scene에 대응
without SfM
현재 real-time ray tracing은 대부분 triangle mesh로 수행되어 왔는데 위의 Future Work를 통해 foam model-based ray tracing도 발전 가능!
Question
Q1 : voronoi diagram은 여러 3D representation 중 하나인 거고, 사실 꼭 voronoi diagram일 필요는 없는 거잖아요? triangle mesh 대신 voronoi diagram을 썼을 때의 장단점이 있을까요?
A1 :
장점 :
공간을 삼각형 대신 다각형(cell)로 분할하므로 더 복잡한 기하구조(움푹 패인 부분, 부드러운 곡면 등)를 표현할 수 있습니다.
기존 triangle mesh보다 저장해야 하는 정보(VRAM)가 많지만, 실시간 ray intersection 연산이 더 적기 때문에 더 빠르게 rendering할 수 있습니다. (trade-off b.w. VRAM and FPS)
각 cell로부터 SDF(수학적인 함수)를 정의하면 vertex 및 edge로 표현되는 explicit mesh 대신 수학 식(SDF)으로 표현되는 implicit surface를 만들 수 있고 implicit surface ray marching 방식으로 rendering하여 부드러운 곡면을 표현할 수 있습니다.
단점 : 기존 ray-tracing rendering pipeline은 triangle mesh 기반으로 짜여져 있어서 새로운 acceleration 및 intersection algorithm 필요
Q2 : ray-tracing model 중에서 FPS가 제일 빠른 건 사실 memory에 voronoi foam representation 방식으로 3D scene info.를 미리 잘 사전 저장해놓았기 때문에 실시간으로 ray-tracing했을 때 실시간 ray intersection 연산이 더 적을 수 있어서 빠르게 rendering할 수 있는 거라고 생각합니다. 그래서 VRAM memory와 FPS의 trade-off가 있는 거 같은데 이 점에 대해 어떻게 생각하시나요?
A2 :
rasterization 대신 ray-tracing 쓰려는 이유 : memory와 FPS를 포기하고 illumination 효과 반영 가능
ray-tracing에서 implicit MLP 대신 explicit voronoi diagram 쓰려는 이유 : memory를 포기하고 FPS 높임
memory 줄이는 방법? (by ChatGPT) :
hierarchical LOD-based voronoi compression ???
필요한 부분만 GPU에 load하여 update하는 on-demand streaming 방식 ???
ray-tracing에서 triangle mesh 대신 voronoid diagram 쓰려는 이유 : for continuous change of planes ??? (But, triangle-mesh-based ray-tracing rendering pipeline is already well-established..)