if you do not know the range *a priori* you can run the plot once to get it, then again to plot: dist[x_, y_, z_] = Abs[x + y]; range = dist @@@ Reap[ParametricPlot3D[{Cos[u] Cos[v], Sin[u] Cos[v], Sin[v]}, {u, 0, 2 \[Pi]}, {v, -\[Pi]/2, \[Pi]/2}, ColorFunction :> (Sow[{#1, #2, #3}] &)]][[2, 1]] // MinMax > {0.292893, 1.70711} ParametricPlot3D[{Cos[u] Cos[v], Sin[u] Cos[v], Sin[v]}, {u, 0, 2 \[Pi]}, {v, -\[Pi]/2, \[Pi]/2}, ColorFunction :> (Blend[{{range[[1]], Red}, {range[[2]], Green}}, dist[#1, #2, #3]] &)] [![enter image description here][1]][1] [1]: https://i.sstatic.net/kEuDr.png