Kort introduktion till POV-Ray, del 3 Kjell Y Svensson, 2004-02-03,2007-03-13 I denna del beskrivs hur man ger objekten lite mera liv genom att beskriva hur deras yta ser ut, med reflektion, ruggighet, och för att inte tala om phong. Några användbara fördefinerade ytor beskrivs också, såsom trä och sten. Innan jag börjar beskriva ytbeskrivning så vill jag berätta om en arbetsbesparande finess, nämligen möjligheten att inkludera filer i POV-ray. Infoga filer Genom att skriva #include filnamn.inc så får man alla definitioner som finns i filen filnamn.inc tillgängliga i sitt program. POV-Ray kommer med ett antal mycket användbara filer som man kan infoga. Den som man nästan alltid infogar i en scen är colors.inc. Med denna kan man byta ut pigment {rgb <1,0,0> mot pigment {color Red vilket är lättare att läsa och lite mindre att skriva. Kommandot rgb behövs dock fortfarande då inte alla färger finns med i colors.inc, men där finns en imponerande samling. Vad sägs om färger som CornflowerBlue, DarkTurquoise, MediumSpringGreen, BrightGold and DarkWood. Texture För att visa vad texture innebär använder vi följande program: #include "colors.inc" background { rgb <1,1,1> camera { location <0,0.5,-2.5> look_at <0,0,0> light_source { <3,3,-3>, rgb <1,1,1> pigment { color Red plane { <0,1,0>, 0 pigment { color Green plane { <0,0,1>, 1000 pigment { color SkyBlue Scen 1. Sfär att lägga texture på Vi ska nu förändra sfären genom att lägga på en textur. En textur beskriver mer i detalj hur ett objekts yta ser ut och har därför tre delar, pigment, normal och finish. Pigment, som vi har sett tidigare beskriver färgen på objektet. Normal beskriver hur pass slät ytan är och slutligen finish beskriver hur mycket ytan ska reflektera ljuset. För att testa detta ändrar vi på beskrivningen av sfären, men innan vi gör detta visar jag hur sfären ser ut när scen 1 beräknas.
Figur 3-1 Sfär utan texture Finish Sedan börjar vi med att lägga till lite finish och det är då vid ska använda phong. Phong anger hur ljuset reflekteras från objektet och är ett värde från 0.0 till 1.0. Kopplat till phong är phong_size, som anger hur stort område som reflekterar. Phong_size anges från 1 till 250 där 1 är ett värde som ger en sfär nästan helt utan reflektion och 250 skapar mycket reflektion. Så lät oss se hur det ser ut om vi definierar sfären så här. pigment { color Red finish { phong 0.5 phong_size 100 Figur 3-2. Sfär med phong 0.5, phong_size 100 Visst ser klotet lite elegantare ut? Det finns ett annat sätt att uttrycka samma sak, som ofta ger lite mer naturtrogen yta och det är att använda sig av specular och roughness. Så om vi nu beskriver sfären så här. pigment { color Red finish { specular 0.5 roughness 0.01 Så ger det ett liknande intryck.
Figur 3-3. Sfär med specular 0.5 och roughness 0.01 Tips 8. Testa alltid att ändra värderna på sphong, phong_size, specular och roughness i små steg när du börjar bli nöjd. En ändring på bara 0.001 kan ibland göra stor skillnad. Tips 9. Överdriv inte ett objekts reflektion. Det flesta objekt i verkligheten reflekterar inte speciellt mycket, speglar undantaget. Normal Med normal menar vi inte att klotet är normalt, utan normal talar om hur ljuset reflekteras tillbaka till kameran. Vi börjar med att lägga till lite bucklor bumps och ser hur det ser ut. pigment { color Red finish { specular 0.5 roughness 0.01 normal { bumps 1 Figur 3-4. Sfär med bumps 1 Knappt någon märkbar skillnad. Skälet till detta är att bucklar är en enhet stor och sfären är också en enhet i diameter så hela sfären är en enda buckla. Detta kan vi enkelt lösa genom att skala ner bucklan så med bumps 1 scale 0.1 blir sfären rätt annorlunda.
pigment { color Red finish { specular 0.5 roughness 0.01 normal { bumps 1 scale 0.1 Figur 3-5. Sfär med normal bumps 1 och scale 0.1 Skalar vi ner ytterligare till scale 0.01 så blir ytan likt en apelsins yta. Figur 3-6. Sfär med normal bumps 1 och scale 0.1 Man kan också öka och minska på bumps för att få fram det utseendet man är ute efter. Det finns lite andra normal-mönster att välja på såsom slagmärken, rynkor, ringar och vågor. Jag återkommer till de två sista, men låt oss prova slagmärken dents och rynkor wrinkles. Jag sätter normalen på planet under sfären, så även denna blir lite intressantare. Det innbär att jag ändrar i den första planet till detta. plane { <0,1,0>, 0 pigment { color Green normal { dents 1.75 scale 0.25
Figur 3-7. Plan med normal dents 1.75 scale 0.25 Med skrynklor ser det nästan ut som ett tygstycke. plane { <0,1,0>, 0 pigment { color Green normal { wrinkles 2 scale 0.5 Figur 3-8. Plan med normal wrinkles 2 scale 0.5 Vilka värden man ska använda sig av på dents, wrinkles scale måste man prova sig fram till. Tips 10. Extrema värden för normalen kan ofta ge roliga och oväntade effekter. Var inte rädd för att experimentera. Trä och sten POV-Ray innehåller en hel uppsättning fördefinierade texturer som man kan använda sig av direkt utan att behöva definiera upp alla detaljer själv. Två av dessa är trä och sten, och de finns tillgängliga om man tar in filerna woods.inc och stones.inc. Med dessa kan vi byta ut vår röda sfär och gröna plan till en trä-sfär och en plan av finaste granit genom att byta ut texture mot någon av de fördefinierade. Beskrivningen blir efter bytet denna.
#include "stones.inc" #include "woods.inc" T_Wood11 rotate <0,90,0> finish { specular 0.2 roughness 0.05 normal { bumps 0.1 scale 0.0005 plane { <0,1,0>, 0 T_Stone22 scale 0.5 finish { specular 0.5 roughness 0.01 Figur 3-9. Sfär av trä och ett plan av marmor Tips 10. Lägg alltid alla include i början av filen, så finns de tillgängliga i resten av scenbeskrivningen. Detta var allt för denna gången, nästa gång, del 4, tar vi upp CSG-objekt. CSG står för Constructive Solid Geometry och är en metod utnyttja de primitiva objekten, sfär, cylinder, kub, med mera, som vi har använt oss av hittills för att skapa nya mer komplexa objekt.