2.6.3  New Light Source Types and Light Groups

Light sources

New is the much requested parallel light, the parallel keyword can be used in combination with any type of light_source. The parallel light also works with photons, except in combination with an area_light.

The circular command has been added to area lights in order to better create circular soft shadows. With ordinary area lights the pseudo-lights are arranged in a rectangular grid. By including the circular tag in an area light, the light is stretched and squashed so that it looks like a circle: this way, circular or spherical light sources are better simulated.

The orient command has been added to area lights in order to better create soft shadows. Without this modifier, you have to take care when choosing the axis vectors of an area_light, since they define both its area and orientation. By including the orient modifier in an area light, the light is rotated so that for every shadow test, it always faces the point being tested. The initial orientation is no longer important, so you only have to consider the desired dimensions (area) of the light source when specifying the axis vectors.

Light groups

Light groups make it possible to create lights that only light a subset of all objects. They are for example useful when creating scenes in which some objects turn out to be too dark but the average light is exactly how it should be. With a light_group you can create lights that only illuminate the objects contained in the group and/or the global light sources.

A quick demo:

  #version 3.5;
  global_settings {assumed_gamma 1.0}
  camera {location <-2,1.0,-3> look_at <0,1,0>}
  plane {y, 0 pigment {rgb 1}}

  #declare S=sphere {
     <0,1,0>,1
     pigment {rgb 1}
  }
  light_source {
     < 500, 500,-500>
     rgb <0,0,1>
  }
  #declare R_Light=light_source {
     <-500, 500,-500>
     rgb <1,0,0>
  }
  #declare G_Light=light_source {
     <300, 300,-300>
     rgb <0,1,0>
  }

  //difference {
     light_group{
        light_source {R_Light}
        object {S}
        global_lights off
     }
     light_group {
        light_source {G_Light}
        object {S scale 0.75 translate <0.3,0.5,-1>}
        global_lights off
     }
  //}