Die Lichtquellen

Das Punktlicht stahlt in der angegeben Farbe gleichmäßig in alle Richtungen. Dabei gibt es keine Lichtstreuung, d.h., Punkte, die nicht von der Punktlichtquelle beleuchtet werden, sind schwarz:


/* .......... */

light_source {
   <1.4, 0, 0>
   color rgb <1, 1, 1>
}

plane {<0, 1, 0>, -1.2
   texture {
      pigment {
         color rgb <0.7, 0.7, 0.7>
      }
      finish {
         ambient 0
      }
   }
}

sphere {<0, 0, 0>, 1
   texture {
      pigment {
         color rgb <1, 0.8, 0>
      }
      finish {
         ambient 0
      }
   }
}

Um nicht beleuchtete Gegenstände dennoch sichtbar zu machen, kann man ihnen eine ambient - Anteil geben. Es muß aber beachtet werden, daß die Form der Gegenstände im Ambient-Licht nicht erkennbar ist, da sie durch dieses unabhängig von ihrer Form gleichmäßig eingefärbt werden.


/* ............ */
light_source {
   <1.4, 0, 0>
   color rgb <1, 1, 1>
}

plane {<0, 1, 0>, -1.2
   texture {
      pigment {
         color rgb <0.7, 0.7, 0.7>
      }
      finish {
         ambient 0.4
      }
   }
}

sphere {<0, 0, 0>, 1
   texture {
      pigment {
         color rgb <1, 0.8, 0>
      }
   }
}

Die Lichtquellen selbst sind nicht sichtbar. So kann man in der folgenden Szene die Position der blauen Punktlichtquelle nur vermuten:


/* ........... */
light_source {
   <1.4, 0, 0>
   color rgb <0, 0, 1>
}

light_source {
   <0, 20, -10>
   color rgb <1, 1, 1>
}

plane {<0, 1, 0>, -1.2
   texture {
      pigment {
         color rgb <0.7, 0.7, 0.7>
      }
   }
}

sphere {<0, 0, 0>, 1
   texture {
      pigment {
         color rgb <1, 0.8, 0>
      }
   }
}

Mit Hilfe der looks_like - Klausel läßt sich die Lichtquelle sichtbar machen:


/*........... */
light_source {
   <1.8, 0, 0>
   color rgb <1, 1, 1>
   looks_like {
      cylinder {<0, 1, 0>, <0, 0, 0>, 0.2
         texture {
            pigment {
               color blue 1
            }
            finish {
               phong 0.9
               ambient 0.3
            }
         }
      }
   }
}

light_source {
   <0, 0, -10>
   color rgb <0.5, 0.5, 0.5>
}

plane {<0, 1, 0>, -1.2
   texture {
      pigment {
         color rgb <0.7, 0.7, 0.7>
      }
   }
}

sphere {<0, 0, 0>, 1
   texture {
      pigment {
         color rgb <1, 0.8, 0>
      }
   }
}

Wenn die Lichtquelle eine Taschenlampe sein soll, dann würde sie die Kugel nicht seitlich anstrahlen. Das spotlight gestattet es, den Lichtstrahl zu richten. Der Radius gibt den Öffnungswinkel des Lichtkegels an:


/*................ */
light_source {
   <1.8, 0, 0>
   color rgb <1, 1, 1>
   spotlight
   point_at <1.8, -1, 0>
   radius 20
   falloff 20
   looks_like {
      cylinder {<0, 1, 0>, <0, 0, 0>, 0.2
         texture {
            pigment {
               color blue 1
            }
            finish {
               phong 0.9
               ambient 0.3
            }
         }
      }
   }
}

light_source {
   <0, 0, -10>
   color rgb <0.5, 0.5, 0.5>
}

plane {<0, 1, 0>, -1.2
   texture {
      pigment {
         color rgb <0.7, 0.7, 0.7>
      }
   }
}

sphere {<0, 0, 0>, 1
   texture {
      pigment {
         color rgb <1, 0.8, 0>
      }
   }
}

Allerdings zeichnet eine Taschenlampe keinen so scharfen Rand. Aus diesem Grunde ist ein möglich, einen zweiten, größeren Lichtkegel (falloff) festzulegen, innerhalb dessen die Lichtintensität langsam abnimmt:


/* ............ */
light_source {
   <1.8, 0, 0>
   color rgb <1, 1, 1>
   spotlight
   point_at <1.8, -1, 0>
   radius 20
   falloff 45
   looks_like {
      cylinder {<0, 1, 0>, <0, 0, 0>, 0.2
         texture {
            pigment {
               color blue 1
            }
            finish {
               phong 0.9
               ambient 0.3
            }
         }
      }
   }
}

light_source {
   <0, 0, -10>
   color rgb <0.5, 0.5, 0.5>
}

plane {<0, 1, 0>, -1.2
   texture {
      pigment {
         color rgb <0.7, 0.7, 0.7>
      }
   }
}

sphere {<0, 0, 0>, 1
   texture {
      pigment {
         color rgb <1, 0.8, 0>
      }
   }
}

Die folgende Szene soll im Freien "spielen". Der harte Schatten des Balls wirkt unecht:


/* .............*/
light_source {
   <0, 100, 0>
   color rgb <1, 1, 1>
}

light_source  {
   <0, 0.5, -6>
   color rgb <1, 1, 1>
}

plane {<0, 1, 0>, -1.2
   texture {
      pigment {
         color rgb <0.7, 0.7, 0.7>
      }
   }
}

sphere {<0, 0, 0>, 1
   texture {
      pigment {
         color rgb <1, 0.8, 0>
      }
   }
}


Aus diesem Grunde gibt es ein Flächenlicht-Modell (arealight). Dieses erinnert eher an Tiefstrahler im Stadion. Ein Vektor beschreibt den Zentrumspunkt des Flächenlichts. Zwei andere, nicht parallele Vektoren spannen eine Ebene auf, in der sich das Flächenlicht befindet. Die Länge der Vektoren steckt das Rechteck in der Ebene ab, über die sich das Flächenlicht erstreckt. Wieviele Reihen und Spalten es gibt, ist parametrisierbar.


Um den Rechenaufwand zu verringern, kann man die Genauigkeit, mit der die Wirkung des Flächenlichts berechnet wird durch den Parameter adaptive beeinflussen. Durch jitter wird ein Zufallsgenerator eingeschaltet, der die korrekt regelmäßige Anordung der Lampen verhindert.


/* .............. */
light_source {
   <0, 100, 0>
   color rgb <1, 1, 1>
   area_light <100, 0, 0>, <0, 0, 100>, 5, 5
   adaptive 4 
   jitter
}

light_source  {
   <0, 0.5, -6>
   color rgb <1, 1, 1>
}

plane {<0, 1, 0>, -1.2
   texture {
      pigment {
         color rgb <0.7, 0.7, 0.7>
      }
   }
}

sphere {<0, 0, 0>, 1
   texture {
      pigment {
         color rgb <1, 0.8, 0>
      }
   }
}