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.
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.
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.
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]
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:
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 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:
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: