Gradient Calculation
← Iso Surface Shading | ● | Flat Vs Smooth Shading →
Flat Shading vs Goruraud Shading → 1 normal per face vs. 3 normals per vertex:
Where do we get the original normal for our shaded iso surfaces?
Trick: for each of the 3 normals at the 3 vertices of each extracted triangle we use the gradient vector, which is perpendicular to the iso surface!
The gradient vector is computed on a discrete grid by finite differences method.
- Gradient vector is written as so called Nabla Operator $\nabla$
- Gradient = partial derivatives of the continuous scalar function $f(x,y,z)$
- Discrete derivatives via finite differences method
- forward differences method
- $ \frac{df(x)}{ds} \approx \frac{f(x+\Delta s)-f(x)}{\Delta s} $
- backward differences method
- $ \frac{df(x)}{ds} \approx \frac{f(x)-f(x-\Delta s)}{\Delta s} $
- central differences methods has better smoothness
- $ \frac{df(x)}{ds} \approx \frac{f(x+\Delta s)-f(x-\Delta s)}{2\Delta s} $
- forward differences method
Normal $ \vec{n} = \nabla f = (\frac{f(x+\Delta s,y,z)-f(x-\Delta s,y,z)}{2\Delta s}, \frac{f(x,y+\Delta s,z)-f(x,y-\Delta s,z)}{2\Delta s}, \frac{f(x,y,z+\Delta s)-f(x,y,z-\Delta s)}{2\Delta s})^T $
- Discrete derivation via central differences on the voxel grid
- $ \frac{df(x)}{ds} \approx \frac{f(i+1)-f(i-1)}{2} $
- At the grid boundaries forward resp. backward differences.
- Hint: even better smoothness than $\nabla$ via central differences: Sobel Operator!