Signed distance fields (SDFs) / Signed distance functions
특정 점의 position을 입력으로 받으면 그 shape에서 가장 가까운 점으로부터의 거리를 알려주는 함수다.
이러한 함수는 Finite element method에서처럼 explicit하게 어떤 위치에 어떤 점이 있는지를 나타내는 것이 아니기 때문에 implicit curves or surfaces라고 표현하기도 한다.
https://numfactory.upc.edu/web/Geometria/signedDistances.html
Signed Distance Function (SDF): Implicit curves or surfaces
Signed Distance Function (SDF): Implicit curves or surfaces A mathematical equation usually involves the relationship between several unknowns. For exemple: In this case, the relation between is implicit because none of then are expressed in terms of the o
numfactory.upc.edu
다음 사이트에서 SDFs의 예시를 가져왔다.
1. 2 Dimensional 일 때
1-1. Circle
가장 대표적인 것이 원이다.
우리가 2d 공간에서 원을 정의할 때 다음과 같이 implicit function으로 나타낸다.
$$(x-a)^2 + (y-b)^2 -1=0$$
이 원을 그리면 원점이 $(a,b)$이고 반지름이 1인 원임을 알 수 있다. 우리가 만약 d를 다음과 같이 정의한다면
$$d(x,y) = (x-a)^2 + (y-b)^2 -1 $$
특정 점이 주어질 때 거리 $d$를 계산할 수 있다. 입력 점 좌표가 원 내부이면 음수, 외부이면 양수가 나온다.


1-2. Segment
다음과 같은 선분($S_{AB}$)이 주어질 때 어떠한 포인트 $(x,y)$를 주면 그 선분에 가장 가까운 거리를 구해야 한다.
선분은 수학적으로 다음과 같이 정의된다.
$$S_{AB} : (x,y)=\lambda A+(1-\lambda)B \quad \lambda \in [0,1]$$

1번 영역에서는 $d(P,S_{AB})=d(P,Q)$ - P와 그 선분에 Projection한 점 Q 사이의 거리를 구한다.
2번 영역에서는 $d(P,S_{AB})=d(P,A)$ - P와 선분의 끝 A 사이의 거리
3번 영역에서는 $d(P,S_{AB})=d(P,B)$ - P와 선분의 끝 B 사이의 거리
이렇게 세 부분으로 나눠서 계산할 수 있다.
따라서 코드 상에서는 SDF를 정의할 때
$$\lambda=\frac{\langle P-A, B-A \rangle}{ \langle B-A,B-A \rangle }$$를 계산한 다음에 이 $\lambda$를 $[0,1]$ 안으로 clipping한 $lambda$값을 선분 방정식에 넣은 점과의 거리로 정의한다.
$\lambda$가 0보다 작을 경우에는 점 A에 projection되고
$\lambda$가 1보다 클 경우에는 점 B에 projection하기 위해서이다.
따라서 SDF를 다음과 같이 정의할 수 있다.
$$d(P,S_{AB})=d(P,Q) \quad {such that} Q=\lambda A +(1-\lambda)B \text[ where }\lambda= \min\left(1, \max \left( \frac{ \langle P-A, B-A \rangle }{ \langle B-A,B-A \rangle }\right)\right)$$
2. 3 Dimensional일 때
2-1. Cube

다음과 같이 cube 거리를 계산할 때는 선분 거리 계산 때와 같이 영역을 나눠서 계산할 수 있다.
영역 1 $d=P_x -R_x$
영역 2 $d=P_y - R_y$
영역 3 $d=\sqrt{ (P_x - R_x)^2 + (P_y - R_y)^2 }$
내부에 점이 있는 경우까지 고려하면 다음과 같이 정리할 수 있다.
$$d = \left\lVert \max\left( \lvert P \rvert - R,\, 0 \right) \right\rVert - \min\left( \left\lVert \lvert P \rvert - R \right\rVert_{\infty},\, 0 \right)$$

SDFs는 mesh를 만들어야한다는 제약이 덜하기 때문에 유용하게 쓸 수 있을까 싶어서 공부 중이다.