As answered by @percusse, TeX is the obstacle here. I avoided TeX by creating a (rough) SAGE/python script that will take a SAGE 3d picture, already triangulated, and translate it to tikz 2d polygons, with some sort of light/shade computations. You do need SAGE to create the tikz file though.
It is available in github, in case you want to experiment with it.
You just write a few-liner python script (called from within the editor) that takes a SAGE-python snippet like this (this an implicit surface with a singular point):
P=implicit_plot3d( x**3+y**2-z**2 ==0,(x,-2,2), (y,-2,2),(z,-2,2), plot_points=100)
P.triangulate()
Picture(P.face_list(), boxed=False, axes=True,
nodes=[{"Position": (0,0,0), "Text": "" ,
"Options": "circle, inner sep=4pt,black!80, pin={[pin edge={black!80, semithick}]-120:Singular point}, draw"}]
).render()
and produces a standalone file like this:
\documentclass[border=1pt]{standalone}
....
\begin{document}
\begin{tikzpicture}[scale=25.361, line cap=round, line width=.1pt, line join=round, line cap=round]
\begin{pgfonlayer}{textLayer}
\node[circle, inner sep=4pt,black!80, pin={[pin edge={black!80, semithick}]-120:Singular point}, draw] at (0.000000,0.000000) {};
\end{pgfonlayer}
\filldraw[fColor=32] (-0.005352,-0.005537)--(-0.005287,-0.005489)--(-0.005163,-0.005353)--cycle;
\filldraw[fColor=32] (-0.004111,-0.004313)--(-0.005163,-0.005353)--(-0.005287,-0.005489)--cycle;
... lots more little polygons.
\end{tikzpicture}
\end{document}
When you compile this file with lualatex
(this is important, the huge number of polygons will need a huge amount of memory), gets you something like

Whatever lights/shades there are, are built into the python script as are the all the computations pertaining to 3d, view, projection, axis, translation of coordinates, etc.
PRO: you get a beautiful image (this of course is a matter of taste).
CONS:
You need some heavy duty math software, in this case SAGE.
You are dependent on external scripts. You better get a good editor with external script calling capabilities.
Compilation is still very slow. You probably want to use tikz
's externalize
trickery.
You are dependent on lualatex compiling for big figures (externalising somewhat alleviates this).
Finally, I only implemented one source of white light, one foreground color and one background color.
Other examples:


If you are interested in this script, you can get it from github.