Original English version: http://paulbourke.net/miscellaneous/depthmap/
Skrevet av Paul Bourke
September 2019
Følgende er en kort instruksjonsguide for hvordan du lager dybdekart ved hjelp av PovRay. Det er forskjellige bruksområder innen stereoskopi hvorfor man kanskje ønsker å gjøre dette, men motivasjonen i skrivende stund var å lage dybdekart for FaceBooks “3D-modell” -bilder. Disse tar et bilde sammen med et tilhørende dybdekartbilde slik at en seer kan endre synspunktet fra venstre til høyre og opp.
Et eksempel på hva FaceBook godtar når en 3D-modell lastes opp, er illustrert nedenfor. Det består av det primære bildet sammen med et sekundært bilde med samme navn, men med “_depth” vedlagt. Det er klart at disse forventes å matche, det vil si gjengitt fra samme synsposisjon. I dette sekundære bildet refererer hvitt til objekter i nærheten av kameraet og svart på gjenstander lenger unna.
Primærbilde: Elephant.png |
Sekundærbilde: Elephant_depth.png |
De grunnleggende funksjonene i PovRay som kan brukes til å lage dybdekart er en kombinasjon av et “gradient” pigment og “colour_maps”. Et gradientpigment genererer et tall mellom 0 og 1 avhengig av plasseringen i rommet til et punkt på overflaten av objektet. Et fargekart brukes til å kartlegge den verdien til svart-hvit rampe som til slutt blir kartlagt tilbake til dybden. Følgende PovRay-kodebit for tekstur kan brukes.
#declare thetexture = texture { pigment { gradient z color_map { [0 color rgb <0,0,0> ] [1 color rgb <1,1,1> ] } scale <1,1,ZMAX-ZMIN> translate -<0,0,ZMIN> } finish { ambient 1 diffuse 0 specular 0 } }
Merknader om ovennevnte:
- Modellen antas å være orientert slik at det tiltenkte dybdekartet er langs z-aksen. Kameraposisjonen antas på samme måte å være langs z-aksen.
- Det antas at variablene ZMIN og ZMAX tidligere er blitt erklært, disse kartlegger gradientområdet fra 0 -> 1 til zmin -> zmax.
- Gradientpigmentet er periodisk, så modelldybden må være inneholdt med grensene. Dette er hva skalaen og oversettelseskommandoene oppnår.
- Modellenes geometri antas å være innenfor en enhet {} enhet og har ingen eksisterende strukturer brukt. For eksempel
union { object { modelpart1 } object { modelpart2 } etc texture { thetexture } }
Et annet eksempel. Dette og det siste er murte elefanter som holder opp en plattform som en stupa er bygget på, som ligger i Sukhothai, Thailand.