original in es Antonio Castro
es to en Katja Socher
en to de Katja Socher
Ich bin Informatiker und habe die Gelegenheit gehabt, mit verschiedenen Unixsystemen zu arbeiten. Darüberhinaus hatte ich verschiedene Aufgaben von Softwaredesign bis Systemadministration.
In diesem Artikel schauen wir uns an, wie man Texturen benutzt. Wir haben sie schon auf einem theoretischen Niveau in den vorhergehenden Kapiteln (I, II, III) beschrieben.
Wenn wir ein Objekt in Povray designen, müssen wir zwei ganz verschiedene Dinge entscheiden:
Wir haben die enorme Vielseitigkeit von Povray, Farbmuster und verschiedene Formen von Oberflächen zu benutzen, gesehen, aber da ist noch mehr.
|
Viele Elemente wurden vorgestellt, um die verschiedenen Techniken beim Gebrauch von Texturen zu illustrieren. Wir werden lernen, flache, zylindrische und kugelförmige Objekte unter Benutzung von Bildern einzuwickeln.
Man muß anmerken, daß die Technik des Einwickelns von Objekten mit Bildern sehr mächtig ist. Mit einem guten Repertoire von texturierten Bildern kann fast alles gemacht werden. Man könnte versucht sein, immer diese Technik des Einwickelns zu benutzen mit Bildern, die von anderen erstellt wurden, aber auf diese Weise wird man niemals die kreative Flexibilität haben, die das Design von Texturen bereithält. Wir können unabhängige Muster, Farbverteilungen, Typen von Wirbeln, Intensität von Wirbeln, etc... variieren
Wir begleiten die Beschreibungen mit Illustrationen. Alle Bilder, die für die Erzeugung der Szene benutzt werden sowie die vollständige Auflistung des Povraycodes für die Szene kann man erhalten. In tar.gz Format
Wir beschreiben jetzt die verschiedenen Aspekte und Details der Szene.
|
Teil der Auflistung |
---|
#declare Papel = object { box { <0,0,0,> <1,1,1> } texture { pigment{ image_map { gif "gifs/hoja.gif" } } finish { ambient 0.4 diffuse 0.6 } } rotate x*90 scale <12, 0.001, 20> |
Beispiel: Disquete.inc |
#declare TamDisquete = 5; #declare PortadaDisquete = "gifs/disquete1.gif" #include "Disquete.inc" object { Disquete rotate x*90 translate <80, -10, 147> } |
Disquete.inc |
#declare Epsil = 0.0001; #declare Disquete = object { box { <0, 0, 0> <1,1,1> texture { pigment{ image_map { gif PortadaDisquete once } } } translate <-0.5,-0.5,-0.5> } //Primero centrar el cubo en <0,0,0> translate <-0.5, -0.5, -0.5> scale <TamDisquete,TamDisquete, TamDisquete/10 > } // end 'Disquete.inc'; |
Beispiel: Libro.inc |
#declare LargoLibro = 20; #declare AnchoLibro = 12; #declare GruesoLibro = 3.5; #declare PortadaLibro = "scan_gif/bookp2.gif" #declare LomoLibro = "scan_gif/bookl2.gif" |
Libro.inc |
#declare Epsil = 0.0001; #declare TextureLibro = texture { pigment { gradient z color_map { [0.0 colour White ] [0.1 colour Gray90 ] [0.2 colour White ] [0.3 colour Gray95 ] [0.4 colour White ] [0.5 colour Gray80 ] [0.6 colour White ] [0.6 colour Gray95 ] [0.8 colour White ] [0.9 colour Gray90 ] [1.0 colour Gray85 ] } // end colourmap; } // end pigment; finish { ambient 0.3 diffuse 0.7 } scale <1, 1, 0.3> } // end Texture; #declare Libro = object { union { box { <0, 0, 0> <1,1,1> texture { TextureLibro } translate <-0.5, -0.5, -0.5> } // Portada del libro; box { <0,0, 0> <1, 1, 1> texture { pigment{ image_map { gif PortadaLibro once } } } translate <-0.5, -0.5, -0.5> scale <1-Epsil, 1-Epsil, 1+Epsil> } // end box; // Lomo del libro; box { <0,0,0 > <1 ,1 ,1 > texture { pigment{ image_map { gif LomoLibro once } } } translate <-0.5, -0.5, -0.5> scale <1-Epsil, 1-Epsil, 1+Epsil> rotate y*90 } // end box; } // end union translate <-0.5, -0.5, -0.5> // Centrar el cubo en <0,0,0>; scale <AnchoLibro,LargoLibro, GruesoLibro> } // end 'Libro.inc'; |
In diesem Abschnitt sprechen wir über eine Technik, die sehr nützlich für das Einwickeln aller Klassen von Abbildungen ist, die Kästen ähnlich sind. In unserer Szene kann ein Blatt Papier als ein Kasten betrachtet werden, nur ist es total flach. Die Disketten haben etwas eines echten Kastens, da sie einige Millimeter dick sind.
In beiden Fällen benutzen wir für das Einwickeln eines Gegenstandes nur ein Bild. Wir benutzen in allen von ihnen die Projektion für flache Objekte. Im Fall der Bücher benutzen wir ein Bild für die Titelseite und ein anderes für den Buchrücken, aber wir erklären die Konstruktion jedes dieser Gegenstände.
Für das Blatt Papier ist es nicht notwendig, einen Würfel zu definieren. Das Bild ist auf die Kamera projiziert, statt aufwärts. Wir rotieren den Würfel um 90 Grad auf der x-Achse aus dem Grund, daß das verbleibende Bild aufwärts gedreht wird und wir geben ihm die passenden Proportionen. Wir geben den Blättern eine Dicke.
Die Disketten sind Gegenstände, die durch Benutzen des include Befehls erstellt werden. Es ist notwendig, die Werte, die wir als Parameter benutzen, um die Dimensionen der Diskette und seines Bildes zu setzen, zu initialisieren.
Auf der linken Seite kannst du die Auflistung von "Disquete.inc" sehen.
Jetzt wird es ein bißchen kompliziert, um die Bücher zu entwerfen, da dafür mehr Parameter gebraucht werden.
Für die Oberfläche, die den Rücken des Buches darstellt, müssen wir ein Gradientenmuster benutzen.
Wir konstruieren das Buch so, als ob es ein perfekter Würfel wäre, zentrieren den Würfel bei <0,0,0> und geben ihm die gewünschten Dimensionen. Auf diese Weise ist es einfacher die Position des Buchrückens und der Buchvorderseite, die auf der Vorderseite des Würfels plaziert wird, zu berechnen. Rücken und Vorderseite werden hinzugefügt, so als wären sie Kästen und dann drücken wir sie zusammen und machen sie sehr dünn.
|
Wir definierten Epsil als einen Betrag, der klein genug ist, um vom menschlichen Auge nicht wahrgenommen zu werden. Gleichzeitig ist er groß genug, um keine Division durch Null zu produzieren oder andere merkwürdige Effekte in flachen Oberflächen von verschiedenen Gegenständen, die genau dieselbe Position besetzen.
Auf der linken Seite siehst du die include Datei, die für die Bücher benutzt wurde. Wir lassen es als eine Übung für den Leser, ein allgemeineres Objekt zu konstruieren, das sechs Bilder akzeptiert, eines für jede Seite.
Unten sehen wir einige Muster mit Streifen. Sie stellen das Relief einer Oberfläche dar und wir werden sie benutzen, um ein Glas zu dekorieren wie graviertes Glas. Wir benutzen das Bild als ein Muster, um die normale Komponente in den verschiedenen Punkten auf dem Gegenstand zu verändern. Du kannst auf das Bild klicken, um weitere Details zu sehen.
|
Das Glas ist ein Kegelrumpf, wo wir einfach einen anderen inneren Rumpf, der etwas gerader ist und der die richtige Länge hat, um mit der Höhe des Wassers zu enden, hinzufügen müssen. Glas und Wasser sind daher das gleiche. Dies ist so, da wir der Einfacheithalber angenommen haben, daß Wasser und Glas identische Brechungskoeffizienten besitzen. Das Ergebnis ist eine geometrishe Form eines einzigen Materials. Dies ist sehr geeignet, da bekannt ist, daß das Glas mit Wasser beinahe durchsichtig wird aufgrund der Annäherung ihrer Brechungsindices.
Die Wasserflasche muß ein bißchen genauer herausgearbeitet werden, da sie aus mehreren einfachen kombinierten Formen zusammengesetzt ist (Zylinder, Rümpfe von Würfeln und Teile von einer Kugel), aber dieser Aspekt ist für uns in diesem Artikel nicht von Interesse, wir sagen nur, daß die benutzte Technik diesselbe ist wie für das Glas. Es ist nur einfach ein komplexerer Gegenstand.
Manchmal haben wir die Möglichkeit, zwischen der Benutzung von durch Povray generierte Muster oder der Benutzung eines Bildes zu wählen. Die Wände würden sich perfekt durch den Mustertyp bump herstellen lassen mit einer geeigneten Farbmap.
Da wir diese Textur auf zwei Eckwänden projizieren müssen, rotieren wir die Textur um 45 Grad auf ihrer y-Achse. Dies würde eine Skalenverzerrung verursachen, weshalb wir die Skala der Textur entsprechend korrigieren.
Dieses Detail kann man in der abschließenden Auflistung der Szene sehen.
Dieser Gegenstand ist einfacher zu erstellen, als es auf den ersten Blick scheint. In dem anderen Beispiel haben wir Farbe projiziert, aber die Projektion ist genauso für kugelförmige Körper geeignet.. Der Sockel ist aus Bronze und der Fuß aus Holz. Durch Benutzen von Povrays eigenem Katalog von erzeugten Texturen können wir das Holz auswählen, das uns am besten gefällt. In diesem Fall haben wir 'DMFDarkOak' benutzt.
Obwohl der Globus aus einfachen Formen konstruiert wurde, ist es interessant zu sehen, in welcher Reihenfolge er zusammengesetzt wurde. Alles, was wir wissen, ist, daß es nicht dasselbe ist, die Teile der Gegenstände in irgendeiner Weise zusammenzusetzen. In diesem Fall gibt es einige Achsen, um die Teile angemessen zu plazieren.
All dies kann in der vollständigen Auflistung am Ende gesehen werden.
|
Wir könnten über einige weitere Gegenstände dieser Szene sprechen, wie das Trinkglas, die Bleistifte, den Boden, den Tisch, aber es gibt nicht mehr viel zu sagen, was herausragen würde, außer, daß wir im Falle des Tisches eine Textur benutzt und seinen Glanz und seine Leuchtkraft verändert haben, bis er wie der polierte Tisch aussah, den du in der Szene sehen kannst.
Sind einmal alle Elemente plaziert, ist es immer die Mühe wert, zu der Auswahl zurückzukehren und einige Variationen in der Beleuchtung zu testen. Wir haben eine allgemeine Beleuchtung neben der Decke und am Zentrum benutzt.
Du kannst auf das Bild klicken, um die letzte Szene glänzender und größer zu sehen.
Um den Artikel abzuschließen, reproduzieren wir die komplette Auflistung der Szene.
Final Listing Estudio.pov | |
---|---|
//////////////////////////////////////////// // // Autor: Antonio Castro Snurmacher // //////////////////////////////////////////// #include "colors.inc" #include "textures.inc" #include "glass.inc" #declare Plastico = finish { ambient 0.4 diffuse 0.45 reflection 0.15 phong 0.3 phong_size 20 } #declare Camera_pl_general = camera { location <0,45, -20> look_at <80, -20, 200> angle 20 } #declare Camera_detalle_vaso = camera { location <0,45, -20> look_at <97,-6, 170> angle 3.2 } #declare Camera_detalle_botella = camera { location <0,45, -20> look_at <45,0, 190> angle 8 } #declare Camera_detalle_papel = camera { location <0,45, -20> look_at < 85, -10, 145> angle 10 } //camera { Camera_detalle_botella } //camera { Camera_detalle_vaso } //camera { Camera_detalle_papel } camera { Camera_pl_general } // Fuente de luz blanca en el techo light_source { <0, 40, 90> color White } // Fuente de luz tenue de mesa light_source { <0, 40, 190> color White spotlight radius 8 falloff 12 tightness 10 point_at // < 70, -10, 160> < 65, -10, 155> } #declare Cubilete = object { intersection { cylinder { <0,0,0> <0,6,0> 2 } cylinder { <0,1,0> <0,6.5,0> 1.9 inverse } } } #declare GloboTierra = object { union{ union{ sphere { <0,0,0> 1 texture { pigment{ image_map { gif "gifs/geoideok.gif" map_type 1 // Esfera } } finish { Plastico } } interior{ I_Glass} //rotate y*25 rotate y*-25 } cylinder { <0,-1.28, 0> <0, 1.28, 0> 0.1 texture { Bronze_Metal } interior{ I_Glass} } intersection { sphere { <0,0,0> 1.28 } box { <0,-1.5,-0.06> <1.5, 1.5, 0.06> } sphere { <0,0,0> 1.1 inverse } texture { Bronze_Metal } interior{ I_Glass} } rotate z*-20 } union{ // pie cylinder { <0, -1.1, 0> <0, -1.8, 0> 0.15 texture { Bronze_Metal } interior{ I_Glass} } cone { <0, -1.8, 0> 1 <0, -1.6, 0> 0.7 texture { pigment { DMFDarkOak } scale <0.3, 0.3, 0.3> } interior{ I_Glass} } } } translate <0, 1, 0> scale <7,7,7> } #declare VasoAgua = object { intersection { cone { <0, 0, 0> 2.5 <0,7,0> 2.9 } cone { <0, 4, 0> 2.45 <0,7.5,0> 2.8 inverse } } texture { Glass2 normal { bump_map { gif "gifs/vaso_norm.gif" map_type 2 // Clindro bump_size 0.5 } } scale <7,7,7> } interior{ I_Glass} } #declare BotellaAgua = object { union { intersection { merge { cylinder { < 0, 18.1, 0> < 0, 20 , 0> 0.9 } cone { < 0, 14 , 0> 2.9 < 0, 18.1, 0> 0.9 } sphere { < 0, 12.5, 0> 3.3 } cylinder { < 0, 0 , 0> < 0, 12 , 0> 3.2 } } merge { cylinder { < 0, 18 , 0> < 0, 20.1, 0> 0.8 } cone { < 0, 13.9, 0> 2.8 < 0, 18.0, 0> 0.8 } sphere { < 0, 12.4, 0> 3.2 } cylinder { < 0, 6 , 0> < 0, 12.5, 0> 3.1 } inverse } texture { Glass2 normal { bump_map { gif "gifs/botella_norm.gif" map_type 2 // Clindro bump_size 1 } } scale <15, 15, 15> } interior{ I_Glass} } |
cylinder { < 0, 20, 0> < 0, 19, 0> 1.1 // Tapon texture { pigment {Blue} finish { Plastico } } // fin Tapon interior{ I_Glass} } } } #declare Papel = object { box { <0,0,0,> <1,1,1> } texture { pigment{ image_map { gif "gifs/hoja.gif" } } finish { ambient 0.4 diffuse 0.6 } } interior{ I_Glass} rotate x*90 scale <12, 0.001, 20> } #declare RadLapiz = 0.3; #declare Lapiz = object { union { cylinder { <0,0,0> <0,7.5,0> RadLapiz texture { pigment { DMFDarkOak }} interior{ I_Glass} } cylinder { <0,7.5,0> <0,8.5,0> RadLapiz texture { Gold_Metal } } cone { <0,0,0>RadLapiz <0,-0.8,0> 0.1 texture { pigment { White_Wood } } interior{ I_Glass} } cone { <0,-0.8,0> 0.1 <0,-1, 0> 0 texture { pigment { Black } } interior{ I_Glass} } } } #declare Paredes = object { box { <-100,-50, -50> <100,80, 200> } texture { pigment{ image_map { gif "gifs/gotelet.gif" } } finish { ambient 0.3 diffuse 0.6 } rotate y*45 scale <5, 7, 5> } interior{ I_Glass} } #declare TextuSuelo = texture { pigment { checker color Black color Blue} } #declare Suelo = object { plane { y, -49.9 } texture { PinkAlabaster } interior{ I_Glass} } #declare Mesa = object { union { box { < -80, -10.001, 140> < 100, -13 , 200> } box { < -79, -50, 141> < -75, -10, 145> } box { < 99, -50, 199> < 95, -10, 195> } box { < -79, -50, 199> < -75, -10, 195> } box { < 99, -50, 141> < 95, -10, 145> } } texture { EMBWood1 rotate y*90 rotate x*90 scale <5,5,5> finish { ambient 0.1 diffuse 0.1 specular 1 reflection 0.2 roughness .1 } } interior{ I_Glass} } object {GloboTierra translate <90, -4, 190> } object { Paredes } object { Suelo } object { Mesa } object { Lapiz rotate z*10 translate < 70, -10, 165> } object { Cubilete translate < 70, -10, 165> texture { pigment { White_Wood } } interior{ I_Glass} } object { VasoAgua translate <97,-10, 170> } object { BotellaAgua translate <45,-10, 190> } object { Lapiz rotate z*90 translate < 80, -10+(RadLapiz/2), 155> } object { Papel rotate y *-30 translate < 85, -10, 145> } // ***** Libro LinuxBible ***** #declare LargoLibro = 20; #declare AnchoLibro = 12; #declare GruesoLibro = 4.5; #declare PortadaLibro = "gifs/bookp2.gif" #declare LomoLibro = "gifs/bookl2.gif" #include "Libro.inc" object { Libro rotate x*90 rotate y *-60 translate <36, -10, 165> } // ***** Varios Libros ***** #declare LargoLibro = 20; #declare AnchoLibro = 12; #declare GruesoLibro = 13; #declare PortadaLibro = "gifs/bookp1.gif" #declare LomoLibro = "gifs/bookls1.gif" #include "Libro.inc" object { Libro rotate x*90 rotate y *-90 translate <55, -10, 195> } #declare TamDisquete = 5; #declare PortadaDisquete = "gifs/disquete1.gif" #include "Disquete.inc" object { Disquete rotate x*90 translate <80, -10, 147> } #declare TamDisquete = 5 ; #declare PortadaDisquete = "gifs/disquete2.gif" #include "Disquete.inc" object { Disquete rotate x*90 rotate y*30 translate <90, -10, 165> } // vim: set sw=2 ts=2 et : |