How and why?
Mathematica Techniques
By Allan Hayes

Styling polygons and lines in 3D

There are two distinct ways to style the faces of polygons in 3D:
1. By  simulating reflection of light, both diffuse and specular (mirror-like). The  lights can have various colors and directions, and the two kind of reflection  can be as though from different colored surfaces. This way needs Lighting -> True.
2. By simulating painting colors on the screen. This gives solid colors  that do not vary with the tilt of the polygon, and so gives less of a 3D  effect. This way needs Lighting -> False.
Styling the edges of polygons is much simpler: we use  EdgeForm[directives for lines].

Polygons

Coloring by reflected light

The faces of Polygons in Graphics3D appear by default as white diffuse reflectors illuminated by the light  sources

Options[Graphics3D, LightSources]

where {{r,u,v},c} means parallel light with color c,  from direction, not position, {r right, u up, v towards viewer}.

The colored lights from different directions together with the various tilts 
of the polygons make them appear to be colored:

gr = 
ParametricPlot3D[
  {Cos[u](1 + Cos[t]/2), Sin[u](1 + Cos[t]/2), Sin[t]}, 
  {t, 0, 2Pi},{u, 0, Pi},  
  Boxed -> False, Axes -> False];

Other colorings can be generated by varying LightSources. The true white surface can be seen by using  a single white light  source:

gr1 = Show[gr, LightSources -> {{{1, 0, 1}, GrayLevel[1]}}];

Another way of altering the coloring is to use SurfaceColor[d, s, n] to combine diffuse reflection from a surface of color d with specular (mirror-like) reflection from a surface of color s (the specular exponent n must be positive, and the bigger it is the more mirror-like this  contribution is).  The last two entries are optional; the default value for n is 1. We can style the edges by using EdgeForm. All of this could be done by adjusting the input code and replotting,  see later, but to see what is involved I shall alter the the output and then  use Show.
The structure of the output is Graphics[{Polygon[...] ...}, {options}], so the modification can be made by

gr2 = 
Show[gr1 /. p:{__Polygon} :> 
  {EdgeForm[Hue[0.17]], 
   SurfaceColor[RGBColor[1., 0, 0], RGBColor[1, 1, 0], 1.9], 
   p}
];

Using FaceForm we can treat the two sides of the polygons differently - I'll change the  outer surface color.

gr3 = 
Show[gr1 /. p:{__Polygon} :> 
  { EdgeForm[Hue[0.17]], 
    FaceForm[
     SurfaceColor[RGBColor[1, 0, 0], RGBColor[1, 1, 0],1.9],
     SurfaceColor[RGBColor[0, 0, 1], GrayLevel[1],1.9]  
    ], p }
];

FaceForm[p,n] styles Polygon[{a,b,c,...}] with p if the turn from direction ab to direction bc is non-negative (zero or counterclockwise) as seen by the viewer. FaceForm[s] is equivalent to FaceForm[s,s].

Coloring by "painting on the screen"

Instead of using reflected light we can color the polygons as if by  painting onto the screen. This is done by setting color directives outside SurfaceColor, but to see the effect we must turn off the lighting by using Lighting -> False. Notice that the polygon's appearance is now independent of its normal  direction, so the object does not look as three dimensional.

gr4 = 
Show[gr1 /. p:{__Polygon} :> 
  {EdgeForm[Hue[0.17]], Hue[0., 0.5, 1], p}, 
  Lighting -> False
];

We can paint different sides of the polygons differently

gr5 = 
Show[gr1 /. p:{__Polygon} :> 
   {EdgeForm[Hue[0.17]],FaceForm[Hue[0., 0.5, 1], Hue[0.7]], p}, 
   Lighting -> False
];

Using both painting and lighting or neither?

Both methods can be made available in the same code but only one method at a 
time can be used in a display. Showing the following with Lighting -> 
True gives the same result as from gr3;  and with Lighting -> False we 
get the same as from gr4. Using Shading -> False causes all polygons to 
be painted white -  the edges are not affected.

gr6 = 
gr1 /. p:{__Polygon} :> 
   {EdgeForm[Hue[0.17]], 
    FaceForm[
      {Hue[0.7], 
       SurfaceColor[RGBColor[0, 0, 1], GrayLevel[1], 1.9]},       
      {Hue[0., 0.5, 1], 
       SurfaceColor[RGBColor[1, 0, 0], RGBColor[1, 1, 0],1.9]}
     ], p};

I'll put the examples in  GraphicsArray, using Show to insert the options while display is temporarily turned off by setting   $DisplayFunction = Identity:

Show[Block[{$DisplayFunction = Identity}, 
  GraphicsArray[
    {{Show[gr6], Show[gr6, Lighting -> False]}, 
     {Show[gr6, Shading -> False], 
      Show[gr6, Lighting -> False, Shading -> False]}
    }, Frame -> False
 ]]];

So far, we have used the same style for all the polygons, but we could,  with a little programming, have given different styles to individual  polygons. In fact, ParametricPlot3D lets us do this without any programming.

Automatic Styling with ParametricPlot3D

The optional fourth coordinate, the style coordinate, s in ParametricPlot[{x, y, z, s}, {t, tmin, tmax},{u, umin, umax}] can be used to give directives to individual polygons.

gr7 = ParametricPlot3D[
  {Cos[u](1 + Cos[t]/2), Sin[u](1 + Cos[t]/2), Sin[t],
   {EdgeForm[Hue[0.7]], 
	 FaceForm[ 
	  {Hue[t],SurfaceColor[Hue[2u, 0.3, 0.9]]},
	  {Hue[2u, 0.3, 0.9], SurfaceColor[Hue[t]]}
     ]
    }
  }, 
  {t, 0, 2Pi},{u, 0, Pi}, 
  LightSources -> {{{1, 0, 1}, GrayLevel[1]}}, 
  Boxed -> False, Axes->False
];

The directives given to a polygon are calculated by a kind of averaging :  for example, if s is {RGBColor[r,g,b], EdgeForm[Thickness[t]]}then we get triples like {RGBColor[ avr, avg, avb ], EdgeForm[Thickness[avt]], polygon}, where avr ....  denote the average over the values of the parameters{t,u} that give the vertices of the polygon (not over the coordinates of the  vertices). The same rule works for Thickness, GrayLevel and CMYKColor;  but not for Hue, which has to take into account that, for example, Hue[0] and Hue[1] both give red. I have not yet worked out how this is done. A single  directive need not be in a list.
Here is the first styled polygon from the  above output.

%[[1, 1]]

Turn off the lighting to see the "painted" version

Show[gr7, Lighting -> False];

Shading -> False causes all polygons to be painted white regardless of the setting of Lighting.

ParametricPlot3D[
  {Cos[u](1 + Cos[t]/2), Sin[u](1 + Cos[t]/2), Sin[t],
   EdgeForm[Hue[(u+t)/5], Thickness[Min[t/500,.03]]]
  }, 
  {t, 0, 2Pi},{u, 0, Pi}, 
  LightSources -> {{{1, 0, 1}, GrayLevel[1]}}, 
  Axes -> False, Boxed -> False, 
  Shading -> False,
  Background -> GrayLevel[.8]
];

Wire frame: we can get a wire frame version directly, as below (the  function WireFrame from the package Graphics`Shapes`  does not use the directives from inside EdgeForm)

Show[% /. {EdgeForm[e__] -> e, 
          Polygon[p_] :>  Line[Append[p,  First[p]]]}];

Intensifying reflected light and incident light

We sometimes want to have some objects in a bright solid color, say red,  and others in reflected light. This cannot be done by having the first  colored by screen painting and the others by reflected light, since for the  first we need Lighting -> False and for the second we need Lighting -> True. Unfortunately the apparent maximum red reflectance, RGBColor[1,0,0], can give a dull result due to the tilt of the polyhedra.

ParametricPlot3D[{{x, y, x*y + 1}, 
    {x, y, 1, SurfaceColor[RGBColor[1, 0, 0]]}}, {x, -1, 1}, 
   {y, -1, 1}, PlotPoints -> 7, PlotRange -> All, Boxed -> False, 
   Axes -> False];

However, it turns out that, although we get a warning message, we can use 
RGBColor[2, 0, 0], which intensifies the reflection of red, and gives

ParametricPlot3D[{{x, y, x*y + 1}, 
    {x, y, 1, SurfaceColor[RGBColor[2, 0, 0]]}}, {x, -1, 1}, 
   {y, -1, 1}, PlotPoints -> 7, PlotRange -> All, Boxed -> False, 
   Axes -> False];

Turn off this message:

Off[Graphics::realu]

The analogous trick works with GrayLevel but not with Hue or CMYKColor.

The light sources can be boosted in the same way. Below is the result of 
using RGBColor[0.5, 0,0] and Lighting -> {{{1, 0, 1}, GrayLevel[5]}}.  
The underlying calculation uses the product  0.5 ×5.

ParametricPlot3D[{{x, y, x*y + 1}, 
    {x, y, 1, SurfaceColor[RGBColor[.5, 0, 0]]}}, {x, -1, 1}, 
   {y, -1, 1}, PlotPoints -> 7,PlotRange -> All, Boxed -> False, 
   Axes -> False,
   LightSources -> {{{1, 0, 1}, GrayLevel[5]}}];

Lines

Lines generated by ParametricPlot3D can also be styled by using the fourth, optional, style coordinate:
The  value of the parameter used for the directives for a line segment Line[{a,b}] is that which gives b.

ln1 = 
      ParametricPlot3D[{t, Sin[2  Pi t], 0, 
          
{Hue[10  t],  Thickness[ .05 t]}}, {t, 0, 1}, 
        
Boxed -> False,  Axes  -> False,  
        PlotPoints  -> 4];

Here is the code for the individual styled  segments:

%[[1]] // Chop // ColumnForm

Combining

Please beware when combining graphics with Show[gr...,opt...] that for any option name nm the instance of nm -> .  that is used in the output is the first occurrence of nm  -> .  in  opt...gr...;  and that appearances depending on ViewPoint, LightSources, Shading ... can be affected.

Here is a square section gold bracelet.

gr7 = 
      ParametricPlot3D[{Cos[u] (1 +  .15 Cos[t]), 
          Sin[u] (1 +   .15  Cos[t]),  .05 
            (Sin[t] +  Sin[9  u]  + 10 (Sin[u]^2) +  7.5), {
            EdgeForm[], 
            FaceForm[{SurfaceColor[Hue[1/10],  Hue[ .13],  2]}]}}, {t, 0, 
          2  Pi}, {u, 0, 2  Pi}, 
        LightSources -> {{{1, 0, 1}, GrayLevel[1]}}, Axes -> False, 
        Boxed -> False, 
        
PlotPoints  ->   {5,  200}];

A red mat:

gr8 = 
      ParametricPlot3D[{x, y, -1, SurfaceColor[RGBColor[2, 0, 0]]}, {x, 
          -2, 1.5}, {y, - .5, 2},  PlotPoints  -> 2,  
        Boxed -> False,  Axes -> False];

Put them together with the earlier gr3:

Show[gr3, gr7 , gr8,  PlotRange  ->  All];