De ontwikkeling van een virtueel camera systeem
Inleiding
Hierbij een kort verslag van de ontwikkeling van software waarmee elk willekeurig (fotografisch) objectief gesimuleerd kan worden in elke willekeurige virtuele omgeving. Het pakket heet "Virtual Camera".
De software heeft 3 doelen
a] Optische systemen begrijpelijk maken (didactisch doel)
b] Beelden uitrekenen van objectieven die niet voorhanden zijn of niet meer bestaan, waarmee dan kwaliteiten zoals "bokeh" beoordeeld kunnen worden
c] Optische systemen kunnen ontwerpen voor speciale doelen
Mogelijkheden
1] Vanaf het recept van een objectief (positie, kromtestralen, dikte, doorsnede, en brekingsindex van elk lensdeel) het starten van een "ray-tracing" algorithme (zeg maar een simulatie van stralen door het objectief).
2] Met behulp van berekende stralen een beeld uitrekenen van een aangeboden digitale foto als object
3] Voor drie of meer kleuren het beeld uitrekenen, zodat ook de chromatische aberraties zichtbaar worden.
4] Met behulp van berekende stralen een beeld uitrekenen van een virtuele ruimte met virtuele objecten, uitgelicht door meerdere lichtbronnen.
5] Kanteling en shift van de lens t.o.v. de gevoelige plaat, zodat het "Scheimpflug principe" gesimuleerd kan worden, beschikbaar in technische camera's
6] Diafragmeren, focussen of kantelen van het objectief gedurende de berekening van meerdere beelden, omgezet in een filmpje om het effect van de variabelen zichtbaar te maken
De recepten van objectieven zijn uit een aantal handboeken te halen en van een CD met 30.000 ontwerpen, te koop bij "Lambda Research"
Software en Hardware
1] C++ met Xcode op een Mac vier processor Intel machine
2] Qt4 van Trolltech voor platform onafhankelijke ontwikkeling (dus ook voor Windows en Linux, naast Mac) van windows, widgets, menu's en userinterface
3] OpenGL voor de snelle 3D graphics op een NVIDIA GeForce 7300 GT
4] vecLib framework voor simulatie op de vector chip van de Mac
5] vImage framework voor manipulatie van beeldbuffers op de vector chip
Snelheden
Dit proces is buitengewoon rekenintensief. Als voorbeeld: om een scene uit een virtual reality omgeving te renderen door een objectief met meerdere elementen, moeten 400 scenes berekend worden in de virtuele ruimte met OpenGL. Elke scene bestaat uit 1000x800 pixels (bijvoorbeeld) en elk van de 800.000 pixels levert 25 stralen bestaande uit 3 kleurcomponenten. Dus in totaal wordt voor een objectief met 6 elementen (12 materiaal overgangen) 400x1000x800x25x3x12= 288.000.000.000 keer de wet van Snellius toegepast in 3D (zeg maar 288 Giga-Snellius). Daar doet de Mac Intel draaiend op 1 processor 1 uur over, dat betekent dat er elke seconde 90 miljoen keer een lichtstraal van glas naar lucht of omgekeerd gaat.
Vernieuwing
Het is een zelfgeschreven combinatie van 2 zaken die al beschikbaar zijn of gerapporteerd in de literatuur. Die twee delen die ik gemaakt heb zijn dus niet vernieuwend.
a] Het kunnen simuleren van Scheimpflug en scherptediepte met perfecte pinhole camera's in OpenGL is in 1992 al gepubliceerd
b] Het kunnen simuleren van stralengangen door objectieven om zo de aberraties door te kunnen rekenen is al vele malen gemaakt en commercieel of soms gratis (voor educatieve doeleinden) te krijgen .
De combinatie van a] en b] is wel nieuw, het wetenschappelijk artikel erover heb ik in ontwikkeling. De meerwaarde is duidelijk: je wilt niet alleen getallen zien van lenzen, maar ook de geleverde beelden, want daar gaat het om. Daarnaast zijn door het meetekenen van stralengangen ook veel lastige zaken in de optiek uit te leggen in realistische scenes.
Plannen
1] In virtuele scenes het focuspunt aan kunnen klikken om makkelijk scherp te kunnen stellen op een punt in 3D
2] Het proces verdelen over 4 processoren om zo het proces (bijna) 4 maal zo snel te maken
3] Virtuele scenes bouwen die sterk lijken op echt te fotograferen scenes, zodat vergelijkingen gedaan kunnen worden tussen echte en virtuele foto's
Voorbeeld
Hier een eenvoudig voorbeeld. Een Cooke triplet, een oud camera objectief dat goed gecorrigeerd is voor de meeste lensfouten. Maximale opening: f3.5.Brandpuntsafstand: 50 mm. De twee buitenste elementen zijn van kroon glas en het middelste element van flintglas. Samen geven ze een goede correctie van chromatische aberratie. Dat blijkt ook uit de simulatie: geen kleurrandjes.
De test scene in OpenGL die ik gemaakt heb ziet er zo uit (slechts 1 aanzicht, precies vanuit het midden van het voorste lenselement). Er is 1 lamp "geplaatst", rechts van de groep bollen, die ieder een doorsnede van 4 cm hebben.

Het Cooke objectief maakt er dit van bij volle opening (instelafstand 50 cm):

Het objectief ziet er zo uit:

De totale stralengang:

En het gedeelte achter het objectief:

Tot slot nog een voorbeeld wat er gebeurt als je iets extreems doet: een sterk positief brillenglas als lens en dan ook nog uit het midden verschoven.
Het origineel

en het beeld geprojecteerd door het brillenglas:
 Nog wat erbij geschreven in de software: het ruimtelijk en doorzichtig renderen van het lenzenstelsel, de stralengang, het voorwerp en de projectie op de gevoelige plaat. Hier een voorbeeld van een Dubbel Gaussisch ontwerp met 6 lens elementen. Voor de duidelijkheid een kwart van de lensdelen eruit gesneden 1] Gezien vanaf het voorwerp 2] Het stelsel van de zijkant (de frontlens zit rechts) 3] Gezien door de gevoelige plaat richting het voorwerp 4] Gezien precies in de as door de gevoelige plaat heen (blauwe stralen komen eerder samen en hun snijpunt aan de centrum kant van de foto)  De stralen zijn in 3 golflengten berekend en je ziet keurig de chromatische aberratie ontstaan in de projectie van het beeld op de gevoelige plaat. Er is 1 set van 3 paar stralen in 3 kleuren meegetekend. In werkelijkheid wordt de hele lens dus met stralen gevuld vanaf 1 punt van het onderwerp naar (bij benadering) 1 punt op de beeeldplaat. Des te kleiner dat punt op de beeldplaat, des te scherper de afbeelding. Dit hele zaakje kan je dus op een beeld scherm ronddraaien, inzoomen etc en ook het beeld uitrekenen wat zo ontstaat. Wat vooral ook leuk is, is om met de muis het voorwerp (hier de theepot) te verplaatsen en tegelijk de stralen mee te zien bewegen. Een voor de hand liggende uitbreiding is om met een interface (pijltjes omhoog, omlaag met een getalletje ernaast) de lensdelen te beinvloeden (kromming van de oppervlakken, dikte van het element, positie en glassoort) en direct te zien wat het betekent voor de stralengang. Nog een tip voor literatuur: Naast het door mij gewaardeerde boek van Born en Wolf is het boek van Eugene Hecht aan te raden als zeer leesbaar.
|
|
|
|
|
|