Combined Distance Fields - ProkopHapala/FireCore GitHub Wiki

Motivation

Often we want to express some complex shape as implicit surface. Generally efficient way is to express it as distance field as it allows to do efficient algorithms for root finding which is useful for many things (rendering, collision detection, non-covalent interactions evaluation). Furthermore it is often convenient to express this distance field using linear combination of some radial functions $\rho(r)=\sum_i f(|r-r_i|)$. Optimally radial distance functions $f(|r-r_i|)$ should have finite supor so we can easily design linear-scaling algorithm for evaluation of this distance field for arbitrary number of points.

We want to describe signed distance field if following form $$\rho(r) = f^{-1}[ \sum_i f(\rho_i(r)) ]$$ resp. $$\rho(r) = f^{-1}[ \sum_i f(|r-r_i|) ]$$

Particularily interesting set of functions

  • $$f(r)=1/r$$
    • $$\rho(r) = 1/\sum_i 1/|r-r_i|$$
  • $$f(r)=\exp(r)$$
    • $$\rho(r) = \log( \sum_i exp(-|r-r_i|) )$$
  • $$f(r)=\max(0,(R_i-r)^n)$$
    • $$\rho(r) = 1/\sum_i 1/|r-r_i|$$

Quit interesting method of this kind is

viz.ChatGPT

Relation to Morse Potential

Morse Potential has formula

$$V(r) = E_0 ( 1-\exp(-k(r-r_0)) )^2$$

$$V(r) = E_0 ( 1-\exp(-kr)\exp(kr_0) )^2$$

$$V(r) = E_0 \exp(2kr_0) ( \exp(-kr_0)-\exp(-kr) )^2$$

$$V(r) = A ( e - \exp(-kr) )^2 $$

where $e=\exp(-kr_0)$ and $A=E_0/e^2 = E_0 \exp(2kr_0)$ and