What's New in POV-Ray 3.1

MEDIA REPLACES HALO & ATMOSPHERE
Halo and Atmosphere have been totally eliminated with no backwards 
compatability of any kind provided.
They have been replaced by a new feature called "media".  At the scene 
level, media acts as atmospheric media for fog, haze, dust, etc.  On 
objects, media is not part of texture like halo was. Object media is now 
part of a new feature called "interior".  Media is not just a rename for 
halo.  It is a new model with some similar features of halo.  BECAUSE POV-
Ray 3.1 DISCONTINUES SOME 3.0 FEATURES YOU MAY WISH TO KEEP 3.0 TO RENDER 
OLDER SCENES.

Any pattern type (bozo, wood, dents, etc.) may be used as a density 
function for media.

New patterns spherical, cylindrical, planar, and boxed added for pigment, 
normal, texture, and density.

New wave types "cubic_wave" and "poly_wave FLOAT" have been added

New object modifier "interior{...}".  Interior contains information about 
the interior of the object which was formerly contained in the finish and 
halo parts of a texture. Interior items are no longer part of the texture. 
Instead, they attach directly to the objects. The finish items moved are 
ior, caustic, fade_power, and fade_depth.  The "refraction" keyword is no 
longer necessary.  Any ior other than 1.0 turns on refraction.  These 5 
finish keywords which are now part of interior will still work in finish 
but will generate warnings.  Some obscure texture_map statements with 
varying ior will not work.

Added reflection_exponent FLOAT to finish to give more realistic reflection 
of very bright objects.

NEW #MACRO FEATURE
Add fully recursive and parameterized #macro directive.
 Define like this...
  #macro MyMacro (P1,P2,P3)   ...  #end
 Invoke like this...  MyMacro (5,x*5,MyTexture)
Note no '#' sign preceeds invocation.  Macros can be invoked almost 
anywhere. Parameters must be identifiers or any item that can be declared, 
MyMacro(pigment{Green},MyObject) for example.
Added #local IDENTIFIER= statement as alternative to #declare to create 
temporary local identifier in macros or include files.

ARRAYS ADDED
Added multi-dimension arrays
  #declare MyArray=array[20]
 or
  #local PrivateArray=array[30]
 or
  #declare Rows=5; #declare Cols=4;
  #declare Table=array[Rows][Cols]
Added optional initializer syntax for arrays.
 #declare MyArray=array[2][3]{{1,2,3},{4,5,6}}
Subscripts start at 0.  Anything that can be declared may be in an array. 
Arrays are initialized as null.  You must later fill each element with 
values.
Added float functions for arrays.  Given #declare MyArray = array[4][5] 
then dimensions(MyArray) is 2 and dimension_size(MyArray,2) is 5.

OTHER DIRECTIVES
Added #fopen, #fclose, #read, and #write directives for user text files.
Added #undef identifier directive.  Un-declares previously declared 
identifier.  Works on locals or globals.
Added requirement that any directive which can end in a float or expression 
must be terminated by a semi-colon.
  Specifically this means any #declare or #local of float, vector or color 
or the #version directive.

ADDITIONAL NEW FEATURES
Added Bezier splines to lathe and prism. The spline is made of segments 
having four points each. Thus there are always four times the number of 
segments in a prism or lathe. A four point Bezier spline uses 3rd order 
Bernstein blending functions which are sufficient for smooth curves.

Added float constant "clock_delta" returns time between frames.

---------------------------------------------------------------------------

The Windows platform has had a significant facelift, plus the addition of a
new, much more powerful editor.