Home » Haus » Rundgang

Ein Rundgang durch's Haus

Wegpunkte 

Weg der Kamera Nun wollte ich einen Film drehen, einen Weg durch das virtuelle Haus. Zunächst musste ich den Weg definieren. Also wurden zunächst die Wegpunkte festgelegt.

Rechts geht's vom Eingang zur Küchentür, in die Küche hinein mit einem Schlenker durch den Raum, danach ins Wohnzimmer und weiter Richtung Flur.

  def Rundweg(self):
      eingang_m = (eg_u6+eg_u4)/2
      kuechentuer_m = eg_l6+7+(85/2.0)
      ...
      p = [(eingang_m,eg_l0-500, 150),
           (eingang_m,eg_l0-400, 150),
           (eingang_m,eg_l6, 150),
           (eg_u2,kuechentuer_m, 150),
           ...

Kamera-Geschwindigkeit 

Die Wegpunkte bilden die Basis für ein kubisches Spline. Nur hatte ich mit einer direkten Übertragung das Problem, daß die Kamera unterschiedlich schnell war, da z.B. Eingang -> Flur eine wesentlich längere Wegstrecke hatte als Flur -> Küchentür.

Weg der Kamera im EG Wird von sämtlichen x/y-Koordinaten die jeweilige Entfernung berechnen, diese aufsummiert und danach als Normierung verwendet. Heraus kommen Koordinaten wie diese hier:

#declare WegSpline =
  spline {
    cubic_spline
    -0.052950 <343,132,-500>,
    0.000000 <343,132,-400>,
    0.377266 <343,132,312>,
    0.430382 <256,132,362>,
    0.479969 <176,132,312>,
    ...
  }

Man sieht schön, daß die Punkte etwa gleich weit entfernt sind.


Der Film 

Weg der Kamera im OG Nun wurden die Wegpunkte für EG und OG gesetzt. Anschließend setzt man die Kamera jeweils auf einen vom Spline errechneten Punkt und lässt sie in der x/y-Ebene auf den nächsten Wegpunkt blicken. In der z-Achse (hoch/tief) sollte man das nicht machen, sonst bekommt man im Treppenhaus schlechte Ergebnisse.

  camera {
    #declare point1 = <0.0.0>+WegSpline(clock);
    #declare point2 = <0.0.0>+WegSpline(clock+0.02);
    location point1
    look_at < point2.x, point1.y, point2.z>
  }

Nun berechnet man 1000 Bilder, indem man Povray mit einer INI-Datei ähnlich wie dieser hier startet:

  input_File_Name=haus.pov
  Output_File_Type=P

  Antialias = off
  Jitter = off
  Initial_Frame = 1
  Final_Frame = 1000
  Initial_Clock = 0.0
  Final_Clock = 1.0

Und schon hat man die Platte voll (bzw. 1000 *.pnm-Bilder). Diese kann man mit ppmtompeg -no_frame_summary haus.par und folgender Parameterdatei in einen Film umwandeln:

  PATTERN IBBPBBPBBPI
  FORCE_ENCODE_LAST_FRAME
  OUTPUT haus.mpg
  INPUT_DIR .
  INPUT
  haus*.ppm [0001-1000]
  END_INPUT
  BASE_FILE_FORMAT PNM
  INPUT_CONVERT *
  GOP_SIZE 10
  PIXEL HALF
  IQSCALE 6
  PQSCALE 6
  BQSCALE 6
  RANGE 2
  PSEARCH_ALG LOGARITHMIC
  SLICES_PER_FRAME 5
  BSEARCH_ALG SIMPLE
  REFERENCE_FRAME ORIGINAL
  ASPECT_RATIO 1.0
  FRAME_RATE 23.976
  BUFFER_SIZE 20

Download vom Film 

Hier ist der Film: haus.mpg.