Home Creatief met POVRay Toch maar Versie 3 gebruiken? De monitor en de achtergrond
 

Camera

Ik heb even bij de cursisten rondgevraagd en allemaal hebben ze inmidddels versie3 met goed gevolg kunnen installeren, mede dankzij de aanwijzingen in de vorige cursus volgens velen. Een heleboel nieuwe mogelijkheden staan nu voor ons open. Maar laten we als eerste eens onze spliksplinternieuwe camera gaan bekijken. Wat kunnen we nu voor zaken instellen en waar dienen de nieuwe knopjes voor.

Laten we eerst eens terugkijken naar het oude toestelletje. dat was een simpele gaatjescamera. Niets in te stellen zoals diafragma, scherptediepte, belichtingstijd enz. Echt vol-automatisch dus. Het enige wat we moeten doen is de camera ergens opstellen, hem richten en klaar is Kees! Wel moeten we in de gaten houden wat voor lengte/breedte verhouding we willen hebben. Ons beeldscherm (en ook de TV) hebben een verhouding van 4:3 en dat aanhoudend komen we dan op

camera {
        location < 1, 2, -3 >
        direction <0, 0, 2 >
        up <0, 1, 0 >
        right < 1.33, 0, 0 >
        look_at < 0, 1, 2 >
 }

voor 1 naar rechts, 2 naar boven en 3 naar achteren voor de plaats van de camera die gericht is op het punt boven de Y-as een omhoog en twee naar voren. De combinatie van 'up' en right' geven de gewenste 4:3 beeldverhouding. De wat verkeerd benaamde 'direction' stelt de focale lengte in. Oftewel, heb je een telelens, een groothoeklens of iets er tussenin. Wat hier is opgegeven komt ongeveer overeen met wat een kleinbeeldcamera met een gewone standaardlens zonder zoom ziet. Die zichthoek kennen de meeste mensen wel uit ervaring.

Om te zorgen dat de beeldpixels vierkant zijn moet je in de .ini file de aantallen pixels in beide richtingen goed opgeven. Dus 800 x 600 of 640 x 480 e.d. combinaties. Doe je dat niet dan krijg je zeer vreemde in 1 richting uitgerekte of ingekrompen beelden op het scherm te zien.

Omschrijving

De complete beschrijving van alle mogelijkheden die de camera heeft is terug te vinden in de syntax zoals in de nu volgende listing:

  camera {
        [ perspective | orthographic |
           fisheye | ultra_wide_angle |
           omnimax | panoramic  |
     cylinder FLOAT ]
        location <VECTOR>
         look_at <VECTOR>
         right <VECTOR>
   up <VECTOR>
        direction <VECTOR>
   sky <VECTOR>
        right <VECTOR>
        angle FLOAT
        blur_samples FLOAT
        aperture FLOAT
        focal_point <VECTOR>
        normal { NORMAL }
   }

In een echte handleiding die bij een fototoestel geleverd wordt zit altijd een kort overzicht van alle functies, veelal begeleid door een afbeelding waarbij de knopjes een nummertje hebben. Ik zal nu eerst zo'n soort beschrijving geven. Ten eerste is er het type van projectie. Default is 'perspective' wat overeen komt met onze oude gaatjescamera (pinhole camera, Camera obscura). Maar let op, afhankelijk van wat voor soort projectie je gebruikt kunnen parameters een andere werking hebben of zelfs overbodig zijn. De bekende parameters look_at, right, up, direction en sky werken bij de keuze 'perspective' zoals vroeger. We moeten ervoor zorgen de de zichthoek van de camera binnen de perken blijft tussen 0 en 180 graden. Bij een hoek kleiner dan 20 graden zit je als het ware door een verrekijker te koekeloeren en bij hoeken groter dan ons eigen blikveld gaan we denken aan visse(n)oog camera's en zo. De naam van de projectie zegt al dat de afbeelding perspectief heeft: dingen in de verte worden kleiner. Er is een horizon en een verdwijnpunt. Wat er bij deze projectie ook nog ingesteld kan worden is de kijkhoek. Daarvoor hebben we nu 'angle' om dat simpel te doen. Een andere manier om er tegen aan te kijken is de verhouding in lengte tussen de direction vector en right vector. Maar dat vergt wat meer uitleg over wiskunde en als ik de cursisten zo bekijk dan brandt men niet van nieuwsgierigheid; het verhaaltje tot nu toe is al saai genoeg. Ok, niet iedereen hoeft enthousiast te reageren op het nieuwe fototoestel. Ook wat moeilijk uit te leggen is de orthogonale projectie maar stel je voor dat een je een groot vlak neerzet en daar dan door middel van loodrechte lijnen de objecten op projecteert. Zet dus eventje het camera-gebeuren uit uw hoofden. Het heeft niks met een lens of zo te maken. Het gevolg is wel dat diverse parameters heel anders uitwerken. Om deze methode toch een beetje te kunnen gebruiken is er een truc: zet 'orthographic' helemaal achteraan in de beschrijving van de camera en niet aan het begin. Doe je dat dan zal je zien dat de objecten in de buurt van de look_at gewoon in beeld verschijnen maar dat alles wat daar een beetje ver vanaf staat uit beeld verdwijnt. Ikzelf zie zo gauw geen zinnige toepassing voor deze projectiemethode, maar ik hoop dat een paar cursisten me de volgende keer iets kunnen laten zien waarvan ik zeg 'ja, zinnig gebruik van de orthogonale projectie gemaakt'. De visseoog lens wordt verkregen door 'fisheye' op te geven. Een standaard visseooglens wordt verkregen door als hoek angle 180.0 op te geven. Er is niets op tegen om zelfs 360 graden te gebruiken. Dan heb je een 'ik zie alles' beeld te pakken. Maar ja, het is een zgn. sferische projectie dus wat je dan in zo'n beeld ziet wordt moeilijk te interpreteren. Trouwens, zodra je de beeldhoek groot maakt, dat is al het geval bij de gewone camera, dan zien we een nare vertekening aan de randen optreden. Fotografie enthousiasten met vele soorten verwisselbare lenzen in hun koffer halen in de praktijk de visseoog lens ook maar zelden te voorschijn. Nog even voor de duidelijkheid: je krijgt een cirkelvormig beeld. Is het beeld elliptisch dan is de 'aspect ratio' niet goed gezet. Wil je geen cirkelvormig beeld hebben maar gewoon een rechthoekige foto dan is de ultra_wide_angle een uitkomst. Ook hier weer stel je met 'angle' de beeldhoek vast. Een voor de volledigheid toegevoegde projectie is 'Omnimax' bekend van de bolvormige theaters waar het geprojecteerde beeld het blikveld van de kijker volledig vult. Technisch gezien hebben we te maken met een visseoog en een beeldhoek van 180 graden maar met een gereduceerd blikveld in de verticale richting. Een serieus gebruik van deze projectiemethode door cursisten kan ik mij niet voorstellen. Een projectie methode waar ik wel blij mee ben is 'panoramic' want als ik een plaatje maak via de gewone instelling (perspective) dan wordt bij een grote beeldhoek (in de buurt van de 110 graden) de vertekening aan de randen mijns inziens al niet meer te pruimen. Deze 'cylindrical equirectangular projection' ve rwijst dit probleem naar de prullebak. Ik kan zelfs wijder gaan dan de natuurlijke beeldhoek van onze ogen en ver over de 180 graden gaan (via de 'angle' parameter). Een algemene vorm van deze projectie is onder de naam 'cylinder' beschikbaar. De scene wordt op een cylindervormig vlak geprojecteerd. Maar je moet nu wel van alles en nog wat extra gaan opgeven. Ten eerste het type en wel: 1 voor een verticale cylinder waarbij het viewpoint op zijn plaats blijft, 3 voor als het vieuwpoint mee moet bewegen langs de as. 2 voor een horizontale cylinder zonder beweging en 4 voor met beweging. Welk deel van de scene je gaat

Handig

Het gebruik van 'angle' is nieuw voor ons. De aanbevolen werkwijze is, als je gewoon gebruik blijft maken van de 'perspective' camera: laat de oude waarden van up- en right en direction vectoren gewoon in de camerabeschijving staan en zet pas aan het eind van de beschrijving van de camera de 'angle' parameter. Dan wordt automatisch de direction vector aangepast om de gewenste beeldhoek te krijgen. Nu nog een paar kleine keuteltjes voordat we gaan koffiedrinken. De 'vista' buffer die je via de ini-file kan gebruiken werkt alleen maar als je een perspectivische camera gebruikt of een orthografische projectie. Ten tweede: er is niets op tegen om hele grote hoeken op te geven voor de camera. Maar ja, zeker bij de gewone camera vind ik het effect niet fraai. Ga je zelfs naar 360 graden of nog hoger dan krijg je kunstmatige effecten: een soort beeldherhaling wat best wel eens een keertje een bedoeld effect kan geven.

Scherptediepte

Waar een professionele fotograaf goed in is is het kiezen van de scherptediepte. Gooi je diafragma flink dicht en ten koste van een langere belichtingstijd heb je een groter gedeelte van het beeld dat scherp blijft. Door het omgekeerde te doen kan je b.v. dingen op de voorgrond wazig houden en zaken in de verte scherp. Of omgekeerd. Zo kan je creatief gebruik maken van een beperking van de fotografische techniek. Met onze simpele gaatjescamera is alles altijd haarscherp. Prima dus, maar we zijn intussen (een soort culturele bepaaldheid) zo gewend aan het onscherpte effect op foto en in film dat we het niet meer willen missen. Vandaar dat de camera van PovRay een 'focal blur' kent om dit effect dat wel wat extra rekentijd kost, na te bootsen. Net zoals in het echt moet je bepalen waar het punt van de grootste scherpte moet komen (met focal_point <0, 5, 0> b.v. ) en hoe sterk het uit-focus effect moet zijn. Dat doe je op een echte camera door het diafragma in te stellen. In PovRay moet je instellen via een parameter van de rekenmethode (aperture geheten) die voor grote waarden erg veel vervaging geeft en voor kleinere waarden minder. Maar helaas, het is niet geijkt op wat we in de fotografie f-stops noemen. Uitproberen dus maar. Er zijn in de bibliotheek wat voorbeelden te vinden. Kijk daar maar eens in. Er is nog een trade-off. Ik vermeldde al dat 'blurring' extra rekentijd kost. Dit komt omdat de vervaging bereikt wordt door wat stralen te berekenen van dicht bij elkaar liggende punten en dan het resultaat te middelen. Hoe meer 'proefstralen' hoe gladder het effect wordt. De rekenmethode is adaptief wat in dit verband wil zeggen dat er wordt gestopt met rekenen aan een beeldpixel als volgende rekenstappen nog maar heel weinig verandering teweeg zouden kunnen brengen. Dus blur_samples geeft een bovengrens op. Natuurlijk kan je ook weer dat adaptive gedrag beïnvloeden door middel van extra parameters maar dat zou ik niet doen. De default is namelijk 90 procent, dwz. als de verwachting is dat een volgende rekenslag nog maar 10 procent verandering kan brengen dan wordt er gestopt.

Op een rijtje

Ik zal alles wat we zo in de praktijk gebruiken op een rijtje zetten. We hebben al een prima snapshot camera zonder 'rode oogjes' effect als we niet meer opgeven dan:

camera {
        location < 3, 5, -10 >
    look_at < 0, 2, 1 >
 }

of iets dergelijks toepassend. Aan te raden valt om look_at als laatste in de beschrijving op te nemen want je weet nooit zeker (zonder diepgaande studie in de handboeken) wat de effecten van extra toegevoegde zaken op de eindpositie is. Wat de camera doet met look_at is eerst in de gewenste richting om de y-as draaien en dan wat op- en neer knikken totdat die recht op het gewenste punt is gericht. Maar stel dat je je verbeeld in een vliegtuig boven je scene te vliegen en je gaat dan foto's nemen. Dan zal het achtervlak van je camara elke positie in de ruimte kunnen innemen en dan is de look_at niet voldoende. Je kan het ook wat abstracter zien: het achtervlak van de camera is altijd een raakvlak aan een bol die als centrum het look_at punt heeft en waarbij een lijn door de onderste hoekpunten van het beeldvlak altijd parallel aan het grondvalk loopt. Wiskundig is het positieprobleem opgelost als je de draaiing niet beperkt tot de richting van de y-as. Met

sky <1, 1,0 >

geeft je een vervanger voor de y-as op. Ook het knikken van de camera wordt nu gedaan aan de hand van deze nieuwe richting. Je kan de sky-vector zien als aan antenne die recht op de camara is gemonteerd. Vervolgens moet je met een look_at de camera richten. Je kan ook zeggen dat bij default de sky-vector overeenkomt met de y-as <0,1,0>. Mijn advies wat betreft het gebruik van de direction-vector is: laat die voortaan wat die was (default is <0,0,1>) en geef je beeldhoek vooraan op met het veel beter bruikbare 'angle'. Maar die geeft alleen maar de horizontale beeldhoek op. De verticale volgt uit de lengte-breedte verhouding die volgt uit de up- right- en direction-vectoren. Maar dat is allemaal lastig rekenen dus voor een beeldverhouding van 4:3 zijn er bruikbare defaults:

 right 4/3*x  up y

Let wel. Al dit bovenstaande geldt alleen voor de gewone perspectivische camara. Voor de andere projecties kunnen deze vectoren een andere uitwerking hebben. Met 'panoramic' werkt het zoals intuïtief verwacht wordt. We hebben te maken met de grootte van ons kijkglas (viewing window) en de 'aspect ration' lengte/breedte verhouding ervan. Een vierkant beeld krijg je met

camara {
        location <3,5,-10>
    up < 0,1,0>
    right <1,0,0>
  look_at <0,2,1>
 }

als je tenminste ook bij het renderen b.v. 480 x 480 pixels opgeeft. Dat een vierkant plaatje bij Wilhelmina niet vierkant op haar monitor verschijnt komt door haar grafische instellingen. Ik heb het samen met haar op een rustige vrijdagavond bekeken.

Haar Falcon met ScreenBlaster stond in een IBM-VGA-mode (wel met lekker veel kleurtjes) van 320 x 200 pixels. En daarbij zijn de pixels op de monitor niet vierkant. De oplossing voor haar is dus een ander aantal pixels op te geven in de .ini-file. Maar daar zijn we helaas toen niet aan toe gekomen omdat er leukere dingen te doen waren. Voor mensen die het gebruik van look_at om duistere redenen schuwen is er nog altijd de mogelijkheid om met translatie en rotatie de camera te plaatsen net zoals je dat met gewone objecten in de scene kan doen. Een echte fotograaf heeft als die met zijn vak bezig is, vaak een heel stel camera's binnen handbereik. Er is niets op tegen om in een scene beschrijving een heel stel camera's op te nemen. Het gebruik van de #declare maakt het op eenzelfde manier mogelijk als wannneer je met gewone scene-objecten werkt.

Net echt

Als je met een echte camera tegenlicht opnamen maakt of je fotografeert felle lichtbronnen dan krijg je overstraling. Door stofjes in het lenzensysteem, door de gebruikte lenscoating enz. verschijnen glimlichtjes die 'er niet horen'. Ook worden felle lichtbronnen als een vaag vlekje afgebeeld, soms vergezeld van een halo en stervormig weglopende strepen. Het effect is zowel afhankelijk van de constructie van het lenzenstelsel als van de reinheid van de lenzen. Er is een patroon en er is toeval bij betrokken. De cursisten krijgen dit keer een disk mee naar huis met de spullen erop om hun camera helemaal 'echt' te doen lijken. (Red.: voor belangstellenden die via dit blad de cursus volgen is de hier bedoelde disk te verkrijgen door eventjes kontakt op te nemen met het secretariaat.) De methode is: zet de file lensflar.inc in de folder waar ook alle andere include-files zitten. Om te zien hoe je het moet gebruiken zijn er maar liefst 10 voorbeelden die alle mogelijke soorten lensflare effecten ten tonele voeren. Je kan je indenken dat over en door je eigenlijke camera heen een lensflare maker wordt gezet. Laten we een voorbeeld nemen:

camera {
        location <100, 40, 400>
 look_at <-300, 60, 100>
 }
 light_source <0,50,300> white}

dan moeten we om de lensflares goed te krijgen zeggen

#declare camera_location =
 < 100,40,400>
 #declare camera_look_at =
  <-300, 60, 100>
#declare flare_position =
 <0,50,100>
 #include "lensflare.inc"

Je begrijpt wel: dat is dubbelop en dus een voordurende foutenbron. Pak het wat slimmer aan en definieer de camera na de #declare zaken:

camera{
   location camera_location
    look_at camera look_at
 }

en dergelijke. Ga je de camera draaien schuiven enz. dan weet je al gauw niet meer wat het eindpunt is geworden. Toch moet je voor de lensflare die weten. Wees dan ook zo slim om translaties te doen op de volgende manier:

#declare camera_location =
 camera_location + <-6,4,1.5>

en rotaties via

#declare camera_location =
 vrotate(camera_location, <20,15,5>)

Een simpele kwestie van vectorrekening dus. Je begrijpt wel dat als je gaat inzoomen dat dan de lensflare ook anders wordt. De belangrijkset keuze die gedaan moet worden is

#declare flare_type =

van 0 tot 9. In de handleiding op de disk staan ze allemaal beschreven met hun eigenschappen. De simpelste is nr. 9 die een klein vlekje geeft (sparkle) met vier uitlopers. De kleur is wit en het effect is niet te al te overdonderend gelukkig. Meer van dit effect eventueel met een iets ander kleurtje kan fraai uitwerken. Het standaard type nr. 1 is heel wat uitgebreider. Er zijn zes primaire stralen en een blauw-witte gloed in het centrum. Er zijn veel secundaire uitschieters. Verder is er nog een halo met een beetje regenboogtekening en ook zijn er nog wat random geplaatste uitsteeksels met gekleurde cirkelvormige spikkels. Het is mogelijk om meer dan 1 lensflare effect te gebruiken of, vooral bij type 9, meerdere van hetzelfde type. Ik zie dat het nu al laat op de avond is, dus ik ga niet verder op alle ins- en outs- in. Laat ik aanstippen dat de kleur van de effecten belangrijk is want veelal is die afhankelijk van de kleur van de lenscoating van de echte camera en die is soms bronskleurig en soms hemelsblauw. Wel moet ik eventjes opmerken dat het gebruik van focal blurring (ook in deze aflevering besproken) niet samen gaat met lensflare. Je moet een extra stapje doen: eerst het beeld gewoon maken en hem dan voor een tweede keer met lensflare door PovRay heen halen. Dat zal ik de volgende keer demonstreren.

Huiswerk

Tot zover deze aflevering over 'fotograferen met PovRay' zal ik maar zeggen. Als huiswerk deze keer; een scene maken en daarbij 'lensflare' gebruiken.

Slotwoord

Het is me een paar keer overkomen dat cursisten eigen verzonnen namen hebben gebruikt die wel voor de hand lagen maar die (zodoende zou je zeggen) al als sleutelwoorden voor PovRay zijn geclaimd. Ik zal hier een lijst afdrukken van alle op dit moment geldige woorden. Het is een lange lijst geworden en ik zou zeggen, bestudeer hem eens grondig thuis.

Piet Vogelaar


Copyright © Rein Bakhuizen van den Brink
Last updated on 1 september 1999
Home Creatief met POVRay Toch maar Versie 3 gebruiken? De monitor en de achtergrond