Ljus och programmering

Normalt skriver jag om webben men idag skriver jag om något annat, nämligen programmering i grafik. Jag gick nyligen en kurs i datorgrafik på KTH där jag fick lära mig mer om de tekniker man använder för att simulera grafiska fenomen, dels genom raytracing och dels genom s.k. rasterization. Som programmeringsmiljö använde vi C++ där delar av koden, framförallt 3D-modellerna, var givna.

Normalt skriver jag om webben men idag skriver jag om något annat, nämligen programmering i grafik. Jag gick nyligen en kurs i datorgrafik på KTH där jag fick lära mig mer om de tekniker man använder för att simulera grafiska fenomen, dels genom raytracing och dels genom s.k. rasterization. Som programmeringsmiljö använde vi C++ där delar av koden, framförallt 3D-modellerna, var givna. I kursen ingick tre laborationsuppgifter men även ett personligt projekt som var riktat till de som ville ha högre betyg. Det ville jag, för dels tyckte jag det var förvånansvärt intressant och dels kanske det är något jag skulle kunna jobba med i framtiden, vem vet?

Ljusstake redigeradFör kanske sex år sen upptäckte jag 3D-program och blev kvickt slukad i dem. Jag programmerade inte men lärde mig att modellera, materialsätta och rendera modeller till färdiga bilder. Av någon anledning fastnade jag för fotorealism och var otroligt fascinerad av hur ljus fungerar. Dels har det väl att göra med att jag har vissa estetiska intressen men också för att grunderna i optik är ganska triviala, koncepten är enkla att förstå och förklara utan matematiska formler. Från renderingarna såg jag tydligt resultaten av en renderingsmotor som gör noggranna simuleringar av ljus. Optiska fenomen som reflektion, refraktion och skärpedjup blev intressant. Bilden vid sidan av är modellerad och renderad i Cinema 4D men det häftigaste programmet tyckte jag var Maxwell Render, som överlägsen ljussimulator, med vilket man kan generera sanslöst realistiska bilder.

Rendering från rapportenSå jag funderade på vad jag skulle hitta på för mitt projekt i grafikkursen. Det fanns en del förslag på ämnen på kurshemsidan som i och för sig säkert var väldigt spännande, men jag bestämde mig för att gå min egen väg ändå. Jag valde att utveckla renderingsmotorn från de tidigare labbarna åt det mer fotorealistiska hållet. Lite koncist kan man säga att jag modellerade ett optiskt system och skjöt ljusstrålar från bildsensor till scenen, och simulerade flera studsar av ljus i scenen innan strålarna (eventuellt) träffade en ljuskälla. Varje ljusstråle lös upp en pixel på skärmen. Nackdelen med detta var en extremt tidskrävande rendering. Fördelen var dock att jag fick progressiv rendering, skärpedjup och global ljussättning på köpet. Bilden till höger är en rendering från rapporten, renderingstid 22 minuter.

Eftersom kursen var på engelska är även rapporten det. Läs den i sin helhet på Scribd. Tyvärr kan jag inte ännu publicera källkoden då delar av den tillhör skelett-koden från kursen. Om intresse finns kanske jag kan jobba på det.

26 aug 2013
  • C++
  • KTH
  • programmering
  • datorgrafik

Kommentera