The Genesis Toolkit

Home

The Genesis Toolkit
 Terra

Stereo 3D

Linux

Projects

Gallery

Download

Links

Imprint

Email:
Latest update
September 05 2010 13:23:54
countercountercountercountercountercounter
Spenden
































































































































































































































The Genesis Toolkit


Das Genesis Toolkit ist eine Sammlung von Kommandozeilen-Programmen, mit denen man mit Povray-Heightfields arbeiten kann. Heightfields sind Bilder, die in Povray als Landschaftsrelief verwendet werden können.
Die Programme werden an der Kommandozeile ausgeführt (z.B. in der Shell oder DOS-Box) und durch Parameter gesteuert. Dazu kann man Batchfiles oder Shell-Skripte verwenden.
Aktuell gibt es diese Programme für Linux
und M$-Windows (für die unter euch die noch nicht umgestiegen sind)

Vielen Dank an Michael Muldown, der extra eine grafische Bedienoberfläche für das Genesis Toolkit geschrieben hat. Wenn ihr also eine GUI bevorzugt, um all die Programmaufrufe und Parameter zu sparen, könnt ihr eine passende GUI von Michaels Seite herunterladen:
GT - a graphical user interface for the Genesis Toolkit

11. Oktober, 1998

  • Die LINUX Version des Genesis Toolkit ist fertig.

  • 26. Juli, 1998

  • Version V.1998.07.26 ist fertig zum download.
  • Ich habe einige Änderungen an GEN, ROUGH und HFMERGE gemacht.
  • Das neue Tool CUTTER kann nicht sichtbare Objekte aus der Szene entfernen, damit weniger Speicher ud Parse-Zeit gebraucht wird.

  • 20. June, 1998

  • The Vegetation Package wurde aktualisiert. Nun gibt es eine natürlicher aussehende Tanne, entworfen von Stig Bachmann Nielsen.




  • The Genesis Tools:

  • ROUGHT
    Erzeugen von physischen Struktur-Karten zu Heightfields
  • GEN
    Plazieren von Objekten auf einem Heightfield
  • CUTTER
    Ausfiltern von Objekten, die die PovRay-Kamera in der Szene nicht sehen kann
  • GIF2TGA / TGA2GIF
    Zum Konvertieren von verschiedenen Heightfield-Dateiformaten
  • HFMERGE
    Verschmelzen von zwei Heightfields.

  • Download The Genesis Toolkit

  • The Vegetation Package:

  • Beispiel Objekte, entworfen für das Genesis Toolkit, beinhalten zwei Bäume, einen Farn und einen Grasbusch.


  • ROUGH

    Die Aufgabe von ROUGH ist es eine physikalische Strukturkarte zu einem Heightfield zu erstellen. Es gibt verschiedene Typen von Vegetation in einer Landschaft. In felsigen Bereichen wird man zum Beispiel weniger bzw. andere Vegetation finden als in ebenen Bereichen. Die Vegetation verändert sich auch in verschiedenen Höhen des Gelädes.
    ROUGH erstellt eine Karte der Landschaft. Das Ergebnis ist eine GIF-Datei die als image_map für PovRay oder als plantmap für GEN benutzt werden kann. Jede Vegetationstyp hat seine eigene Farbe in der Karte.







    Optionen für ROUGH:

    -i   Input Datei (Heightfield, 24bit TGA Format)
    -o  Outputfile Name (GIF-Format)
    -r   Roughtness sensibilitäts Kontrollwert für die Erkennung
    -ha Level A (Prozent)
    -hb Level B (Prozent)
    -hc Level C (Prozent)
    -hd Level D (Prozent)
    -he Level E (Prozent)

    BEISPIEL:
    Um die Werte des Beispielgrafik links zu erhalten:
    ROUGH -itestland.tga -omap.gif -ha2 -hb20 -hc40 -hd60 -he80



    Die -r Option kann dazu verwendet werden, um die felsigen Bereiche zu erkennen. Je höher der Wert, desto mehr Vegetation und weniger Felsbereiche.





    top of page

    GEN

    Die Aufgabe von GEN ist es, Objektpositionen auf dem Gelände zu berechnen wo die Objekte plaziert werden sollen. Das Ergebnis ist eine Include-Datei die alle Objekte beinhaltet.
    GEN benötigt einige Informationen über das Heightfield:
  • Die Dimensionen des Heightfield in der POV-Ray Szene (-X, -Y und -Z)
  • wo die Objekte plaziert werden sollen (plantmap in .GIF format)
  • Die Heightfield-Datei (24bit TGA).
    Das größtmögliche Format des Inputfiles ist 2000x2000 Pixel.

    Optionen für GEN:

    -i   Das Input File (Heightfield, 24bit TGA Format)
    -o  Output File (das .INC File, welches in PovRay die PovRay-Szene per #include eingeladen wird).
    -m gibt das plantmap File an. Es beinhaltet die Information wo die Objekte hin sollen.
    -p  gibt an bei welchem Palettenindex in der Plantmap die Objekte erscheinen sollen.
    -s   zum Einstellen des durchschnittlichen Abstandes ()space) der Objekte zueinander.
    -x   gibt an...
    -y   ...die Dimensionen (size of the heightfield)...
    -z   ...die das Heightfield in der späteren PovRay-Szene haben soll.
    -d   kein Objekt unterhalb dieser Höhe
    -u   kein Objekt oberhalb dieser Höhe
    -rp Die Option -rr schaltet die Zufällsabweichung von der berechneten Position an oder aus (random placement).
    -rp0 Zufallsabweichung aus
    -rp1 use Zufallsabweichung ein

    -rr Die Option -rr schaltet Zufallsrotation um Y-Achse an oder aus.
    -rr0 Zufallsrotation aus
    -rr1 Zufallsrotation ein

    -rs Die Option -rs schaltet Zufallsskalierung (random scaling) an oder aus.
    -rs0 Zufallsskalierung aus
    -rs1...100 Zufallsskalierung mit angegebenem Wert in Prozent

    -rd Zufallsgenerator Seed
    -n Der Name des Objektes das plaziert werden soll (die Objkekte in dem INC-outputfile haben dann diesen Namen).

    BEISPIEL:
    GEN.EXE -itestland.tga -otrees.inc -mplantmap.gif -x500 -y100 -z500 -p2 -s6 -d3 -r1 -no01

    Die Heightfield Dimensionen

    GEN nimmt an das das Heightfield im Punkt <0,0,0> seinen Ursprung hat.
    Um die Größe zu bestimmen, benötigt GEN den Vektor für die obere rechte Ecke.
    height_field {
       tga "scene2.tga"
       scale <512, 100, 512>
       pigment{ color White }
    }
    

    Die Entsprechenden Werte für das Heightfield im Beispiel sind:

     -x512 -y100 -z512 







    back to the options






    Die Plantmap

    Die Plantmap sagt GEN an wo die Objekte plaziert werden sollen. In diesem Beispiel nehme ich das Output-File von ROUGH. Die Objekte werden jeweils da erscheinen, wo in der Plantmap der Palettenindex 4 ist, hier in Rot.

    BEISPIEL:
    -mmap.gif -p4
    Die Datei map.gif wird als Plantmap verwendet, die Objekte werden bei Palettenindex 4 plaziert.




    Index 1
    Index 2
    Index 3
    Index 4







    Abstand zwischen den Objekten

    Die Option -s bestimmt den durchschnittlichen Abstand der Objekte zueinander.
  • -s5 ergibt 5 POV-Ray Einheiten Abstand
  • -s12 ergibt 12 POV-Ray Einheiten Abstand
    Je kleiner der Wert, desto dichter and mehr Objekte.
    -s5
    -s12




    Random Placement (Zufallsabweichung)

    Die Option -rp schaltet die Zufallsabweichung an oder aus. Dies hat keinen Einfluß auf die Anzahl der erstellten Objekte.
  • -rp0 aus
  • -rp1 ein
    -r0 no random
    -r1 random



    Random Rotation (Zufallsrotation)

    Die Option -rr schaltet die Zufallsrotation ein oder aus.
  • -rr0 aus
  • -rr1 ein

    Jedes Objekt wird um die Y-Achse rotiert (Zufallswert 0...360 Grad) bevor es plaziert wird.







    Das Outputfile

    Das Ergebnis von GEN ist ein Includefile für PovRay. Es beinhaltet alle erzeugten Objekte, die auf der Landschaftsoberfläche plaziert werden. Das File sieht dann zum Beispiel so aus:

    object{o01 translate<26.262139,7.031357,306.000076>}
    object{o01 translate<30.433226,3.125048,245.732643>}
    object{o01 translate<36.720893,3.515679,239.608036>}
    object{o01 translate<35.880596,5.468833,247.161550>}
    object{o01 translate<37.751442,3.906310,354.641423>}
    object{o01 translate<43.295404,3.906310,239.690802>}
     :      :      :       :        :          :
     :      :      :       :        :          :
     :      :      :       :        :          :
    object{o01 translate<468.526063,5.078202,433.829356>}
    





    CUTTER


    Die Idee von CUTTER ist es alle Objekte zu entfernen, die von der PovRay-Kamery in der Szene sowieso nicht gesehen werden können. Das verringert die Anzahl an Objekten und somit die Zeit zum Parsen, zum Rendern und auch den Speicherverbrauch.

    Um nicht nichtbare Objekte zu erkenne braucht CUTTER einige Informationen:

  • Position, Blickrichtung der Kamera
    Ich habe einen simplen Parser eingebaut, der Kamera-deklarationen in Pov-Files einlesen kann und die richtigen Werte ermittelt. Dazu muß einfach der Dateiname des Pov-Files eingegeben werden und CUTTER wird versuchen die Werte zu lesen.
  • Max-Distance, um weit entfernte Objekte auszufiltern..
  • Min-Distance, um Objekte im direkter Umgebung der Kamera beizubehalten, obwohl sie nicht direkt sichtbar sind. (sinnvoll zum Beispiel wenn hinter der Kamera ein Baum steht, man diesen zwar nicht sehen kann jedoch seinen Schatten.


  • Optionen für CUTTER sind:
    -i Name des INC-Files, das alle Objekte beinhaltet
    -o Name des Output-INC-Files, die später sichtbaren Objekte
    -p Name des POV-Files welches die Kamera Deklaration beinhaltet.
    -e max Abstand Limit (0 kein Limit, 1...~ Wert für Limit)
    -s min Abstand Limit (0 kein Limit, 1...~ Wert für Limit)

    Der Kamera Parser ist ziemlich einfach gehalten. Jeder Ausdruck sollte in einer eigenen Zeile stehen, und arithmetische Ausdrücke werden nicht unterstützt. Kommentare durch // werden erkannt, solche mit /*...*/ nicht.
    Dies zum Beispiel ist ein erkennbare Kameradeklaration:

      camera {
      //   location<100,20,120>  // this comment is OK
         location<360,3.80,75>
         direction <0,0,1>
         up <0,1,0>
         right <1.3333333,0,0>
         look_at <118,20,230>
      }
    

    Diese hier nicht:

      camera {
         location<360-17,3.80+clock*100,75-(clock*100)>
         direction <0,0,1+1>                      /* this comment is not OK */
         up <0,1,0>
         right <1.3333333,0,0>    look_at <118,20,230>
      }
    




    GIF2TGA / TGA2GIF

    GIF2TGA konvertiert GIF Heightfields in TGA Heightfields. Die Verwendung ist:

       GIF2TGA.EXE infile.gif outfile.tga
    

    TGA2GIF konvertiert TGA Hightfields in GIF Heightfields. Die Verwednung ist:

       TGA2GIF.EXE -iinfile.tga -ooutfile.gif
         -i specifies the input TGA file
         -o specifies the output GIF file
    






    HFMERGE

    Mit HFMERGE kann man zwei Heightfields miteinander verschmelzen und oder einige Veränderungen vornehmen. Man kann Heightfields addieren, subtrahieren, in der Höhe verschieben, skalieren, ab einer bestimmten Höhe abschneiden usw.

    Optionen für HFMERGE:

    -a   Name des input Heightfields A
    -b   Name des input Heightfields B (nur für Methode 1...5)
    -o   Name des Outputfiles
    -v   0...100% (nur für Methode 6...11)
    -m   Angabe der anzuwendenden Methode:
    -m1 (A+B)/2
    -m2 A+B
    -m3 A-B
    -m4 max(A,B)
    -m5 min(A,B)
    -m6 A+v% (shift up)
    -m7 A-v% (shift down)
    -m8 A below v% of total height
    -m9 A above v% of total height
    -m10 scale A by v% of total height
    -m11 A + random(v%)

    bei Verwendung der Methode 1..5 muß man sicherstellen, das beide Heightfields die gleichen Dimensionen haben!
    In dem Beispiel unten ist das erste Heightfield mit GFORGE erstellt worden und mit einem zweiten, einem Mandelbrot verschmolzen (Methode -m1)

    1.Heightfield (created with GFORGE)
    2.Heightfield (created with WinFract)
    Dies ist das Ergebnis, Ich habe ROUGH für die Colormaps verwendet, um einen besseren Eindruck des Geländes zu erhalten.






    Sample Objects

    Diese Objekte wurden extra so entworfen, das sie wenig Speicher verbrauchen. So können sie in großer zahl verwendet werden.
    Bäume, Farn und Gras, The Vegetation Package Die Bäume sehen aus der Ferne gar nicht so schlecht aus.






    Download the Genesis Toolkit





  • Joerg Schrammel - - Duisburg Germany