#version 3.7; global_settings { assumed_gamma 1.3 max_trace_level 16 radiosity { pretrace_start 0.08 pretrace_end 0.01 count 200 nearest_count 10 error_bound 0.5 recursion_limit 2 low_error_factor 0.5 gray_threshold 0.0 } } background { color rgb <0.07, 0.06, 0.08> } camera { location <0, 2.2, -8.5> look_at <0, 1.5, 0> angle 40 up <0,9,0> right <16,0,0> // right,up -> 16:9 } // // Lights: warm conical spotlights + soft fill // light_source { <0.0, 5.2, -5.0> color rgb <1.00, 0.82, 0.65>*1.15 spotlight point_at <0.0, 1.25, 0.0> radius 18 falloff 32 tightness 12 area_light <0.8,0,0>, <0,0,0.8>, 5, 5 adaptive 1 jitter } light_source { <-2.4, 4.8, -4.6> color rgb <1.00, 0.78, 0.60>*0.75 spotlight point_at <-1.2, 1.2, 0.2> radius 16 falloff 30 tightness 14 area_light <0.7,0,0>, <0,0,0.7>, 5, 5 adaptive 1 jitter } light_source { <2.4, 4.8, -4.6> color rgb <1.00, 0.78, 0.60>*0.75 spotlight point_at <1.2, 1.2, 0.2> radius 16 falloff 30 tightness 14 area_light <0.7,0,0>, <0,0,0.7>, 5, 5 adaptive 1 jitter } // Soft ambient fill from above/back light_source { <0, 7, -2> color rgb <1.0, 0.92, 0.82>*0.25 area_light <2,0,0>, <0,0,2>, 4,4 adaptive 1 jitter } // // Simple pigments/finishes (no textures) // #declare Fin_Matte = finish { diffuse 0.85 specular 0.12 roughness 0.08 }; #declare Fin_Wood = finish { diffuse 0.90 specular 0.08 roughness 0.12 }; #declare Fin_Fabric= finish { diffuse 0.95 specular 0.03 roughness 0.20 }; // // Theatre shell (stage box) // union { // Floor box { <-4.0, 0.0, -0.2>, < 4.0, 0.12, 5.4> pigment { color rgb <0.38, 0.25, 0.16> } finish { Fin_Wood } } // Back wall box { <-4.0, 0.0, 5.25>, <4.0, 3.8, 5.4> pigment { color rgb <0.20, 0.16, 0.12> } finish { Fin_Matte } } // Side walls box { <-4.0, 0.0, -0.2>, <-3.7, 3.8, 5.4> pigment { color rgb <0.17, 0.14, 0.12> } finish { Fin_Matte } } box { < 3.7, 0.0, -0.2>, < 4.0, 3.8, 5.4> pigment { color rgb <0.17, 0.14, 0.12> } finish { Fin_Matte } } // Ceiling (dark) box { <-4.0, 3.65, -0.2>, <4.0, 3.8, 5.4> pigment { color rgb <0.08, 0.07, 0.08> } finish { Fin_Matte } } } // // Proscenium arch (front frame) // union { // Left pillar box { <-4.25, 0.0, -0.45>, <-3.55, 3.4, -0.10> pigment { color rgb <0.45, 0.30, 0.18> } finish { Fin_Wood } } // Right pillar box { < 3.55, 0.0, -0.45>, < 4.25, 3.4, -0.10> pigment { color rgb <0.45, 0.30, 0.18> } finish { Fin_Wood } } // Top beam box { <-4.25, 3.05, -0.45>, <4.25, 3.55, -0.10> pigment { color rgb <0.45, 0.30, 0.18> } finish { Fin_Wood } } // Inner arch opening mask (creates a rounded feel) difference { box { <-3.55, 0.40, -0.40>, <3.55, 3.05, -0.12> pigment { color rgb <0.45, 0.30, 0.18> } finish { Fin_Wood } } // carve opening union { box { <-3.15, 0.55, -0.55>, <3.15, 2.75, 0.10> } cylinder { <-3.15, 2.75, -0.55>, <3.15, 2.75, -0.55>, 0.55 } } } } // // Curtains (simple fabric planes/rolls) // union { // Top valance box { <-3.40, 2.85, -0.18>, <3.40, 3.05, 0.15> pigment { color rgb <0.45, 0.05, 0.08> } finish { Fin_Fabric } } // Side curtains box { <-3.45, 0.55, -0.18>, <-3.05, 2.85, 0.15> pigment { color rgb <0.48, 0.06, 0.10> } finish { Fin_Fabric } } box { < 3.05, 0.55, -0.18>, < 3.45, 2.85, 0.15> pigment { color rgb <0.48, 0.06, 0.10> } finish { Fin_Fabric } } // Curtain rolls (cylinders) to add depth cylinder { <-3.25, 2.85, -0.02>, <-3.25, 0.55, -0.02>, 0.12 pigment { color rgb <0.40, 0.05, 0.08> } finish { Fin_Fabric } } cylinder { < 3.25, 2.85, -0.02>, < 3.25, 0.55, -0.02>, 0.12 pigment { color rgb <0.40, 0.05, 0.08> } finish { Fin_Fabric } } } // // Overhead control bar and strings // #declare BarY = 3.35; union { cylinder { <-1.6, BarY, 0.6>, <1.6, BarY, 0.6>, 0.06 pigment { color rgb <0.25, 0.18, 0.12> } finish { Fin_Wood } } // supports cylinder { <-1.6, BarY, 0.6>, <-1.6, 3.75, 0.6>, 0.03 pigment { color rgb <0.15, 0.12, 0.10> } finish { Fin_Matte } } cylinder { < 1.6, BarY, 0.6>, < 1.6, 3.75, 0.6>, 0.03 pigment { color rgb <0.15, 0.12, 0.10> } finish { Fin_Matte } } } #declare Pig_String = pigment { color rgb <0.85,0.82,0.75> }; #declare Fin_String = finish { diffuse 0.7 specular 0.25 roughness 0.05 }; // // Puppet made mostly from blobs (two puppets) // #macro Puppet(Pos, Scale, ShirtColor, SkinColor) union { // Blob body cluster blob { threshold 0.6 // Head sphere { <0, 1.90, 0>, 0.30, 1.2 } // Nose sphere { <0.12, 1.88, -0.22>, 0.10, 0.9 } // Torso sphere { <0, 1.45, 0>, 0.38, 1.3 } // Hips sphere { <0, 1.15, 0>, 0.28, 1.1 } // Arms sphere { <-0.42, 1.52, 0.00>, 0.18, 1.0 } sphere { <-0.62, 1.32, -0.02>, 0.16, 0.9 } sphere { < 0.42, 1.52, 0.00>, 0.18, 1.0 } sphere { < 0.62, 1.32, -0.02>, 0.16, 0.9 } // Legs sphere { <-0.16, 0.78, 0.02>, 0.18, 1.0 } sphere { <-0.18, 0.48, 0.02>, 0.17, 0.9 } sphere { < 0.16, 0.78, 0.02>, 0.18, 1.0 } sphere { < 0.18, 0.48, 0.02>, 0.17, 0.9 } // Simple shader by layered pigments using a single pigment: keep simple pigment { color rgb SkinColor } finish { Fin_Matte } scale Scale translate Pos } // Shirt (non-blob, fitted to torso) sphere { Pos + <0, 1.45*Scale, 0> 0.40*Scale pigment { color rgb ShirtColor } finish { Fin_Matte } } // Shoes (small blobs as separate for contrast) blob { threshold 0.65 sphere { Pos + <-0.18*Scale, 0.28*Scale, -0.02>, 0.16*Scale, 1.1 } sphere { Pos + <-0.10*Scale, 0.28*Scale, -0.20>, 0.12*Scale, 0.9 } sphere { Pos + < 0.18*Scale, 0.28*Scale, -0.02>, 0.16*Scale, 1.1 } sphere { Pos + < 0.10*Scale, 0.28*Scale, -0.20>, 0.12*Scale, 0.9 } pigment { color rgb <0.07,0.07,0.08> } finish { diffuse 0.8 specular 0.15 roughness 0.06 } } // Eyes (simple) sphere { Pos + <-0.08*Scale, 1.96*Scale, -0.26>, 0.04*Scale pigment { color rgb <0.95,0.95,0.95> } finish { Fin_Matte } } sphere { Pos + < 0.02*Scale, 1.96*Scale, -0.26>, 0.04*Scale pigment { color rgb <0.95,0.95,0.95> } finish { Fin_Matte } } sphere { Pos + <-0.07*Scale, 1.96*Scale, -0.295>, 0.018*Scale pigment { color rgb <0.05,0.05,0.06> } finish { Fin_Matte } } sphere { Pos + < 0.03*Scale, 1.96*Scale, -0.295>, 0.018*Scale pigment { color rgb <0.05,0.05,0.06> } finish { Fin_Matte } } } #end // Place two puppets on stage Puppet(<-1.1, 0.12, 2.1>, 1.05, <0.10,0.30,0.55>, <0.86,0.72,0.60>) Puppet(< 1.2, 0.12, 2.35>, 0.98, <0.55,0.18,0.16>, <0.88,0.74,0.62>) // // Strings aligned to the bar above // #macro StringsForPuppet(PPos, S) union { cylinder { , , 0.008 pigment { Pig_String } finish { Fin_String } } cylinder { , , 0.006 pigment { Pig_String } finish { Fin_String } } cylinder { , , 0.006 pigment { Pig_String } finish { Fin_String } } } #end StringsForPuppet(<-1.1, 0.12, 2.1>, 1.05) StringsForPuppet(< 1.2, 0.12, 2.35>, 0.98) // // Stage props: blob "cloud" and a small blob "bush" to emphasize blob usage // blob { threshold 0.65 sphere { <-2.2, 2.55, 4.9>, 0.35, 1.0 } sphere { <-1.8, 2.65, 4.9>, 0.30, 1.0 } sphere { <-2.0, 2.85, 4.9>, 0.28, 1.0 } sphere { <-1.5, 2.55, 4.9>, 0.25, 0.9 } pigment { color rgb <0.80,0.82,0.90> } finish { diffuse 0.9 specular 0.08 roughness 0.10 } } blob { threshold 0.65 sphere { <2.4, 0.55, 4.85>, 0.32, 1.0 } sphere { <2.7, 0.55, 4.85>, 0.28, 1.0 } sphere { <2.55,0.78, 4.85>, 0.26, 1.0 } pigment { color rgb <0.18,0.40,0.22> } finish { diffuse 0.9 specular 0.06 roughness 0.12 } }