[4] NeRF Network¶1. Positional Encoding¶아래 코드는 NeRF 논문의 Positional Encoding 기법을 파이썬 클래스(Embedder)로 구현한 예시입니다.목표는 3차원 벡터(예: 위치 $\mathbf{p}$ 또는 방향 $\mathbf{d}$)에 대해, 다음과 같은 형태의 트리그 함수(사인/코사인) 묶음을 만들어 고차원 벡터로 확장하는 것입니다.$$\gamma(\mathbf{p})= \Bigl[\mathbf{p},\;\sin(2^0 \pi \mathbf{p}), \cos(2^0 \pi \mathbf{p}),\;\sin(2^1 \pi \mathbf{p}), \cos(2^1 \pi \mathbf{p}),\;\cdots,\;\sin(2^{L-1} \pi \mathbf{p..
[2] Calculating Rays¶1. 픽셀 좌표와 월드 좌표 대응하기¶NeRF는 장면의 픽셀에서 발사한 광선이 물체와 맞닿는 지점을 예측하여 렌더링을 진행합니다.이번 장에서는 카메라 매트릭스로부터 픽셀 좌표를 월드 좌표의 유일한 점으로 대응하고,이를 이용해 광선의 시작점과 방향을 계산하는 과정을 공부합니다.1) 픽셀 좌표 $(x,y,1)$ → 정규 좌표 $(u,v,1)$¶(a) 수식¶픽셀 좌표 $(x,y)$가 있을 때, 카메라 내부 행렬 $K$는 다음과 같은 형태를 가정합니다:$$K = \begin{bmatrix}f_x & 0 & c_x \\0 & f_y & c_y \\0 & 0 & 1\end{bmatrix}.$$그렇다면,$$\begin{bmatrix}x \\y \\1\end{bmat..
[1] 카메라 이론¶이번 장에서는 카메라를 월드의 원하는 지점으로 옮기는 행렬인 Cam to World Matrix(이하 c2w)에 대해 공부하겠습니다. 카메라가 어떤 특정 위치와 방향을 가질 때, 카메라 좌표계에서 본 3D 점을 세계 좌표계로 변환하려면 회전(Rotation) 과 평행이동(Translation) 을 적용해야 합니다.NeRF에서는 트레인 데이터에 없는 테스트용 카메라 위치를 계산하기 위해 render_poses 라는 변수를 만들고, 여기에 원하는 c2w를 저장합니다. 아래에서 c2w를 만드는데 필요한 요소를 살펴보겠습니다.1. 병진 행렬: trans_t(t)¶trans_t = lambda t : torch.Tensor([ [1,0,0,0], [0,1,0,0], [0,0,1..