Rendering

Per molti aspetti i point-based $\alpha$-blending, i rendering volumetrici NeRF-style e i Gaussian Splatting condividono la parte di basso livello per disegnare la scena: il colore in un pixel dell'immagine viene approssimato integrando i campioni lungo il raggio che attraversa questo pixel. Il colore finale è una somma ponderata dei colori dei punti 3D campionati lungo questo raggio, ponderata in base alla trasmittanza.

Il colore $C$ di un pixel è l'integrale delle varie densità che si incontrano lungo il raggio ottico $\mathbf{r} = \mathbf{o} + t \mathbf{d}$ nell'intervallo $[t_n, t_f]$:

\begin{displaymath}
C = \int_{t_n}^{t_f} T(t) \sigma \left( \mathbf{r}(t) \right) \mathbf{c} \left( \mathbf{r}(t), \mathbf{d} \right) dt
\end{displaymath} (9.95)

dove
\begin{displaymath}
T(t) = \exp \left( - \int_{t_n}^{t} \sigma \left( \mathbf{r}(s) \right) ds \right)
\end{displaymath} (9.96)

La funzione $T(t)$ denota la trasmittanza accumulata lungo il raggio da da $t_n$ a $t$, cioè la probabilità che il raggio viaggi da $t_n$ a $t$ senza colpire qualsiasi altra particella.

Gli integrali possono essere trasformati in sommatorie dei vari contributi. Il colore $C$ di un pixel può essere visto pertanto come sommatoria di vari contributi:

\begin{displaymath}
C = \sum_{i=1}^{N} T_i \left( 1 - \exp( - \sigma_i \delta_i) \right) \mathbf{c}_i
\end{displaymath} (9.97)

dove $T_i = \exp \left( - \sum_{j=1}^{i-1} \sigma_j \delta_j \right)$ dove $\delta_i = t_{i+1} - t_{i}$.

Questa rappresentazione si riduce al classico $\alpha$-blending usando $\alpha_i = 1 - \exp \left( - \sigma_i \delta_i \right)$. In questo modo anche la trasmittanza si può scrivere come $T_i = \prod_{j=1}^{i-1} (1 - \alpha_i)$.

Nei tipici approcci basato sui punti neurali, il colore $C$ di un pixel si ricava fondendo gli $\mathcal{N}$ punti ordinati che sottendono il pixel stesso:

\begin{displaymath}
C = \sum_{i \in \mathcal{N} } c_i \alpha_i \prod_{j=1}^{i-1} \left( 1 - \alpha_j \right)
\end{displaymath} (9.98)

Paolo medici
2025-03-12