Tips en Trucs 2017

De Persistence of Vision Ray Tracer

Realistische afbeeldingen van 3D objecten (die je vanuit verschillende standpunten kunt bekijken en belichten) zijn waardevol voor kunstenaars, ontwerpers, architecten, wetenschappers, enz. Vaak ontbreken echter de instrumenten, vaardigheden of beiden om deze afbeeldingen te maken. Maak dan kennis met POV-Ray, een open source pakket waarmee je 3D afbeeldingen kunt maken.

Een ander open source pakket om fantastische 3D afbeeldingen te maken is Blender, maar daarvoor heb je een vaste hand nodig en liefst een Wacom tablet.

Wie echter wat kan programmeren of een beetje ervaring heeft met SVG om 2D afbeeldingen te maken, kan beter 3D objecten omschrijven met het toetsenbord dan deze met de muis te tekenen.

Introductie

Een raytracer is een programma om 3D afbeeldingen te creëren door wiskundig te voorspellen waar lichtstralen (rays) een object raken, waar ze dan door het object gereflecteerd of geabsorbeerd worden. POV-Ray (Persistence of Vision Raytracer) genereert afbeeldingen uit een beschrijvende tekst. En als je de POV-Ray Hall of Fame bekijkt, merk je al vlug hoe realistisch en surrealistisch de door POV-Ray geproduceerde afbeeldingen kunnen zijn.

POV-Ray kan je met een beetje hulp inzetten om data weer te geven, zoals rekenbladen en andere programma's gebruikt worden om grafieken van cijfergegevens te maken. Daar POV-Ray afbeeldingen door scripts aangemaakt worden, kunnen andere programma's gegevens verzamelen en verwerken tot scripts die door POV-Ray in afbeeldingen worden omgezet.

POV-Ray is platformonafhankelijk en werkt dus op Linux, macOS en Windows.

POV-Ray tutorials leren je hoe je basisobjecten moet creëren en samenvoegen tot complexere objecten. Daarna kan je leren hoe je een video kunt maken door de objecten te animeren.

Licht, camera en objecten

Om een realistische 3D afbeelding aan te maken, moet je licht en schaduw op een natuurlijke manier zijn werk laten doen. De tutorial begint met het positioneren van de camera, de positie van de kijker. Een object om naar te kijken en belichting die zorgt voor reflecties en het werpen van schaduw door het object.

Daarna worden de basisvormen beschreven: bol, cilinder, kegel, kubus en een torus. Deze basisobjecten kan je combineren door samenvoegen (logische OR), doorsnede (logische AND) of het verschil (logische XOR). Met deze techniek kan je bijvoorbeeld een halve torus maken door een torus half te verbergen met een kubus. Voeg je aan beide uitgangen nog een cilinder toe. Sluit dan uiteindelijk de cilinders af met een andere halve torus en je bekomt een schakel van een ketting. Door verschillende schakels aan elkaar te schakelen, maak je een ketting.

De tutorial behandelt ook materialen zoals hout en lucht. Voor een beginner moeilijke materie, gelukkig voorziet POV-Ray ons van macro's met voorgedefinieerde populaire materialen.

POV-Ray installeren

Elke zichzelf respecterende distributie heeft POV-Ray in zijn standaard softwarebronnen opgenomen. Op openSUSE Leap 42.2 installeer je POV-Ray met de volgende opdracht:

dany@laptop:~> sudo zypper install povray
root's password:
Gegevens van installatiebron laden...
Lezen van geïnstalleerde pakketten...
Pakketafhankelijkheden oplossen...

Het volgende NIEUWE pakket zal worden geïnstalleerd:
  povray

1 nieuw te installeren pakket.
Totale downloadgrootte: 11,0 MiB. Reeds in de cache: 0 B. Na de bewerking zal aanvullend 18,2 MiB worden gebruikt.
Doorgaan? [j/n/...? alle opties tonen] (j): 
pakket povray-3.7.0.0-4.31.x86_64 wordt opgehaald                                              (1/1),  11,0 MiB ( 18,2 MiB uitgepakt)
Ophalen: povray-3.7.0.0-4.31.x86_64.rpm .........................................................................[gereed (2,5 MiB/s)]
Controleren op conflicten tussen bestanden: .................................................................................[gereed]
(1/1) Installeert: povray-3.7.0.0-4.31.x86_64 ...............................................................................[gereed]

Een eenvoudig voorbeeld

Sla het volgende script op als HelloSphere.pov.

// Annotated example from POV-Ray tutorial
// http://www.povray.org/documentation/3.7.0/t2_2.html#t2_2_1_6
//
// Generate PNG with:
//
//   $ povray +IHelloSphere.pov
//

#include "colors.inc"  // Include color name macros

background { color Cyan }

// Lights!
//
light_source {
  <2, 4, -3>           // X, Y, and Z coordinates of the light source
  color White
}

// Camera!
//
camera {
  location <0, 2, -3>  // X, Y and Z coordinates of the camera
  look_at  <0, 1,  2>  // X, Y and Z coordinates of where the camera is aimed
}

// Object!
//
sphere {
  <0, 1, 2>, 2         // X, Y, Z and radius of the sphere
  texture {
    pigment { color Yellow }
  }
}

Laat het script door POV-Ray uitvoeren met de volgende opdracht:

dany@laptop:~> povray +IHelloSphere.pov
povray: cannot open the user configuration file /home/dany/.povray/3.7/povray.conf: No such file or directory
Persistence of Vision(tm) Ray Tracer Version 3.7.0.unofficial (g++ 4.8 @
 x86_64-suse-linux-gnu)
This is an unofficial version compiled by:
 SUSE LINUX GmbH, Nuernberg, Germany
 The POV-Ray Team is not responsible for supporting this version.

POV-Ray is based on DKBTrace 2.12 by David K. Buck & Aaron A. Collins
Copyright 1991-2013 Persistence of Vision Raytracer Pty. Ltd.

Primary POV-Ray 3.7 Architects/Developers: (Alphabetically)
  Chris Cason         Thorsten Froehlich  Christoph Lipka   

With Assistance From: (Alphabetically)
  Nicolas Calimet     Jerome Grimbert     James Holsenback    Christoph Hormann 
  Nathan Kopp         Juha Nieminen     

Past Contributors: (Alphabetically)
  Steve Anger         Eric Barish         Dieter Bayer        David K. Buck     
  Nicolas Calimet     Chris Cason         Aaron A. Collins    Chris Dailey      
  Steve Demlow        Andreas Dilger      Alexander Enzmann   Dan Farmer        
  Thorsten Froehlich  Mark Gordon         James Holsenback    Christoph Hormann 
  Mike Hough          Chris Huff          Kari Kivisalo       Nathan Kopp       
  Lutz Kretzschmar    Christoph Lipka     Jochen Lippert      Pascal Massimino  
  Jim McElhiney       Douglas Muir        Juha Nieminen       Ron Parker        
  Bill Pulver         Eduard Schwan       Wlodzimierz Skiba   Robert Skinner    
  Yvo Smellenbergh    Zsolt Szalavari     Scott Taylor        Massimo Valentini 
  Timothy Wegner      Drew Wells          Chris Young       

Other contributors are listed in the documentation.

Support libraries used by POV-Ray:
  ZLib 1.2.8, Copyright 1995-2012 Jean-loup Gailly and Mark Adler
  LibPNG 1.6.8, Copyright 1998-2012 Glenn Randers-Pehrson
  LibJPEG 80, Copyright 1991-2013 Thomas G. Lane, Guido Vollbeding
  LibTIFF 4.0.7, Copyright 1988-1997 Sam Leffler, 1991-1997 SGI
  Boost 1.54, http://www.boost.org/
  OpenEXR, Copyright (c) 2004-2007, Industrial Light & Magic.

Parser Options
  Input file: HelloSphere.pov
  Remove bounds........On 
  Split unions.........Off
  Library paths:
    /usr/share/povray-3.7
    /usr/share/povray-3.7/ini
    /usr/share/povray-3.7/include
  Clock value:    0.000  (Animation off)
Image Output Options
  Image resolution.....800 by 600 (rows 1 to 600, columns 1 to 800).
  Output file..........HelloSphere.png, 24 bpp PNG
  Dithering............Off
  Graphic display......Off
  Mosaic preview.......Off
  Continued trace......Off
Information Output Options
  All Streams to console..........On 
  Debug Stream to console.........On 
  Fatal Stream to console.........On 
  Render Stream to console........On 
  Statistics Stream to console....On 
  Warning Stream to console.......On 
==== [Parsing...] ==========================================================
Possible Parse Error: assumed_gamma not specified in this POV-Ray 3.7 or later
 scene. Future versions of POV-Ray may consider this a fatal error. To avoid
 this warning, explicitly specify 'assumed_gamma 1.0' in the global_settings
 section. See the documentation for more details.
Parse Warning: This scene had other declarations preceding the first #version
 directive. Please be aware that as of POV-Ray 3.7, unless already specified via
 an INI option, a #version is expected as the first declaration in a scene file.
 If this is not done, POV-Ray may apply compatibility settings to some features
 that are intended to make pre-3.7 scenes render as designed. You are strongly
 encouraged to add a #version statement to the scene to make your intent clear.
 Future versions of POV-Ray may make the presence of a #version mandatory.
----------------------------------------------------------------------------
Parser Statistics
----------------------------------------------------------------------------
Finite Objects:            1
Infinite Objects:          0
Light Sources:             1
Total:                     2
----------------------------------------------------------------------------
Parser Time
  Parse Time:       0 hours  0 minutes  0 seconds (0.001 seconds)
              using 1 thread(s) with 0.000 CPU-seconds total
  Bounding Time:    0 hours  0 minutes  0 seconds (0.000 seconds)
              using 1 thread(s) with 0.000 CPU-seconds total
----------------------------------------------------------------------------
Render Options
  Quality:  9
  Bounding boxes.......On   Bounding threshold: 3
  Antialiasing.........Off
==== [Rendering...] ========================================================
Rendered 480000 of 480000 pixels (100%)
----------------------------------------------------------------------------
Render Statistics
Image Resolution 800 x 600
----------------------------------------------------------------------------
Pixels:           480000   Samples:               0   Smpls/Pxl: 0.00
Rays:             480000   Saved:                 0   Max Level: 1/5
----------------------------------------------------------------------------
Ray->Shape Intersection          Tests       Succeeded  Percentage
----------------------------------------------------------------------------
Sphere                          675205          298092     44.15
----------------------------------------------------------------------------
Shadow Ray Tests:            195205   Succeeded:                     0
----------------------------------------------------------------------------
----------------------------------------------------------------------------
Render Time:
  Photon Time:      No photons
  Radiosity Time:   No radiosity
  Trace Time:       0 hours  0 minutes  0 seconds (0.114 seconds)
              using 4 thread(s) with 0.358 CPU-seconds total
POV-Ray finished

POV-Ray voert de opdrachten in het script uit en maakt daarmee de afbeelding HelloSphere.png aan:
POV-Ray HelloSphere

Actie

Voor het leren maken van animaties kan je terecht bij HowTo:Create animations op de POV-Ray wiki pagina's.

Bij het maken van animaties gebruikt POV-Ray een klok om verschillende beelden te aan te maken en deze als PGN-bestanden op te slaan. Voor elk beeld kan je objecten verplaatsen, de camera bewegen, de belichting aanpassen en deze acties combineren. Om al deze PNG-afbeelding om te zetten naar een video heb je extra software nodig.

Het script

Het volgende script (flying.pov) laat een kind schommelen:

// Created by Kevin Cole <kjcole@ubuntu> 2012.12.27
// This software is released under the the Creative Commons 
// Attribution-NonCommercial-ShareAlike 3.0 licence (CC BY-NC-SA 3.0)
// http://creativecommons.org/licenses/by-nc-sa/3.0/deed.en_US
//
// Animated "Kermit" on a swing, with flying camera.
//

#include "colors.inc"      // Basic colors
#include "woods.inc"       // Wood grains
#include "skies.inc"       // Skies
#include "transforms.inc"  // Non-standard transformation macros

global_settings { max_trace_level 20 }

//light_source { < 300, 300, -500> White }  // From the right, above, behind camera
light_source { <-250, 300, -200> White }
light_source { <-10, 0, -1000> Gray50 }

//background { color Gray50 }
background { color <0.75, 0.75, 1> }
sky_sphere { S_Cloud2 }

plane { <0, 1, 0>, -1
  pigment {
    checker color Red, color Blue
  }
}

//sphere { <0, 0, 0> 1     // DEBUG - Orientation sphere
//  pigment { Green }      // DEBUG - Orientation sphere
//}                        // DEBUG - Orientation sphere

#declare Half_Torus = difference {
  torus {
    4,1           // Major (orbit), minor (planet)
    sturm         // Use slower but more accurate calculations
    rotate x*-90  // so we can see it from the top
  }
  box { <-5, -5, -1>, <5, 0, 1> } // Masks out lower half
}

#declare Flip_It_Over    = x*180;
#declare Torus_Translate = 8;

#declare Chain_Segment = cylinder {
  <0, 4, 0>, <0, -4, 0>, 1
}

#declare Chain_Gold = texture {
  pigment { BrightGold }
  finish {
    ambient .1
    diffuse .4
    reflection .25
    specular 1
    metallic
  }
}

#declare Link = union {
  object {
    Half_Torus
    translate y*Torus_Translate/2    // Move half-torus up
  }
  object {
    Half_Torus
    rotate Flip_It_Over              // Upside down
    translate -y*Torus_Translate/2   // Move upside-down half-torus down
  }
  object {
    Chain_Segment                    // Joining cylinder
    translate x*Torus_Translate/2    // Move it to right side of half-tori
  }
  object {
    Chain_Segment                    // Joining cylinder
    translate -x*Torus_Translate/2   // Move it to left side of half-tori
  }
  texture { Chain_Gold }
}  

#declare Link_Translate = Torus_Translate*2-2*y;

#declare Link_Pair =  union {
    object { Link }
    object { Link translate y*Link_Translate rotate y*90 }
  }

#declare Chain = union {
  object { Link_Pair translate  y*Link_Translate*2 }
  object { Link_Pair translate  y*Link_Translate*4 }
  object { Link_Pair translate  y*Link_Translate*6 }
  object { Link_Pair}
  object { Link_Pair translate -y*Link_Translate*2 }
  object { Link_Pair translate -y*Link_Translate*4 }
  object { Link_Pair translate -y*Link_Translate*6 }
  rotate y*90
}

#declare Chains = union {
  object { Chain scale 0.1 translate -5*x }
  object { Chain scale 0.1 translate  5*x }
//rotate <0, 45, 30>
}

#declare Top_Bar = object {
  cylinder { <-10, 10, 0>, <10, 10, 0>, 1 }
}

#declare Seat = object {
  box { <-6, -5, -1>, <6, 0, 0> }
  texture { T_Wood1 }
  rotate 90*x
  translate <0, -9, 2.5>
}

#declare Swing = union {
  object { Chains }
  object { Seat }
//object { Top_Bar }
}

#declare Right_Eye = union {
  sphere { <-0.8, 16.5, -2.0>, 0.65  // Right eye
    pigment { Black }
  }
  difference {
    sphere { <-0.8, 16.5, -2.0>, 0.66  // Right eye
      pigment { White }
    }
    cylinder { <-0.8, 16.5, -2.0> <-0.6, 16.5, -2.66>, 0.2  // Right pupil
      pigment { Black }
    }
  }
}

#declare Left_Eye = union {
  sphere { <0.8, 16.5, -2.0>, 0.65   // Left eye
    pigment { Black }
  }
  difference {
    sphere { <0.8, 16.5, -2.0>, 0.66   // Left eye
      pigment { White }
    }
    cylinder { <0.8, 16.5, -2.0> <1.0, 16.5, -2.66>, 0.2  // Left pupil
      pigment { Black }
    }
  }
}

#declare Head = union {
//sphere { <0, 16, 0>, 2.5 }
  sphere   { <0, 16.5, 0>, 2 }
  cylinder { <0, 16.5, 0>, <0, 15.5, 0>, 2 }
  sphere   { <0, 15.5, 0>, 2 }
  object { Right_Eye }
  object { Left_Eye }
}

#declare Neck = union {
  cylinder { <0, 13.5, 0>, <0, 13, 0>, 0.5 }
  sphere   { <0, 13.5, 0>, 0.5 }
  sphere   { <0, 13,   0>, 0.5 }
}

#declare Torso = union {
  cylinder { <0, 11.5, 0>, <0, 9.5, 0>, 1.5 }
  sphere   { <0, 11.5, 0>, 1.5 }
  sphere   { <0,  9.5, 0>, 1.5 }
  sphere   { <-0.5, 8.5, 0>, 1.2 }
  sphere   { < 0.5, 8.5, 0>, 1.2 }
}

#declare Right_Arm = union {
  cylinder { <-1.5, 12, 0>, <-4, 12, 0>, 0.66 }
  sphere   { <-1.5, 12, 0>, 0.66 }
  sphere   { <-4,   12, 0>, 0.66 }
}

#declare Left_Arm = union {
  Right_Arm
  translate 5.5*x
}

#declare Right_Leg = union {
  cylinder { <-1, 8,  0>, <-1, 8, -5>, 0.66 }
  sphere   { <-1, 8,  0>, 0.66 }
  sphere   { <-1, 8, -5>, 0.66 }
  cylinder { <-1, 8, -5>, <-1, 4, -5>, 0.66 }
  sphere   { <-1, 4, -5>, 0.66 }
  cone     { <-1, 4, -5>, 0.66,
             <-1, 4, -7>, 0.2 }
  sphere   { <-1, 4, -7>, 0.2 }
}

#declare Left_Leg = object {
  Right_Leg
  translate 2*x
}

#declare Kid = union {
  object { Head }
  object { Neck }
  object { Torso }
  object { Right_Arm }
  object { Left_Arm }
  object { Right_Leg }
  object { Left_Leg }
  pigment { Green }
}

camera {
  look_at  <0  10, 0>
  location <-35*sin(radians(clock*2)), 10, -35*cos(radians(clock*2))>
}

union {
  object { Swing 
    translate 15*y
  }
  object { Kid
    translate -0.2*y
  }
//rotate <0, 45, 30>       // Side view

  // Animate!
  #declare Angle = 0;
  #switch (clock)
    #range (0, 44)
      #declare Angle = clock;
    #break
    #range (45, 134)
      #declare Angle = 45 - (clock - 45);
    #break
    #range (135, 179)
      #declare Angle = (clock - 135) - 45;
    #break
  #end
  Rotate_Around_Trans(<Angle, 0, 0>, <0, 25.5, 0>)
}

Het onderste gedeelte van het script // Animate! kijkt naar de POV-Ray klok en maakt bij elke klokslag een nieuw beeld aan. Daarbij draait de camera rond de scene en draait een object. De rest van het script beschrijft de objecten en de scene.

Voor animaties heb je naast een script een tweede bestand nodig om de klok te beschrijven (flying.ini):

Input_File_Name=flying.pov
Initial_Frame =   1
Final_Frame   = 180
Initial_Clock =   0.0
Final_Clock   = 179.0

POV-Ray kan met behulp van het script flying.pov de voorwerpen en de scene in elkaar zetten en met behulp van de klokbeschrijving (flying.ini) de snelheid van de animatie en de lengte (aantal beelden) de beelden voor de animatie aanmaken. Met de volgende opdracht:

dany@laptop:~> povray +Iflying.pov flying.ini
povray: cannot open the user configuration file /home/dany/.povray/3.7/povray.conf: No such file or directory
Persistence of Vision(tm) Ray Tracer Version 3.7.0.unofficial (g++ 4.8 @
 x86_64-suse-linux-gnu)
This is an unofficial version compiled by:
 SUSE LINUX GmbH, Nuernberg, Germany
 The POV-Ray Team is not responsible for supporting this version.

POV-Ray is based on DKBTrace 2.12 by David K. Buck & Aaron A. Collins
Copyright 1991-2013 Persistence of Vision Raytracer Pty. Ltd.

Primary POV-Ray 3.7 Architects/Developers: (Alphabetically)
  Chris Cason         Thorsten Froehlich  Christoph Lipka   

With Assistance From: (Alphabetically)
  Nicolas Calimet     Jerome Grimbert     James Holsenback    Christoph Hormann 
  Nathan Kopp         Juha Nieminen     

Past Contributors: (Alphabetically)
  Steve Anger         Eric Barish         Dieter Bayer        David K. Buck     
  Nicolas Calimet     Chris Cason         Aaron A. Collins    Chris Dailey      
  Steve Demlow        Andreas Dilger      Alexander Enzmann   Dan Farmer        
  Thorsten Froehlich  Mark Gordon         James Holsenback    Christoph Hormann 
  Mike Hough          Chris Huff          Kari Kivisalo       Nathan Kopp       
  Lutz Kretzschmar    Christoph Lipka     Jochen Lippert      Pascal Massimino  
  Jim McElhiney       Douglas Muir        Juha Nieminen       Ron Parker        
  Bill Pulver         Eduard Schwan       Wlodzimierz Skiba   Robert Skinner    
  Yvo Smellenbergh    Zsolt Szalavari     Scott Taylor        Massimo Valentini 
  Timothy Wegner      Drew Wells          Chris Young       

Other contributors are listed in the documentation.

Support libraries used by POV-Ray:
  ZLib 1.2.8, Copyright 1995-2012 Jean-loup Gailly and Mark Adler
  LibPNG 1.6.8, Copyright 1998-2012 Glenn Randers-Pehrson
  LibJPEG 80, Copyright 1991-2013 Thomas G. Lane, Guido Vollbeding
  LibTIFF 4.0.7, Copyright 1988-1997 Sam Leffler, 1991-1997 SGI
  Boost 1.54, http://www.boost.org/
  OpenEXR, Copyright (c) 2004-2007, Industrial Light & Magic.


Rendering frame 1 of 180

Rendering frame 1 of 180


Parser Options
  Input file: flying.pov
  Remove bounds........On 
  Split unions.........Off
  Library paths:
    /usr/share/povray-3.7
    /usr/share/povray-3.7/ini
    /usr/share/povray-3.7/include
Animation Options
  Initial Frame:        1  Final Frame:      180
  Frame Step:           1
  Initial Clock:    0.000  Final Clock:  179.000
  Cyclic Animation.....Off  Field render.........Off  Odd lines/frames.....Off
Image Output Options
  Image resolution.....800 by 600 (rows 1 to 600, columns 1 to 800).
  Output file..........flying001.png, 24 bpp PNG
  Dithering............Off
  Graphic display......Off
  Mosaic preview.......Off
  Continued trace......Off
Information Output Options
  All Streams to console..........On 
  Debug Stream to console.........On 
  Fatal Stream to console.........On 
  Render Stream to console........On 
  Statistics Stream to console....On 
  Warning Stream to console.......On 
==== [Parsing...] ==========================================================
Possible Parse Error: assumed_gamma not specified in this POV-Ray 3.7 or later
 scene. Future versions of POV-Ray may consider this a fatal error. To avoid
 this warning, explicitly specify 'assumed_gamma 1.0' in the global_settings
 section. See the documentation for more details.
Parse Warning: This scene had other declarations preceding the first #version
 directive. Please be aware that as of POV-Ray 3.7, unless already specified via
 an INI option, a #version is expected as the first declaration in a scene file.
 If this is not done, POV-Ray may apply compatibility settings to some features
 that are intended to make pre-3.7 scenes render as designed. You are strongly
 encouraged to add a #version statement to the scene to make your intent clear.
 Future versions of POV-Ray may make the presence of a #version mandatory.
----------------------------------------------------------------------------
Parser Statistics
----------------------------------------------------------------------------
Finite Objects:          148
Infinite Objects:          1
Light Sources:             2
Total:                   151
----------------------------------------------------------------------------
Parser Time
  Parse Time:       0 hours  0 minutes  0 seconds (0.010 seconds)
              using 1 thread(s) with 0.009 CPU-seconds total
  Bounding Time:    0 hours  0 minutes  0 seconds (0.001 seconds)
              using 1 thread(s) with 0.000 CPU-seconds total
----------------------------------------------------------------------------
Render Options
  Quality:  9
  Bounding boxes.......On   Bounding threshold: 3
  Antialiasing.........Off
==== [Rendering...] ========================================================
Rendered 480000 of 480000 pixels (100%)
----------------------------------------------------------------------------
Render Statistics
Image Resolution 800 x 600
----------------------------------------------------------------------------
Pixels:           480000   Samples:               0   Smpls/Pxl: 0.00
Rays:             485568   Saved:                 6   Max Level: 4/20
----------------------------------------------------------------------------
Ray->Shape Intersection          Tests       Succeeded  Percentage
----------------------------------------------------------------------------
Box                              50278           25447     50.61
Cone/Cylinder                    52940           17377     32.82
CSG Intersection                 37237            5632     15.12
Plane                           979451          266819     27.24
Sphere                          125831           21807     17.33
Torus                            31948           10139     31.74
Torus Bound                      31948           21739     68.04
Bounding Box                   4822919          578294     11.99
----------------------------------------------------------------------------
Roots tested:                 21739   eliminated:                 7959
Shadow Ray Tests:            505208   Succeeded:                 12000
Shadow Cache Hits:            11319
Reflected Rays:                5568
----------------------------------------------------------------------------
----------------------------------------------------------------------------
Render Time:
  Photon Time:      No photons
  Radiosity Time:   No radiosity
  Trace Time:       0 hours  0 minutes  0 seconds (0.302 seconds)
              using 4 thread(s) with 1.075 CPU-seconds total

...

Rendering frame 180 of 180

Parser Options
  Input file: flying.pov
  Remove bounds........On 
  Split unions.........Off
  Library paths:
    /usr/share/povray-3.7
    /usr/share/povray-3.7/ini
    /usr/share/povray-3.7/include
Animation Options
  Initial Frame:        1  Final Frame:      180
  Frame Step:           1
  Initial Clock:    0.000  Final Clock:  179.000
  Cyclic Animation.....Off  Field render.........Off  Odd lines/frames.....Off
Image Output Options
  Image resolution.....800 by 600 (rows 1 to 600, columns 1 to 800).
  Output file..........flying180.png, 24 bpp PNG
  Dithering............Off
  Graphic display......Off
  Mosaic preview.......Off
  Continued trace......Off
Information Output Options
  All Streams to console..........On 
  Debug Stream to console.........On 
  Fatal Stream to console.........On 
  Render Stream to console........On 
  Statistics Stream to console....On 
  Warning Stream to console.......On 
==== [Parsing...] ==========================================================
Possible Parse Error: assumed_gamma not specified in this POV-Ray 3.7 or later
 scene. Future versions of POV-Ray may consider this a fatal error. To avoid
 this warning, explicitly specify 'assumed_gamma 1.0' in the global_settings
 section. See the documentation for more details.
Parse Warning: This scene had other declarations preceding the first #version
 directive. Please be aware that as of POV-Ray 3.7, unless already specified via
 an INI option, a #version is expected as the first declaration in a scene file.
 If this is not done, POV-Ray may apply compatibility settings to some features
 that are intended to make pre-3.7 scenes render as designed. You are strongly
 encouraged to add a #version statement to the scene to make your intent clear.
 Future versions of POV-Ray may make the presence of a #version mandatory.
----------------------------------------------------------------------------
Parser Statistics
----------------------------------------------------------------------------
Finite Objects:          148
Infinite Objects:          1
Light Sources:             2
Total:                   151
----------------------------------------------------------------------------
Parser Time
  Parse Time:       0 hours  0 minutes  0 seconds (0.005 seconds)
              using 1 thread(s) with 0.005 CPU-seconds total
  Bounding Time:    0 hours  0 minutes  0 seconds (0.000 seconds)
              using 1 thread(s) with 0.000 CPU-seconds total
----------------------------------------------------------------------------
Render Options
  Quality:  9
  Bounding boxes.......On   Bounding threshold: 3
  Antialiasing.........Off
==== [Rendering...] ========================================================
Rendered 480000 of 480000 pixels (100%)
----------------------------------------------------------------------------
Render Statistics
Image Resolution 800 x 600
----------------------------------------------------------------------------
Pixels:           480000   Samples:               0   Smpls/Pxl: 0.00
Rays:             485367   Saved:                12   Max Level: 4/20
----------------------------------------------------------------------------
Ray->Shape Intersection          Tests       Succeeded  Percentage
----------------------------------------------------------------------------
Box                              64926           24591     37.88
Cone/Cylinder                    52983           17081     32.24
CSG Intersection                 37419            5616     15.01
Plane                           979678          267855     27.34
Sphere                          115764           22915     19.79
Torus                            31650            9936     31.39
Torus Bound                      31650           21558     68.11
Bounding Box                   5574471          617392     11.08
----------------------------------------------------------------------------
Roots tested:                 21558   eliminated:                 8152
Shadow Ray Tests:            505874   Succeeded:                 12224
Shadow Cache Hits:            11551
Reflected Rays:                5367
----------------------------------------------------------------------------
----------------------------------------------------------------------------
Render Time:
  Photon Time:      No photons
  Radiosity Time:   No radiosity
  Trace Time:       0 hours  0 minutes  0 seconds (0.307 seconds)
              using 4 thread(s) with 1.099 CPU-seconds total
POV-Ray finished

Het eerste beeld:
POV-Ray animatie

Beelden naar een video omzetten

Eerst voegen we de beelden samen tot een videobestand. Dit kan met behulp van het programma png2yuv, een onderdeel van het pakket mjpegtools:

dany@laptop:~> png2yuv -I p -f 25 -j flying%03d.png -b 1 > flying.yuv
   INFO: [png2yuv] Parsing & checking input files.
   INFO: [png2yuv] Image dimensions are 800x600
   INFO: [png2yuv] Movie frame rate is:  25.000000 frames/second
   INFO: [png2yuv] Non-interlaced/progressive frames.
   INFO: [png2yuv] Frame size:  800 x 600
   INFO: [png2yuv] Now generating YUV4MPEG stream.
flying181.png: No such file or directory
libpng error: PNG file open failed
**ERROR: [png2yuv] flying181.png: Corrupted PNG file !
   INFO: [png2yuv] Read from 'flying181.png' failed:  No such file or directory
   INFO: [png2yuv] No more frames.  Stopping.

Video-formaten zijn er in overvloed, maar weinig video-formaten mag je vrij gebruiken. Laten we beginnen met een video-codec van Google. Daarvoor installeer je de volgende tools:

dany@laptop:~> sudo zypper install vpx-tools
root's password:
Gegevens van installatiebron laden...
Lezen van geïnstalleerde pakketten...
Pakketafhankelijkheden oplossen...

Het volgende NIEUWE pakket zal worden geïnstalleerd:
  vpx-tools

1 nieuw te installeren pakket.
Totale downloadgrootte: 73,4 KiB. Reeds in de cache: 0 B. Na de bewerking zal aanvullend 203,8 KiB worden gebruikt.
Doorgaan? [j/n/...? alle opties tonen] (j): 
pakket vpx-tools-1.3.0-4.5.x86_64 wordt opgehaald                                              (1/1),  73,4 KiB (203,8 KiB uitgepakt)
Ophalen: vpx-tools-1.3.0-4.5.x86_64.rpm .........................................................................[gereed (1,1 KiB/s)]
Controleren op conflicten tussen bestanden: .................................................................................[gereed]
(1/1) Installeert: vpx-tools-1.3.0-4.5.x86_64 ...............................................................................[gereed]

Met de volgende opdracht maak je van onze animatievideo een webm video:

dany@laptop:~> vpxenc --good --cpu-used=0 --auto-alt-ref=1 --lag-in-frames=16 --end-usage=vbr --passes=2 --threads=2 --target-bitrate=3000 -o flying.webm flying.yuv 
Pass 1/2 frame  180/181    26064B    1158b/f   28960b/s 1951930 us (92.22 fps)
Pass 2/2 frame  180/165  2543615B   16851 ms 10.68 fps [ETA  0:00:01]   10727F  10556F  10578F  10844F  10677F  10858F  11236F  11223Pass 2/2 frame  180/180  2708300B  120368b/f 3009222b/s   16168 ms (11.13 fps)

Wie liever werkt met de video-codec Ogg Theora, moet een hulpprogramma downloaden:

dany@laptop:~> wget http://firefogg.org/nightly/ffmpeg2theora.linux
--2017-06-30 15:59:02--  http://firefogg.org/nightly/ffmpeg2theora.linux
Herleiden van firefogg.org (firefogg.org)... 138.201.70.161, 2a01:4f8:172:120f:1::161
Verbinding maken met firefogg.org (firefogg.org)|138.201.70.161|:80... verbonden.
HTTP-verzoek is verzonden; wachten op antwoord... 200 OK
Lengte: 8662272 (8,3M)
Wordt opgeslagen als: ‘ffmpeg2theora.linux’

100%[===========================================================================================>] 8.662.272   2,64MB/s   in 3,1s   

2017-06-30 15:59:05 (2,64 MB/s) - '‘ffmpeg2theora.linux’' opgeslagen [8662272/8662272]

Het programma uitvoerbaar maken:

dany@laptop:~> chmod +x ffmpeg2theora.linux

En tenslotte het videobestand aanmaken:

dany@laptop:~> ./ffmpeg2theora.linux --optimize --videoquality 10 --videobitrate 16778 -o flying.ogv flying.yuv
Input #0, yuv4mpegpipe, from 'flying.yuv':
  Duration: 00:00:07.20, start: 0.000000, bitrate: 144001 kb/s
    Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p(progressive), 800x600, 25 fps, 25 tbr, 25 tbn, 25 tbc

  0:00:07.20 audio: 0kbps video: 21079kbps, time elapsed: 00:00:10             
  0:00:07.20 audio: 0kbps video: 21079kbps, time elapsed: 00:00:10

Het resultaat: