// Marionette Puppet Theatre — fast iteration scene with simple colors, soft warm lights, and radiosity. #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.03, 0.03, 0.05> } #default { finish { ambient 0 diffuse 0.85 } } // ---------------- Camera (16:9) ---------------- camera { location <0.0, 2.2, -7.6> look_at <0.0, 1.7, 1.8> angle 40 up <0,9,0> right <16,0,0> // right,up -> 16:9 } // ---------------- Lights (warm + soft shadows) ---------------- light_source { <0.2, 5.6, -2.6> color rgb <1.00, 0.84, 0.65>*1.35 area_light <1.4,0,0>, <0,0,1.1>, 4, 4 adaptive 1 jitter orient } light_source { <-3.6, 3.8, -2.2> color rgb <1.00, 0.78, 0.60>*0.45 area_light <0.9,0,0>, <0,0,0.7>, 3, 3 adaptive 1 jitter orient } // ---------------- Useful heights ---------------- #declare FloorY = 0.0; #declare StageTopY = 0.60; // ---------------- Colors (simple shading) ---------------- #declare Col_StageWood = rgb <0.28, 0.18, 0.10>; #declare Col_ArchWood = rgb <0.22, 0.14, 0.08>; #declare Col_CurtainRed = rgb <0.35, 0.05, 0.08>; #declare Col_BackBlack = rgb <0.04, 0.04, 0.05>; #declare Col_String = rgb <0.78, 0.78, 0.80>; #declare Col_Skin = rgb <0.92, 0.78, 0.66>; #declare Col_BlueCloth = rgb <0.14, 0.22, 0.56>; #declare Col_GreenCloth = rgb <0.14, 0.48, 0.24>; #declare Col_ControlWood = rgb <0.30, 0.20, 0.12>; // ---------------- Theatre set ---------------- plane { y, FloorY pigment { color Col_BackBlack } finish { diffuse 0.9 } } // Stage deck (top at StageTopY) box { <-3.00, FloorY, 0.00>, <3.00, StageTopY, 4.10> pigment { color Col_StageWood } finish { diffuse 0.85 specular 0.15 roughness 0.06 } } // Backdrop wall (flush with stage depth) box { <-3.00, StageTopY, 4.10>, <3.00, 3.30, 4.25> pigment { color Col_BackBlack } finish { diffuse 0.95 } } // Proscenium arch (frame with cut-out opening) difference { box { <-3.35, StageTopY, -0.25>, <3.35, 3.65, 0.35> } box { <-2.25, 1.10, -0.60>, <2.25, 3.20, 0.70> } pigment { color Col_ArchWood } finish { diffuse 0.85 specular 0.12 roughness 0.07 } } // Curtains (simple shapes, aligned to arch) box { <-2.65, 3.15, 0.10>, <2.65, 3.45, 0.55> pigment { color Col_CurtainRed } finish { diffuse 0.9 specular 0.05 roughness 0.10 } } box { <-2.85, 1.08, 0.12>, <-2.35, 3.18, 0.52> pigment { color Col_CurtainRed } finish { diffuse 0.9 specular 0.05 roughness 0.10 } } box { < 2.35, 1.08, 0.12>, < 2.85, 3.18, 0.52> pigment { color Col_CurtainRed } finish { diffuse 0.9 specular 0.05 roughness 0.10 } } // Rig crossbar above stage opening cylinder { <-1.90, 3.45, 1.55>, <1.90, 3.45, 1.55>, 0.04 pigment { color Col_ControlWood } finish { diffuse 0.85 specular 0.12 roughness 0.07 } } // ---------------- Marionette macro ---------------- #macro Marionette(POS, CLOTH_COL, YAW_DEG) union { // Body parts (aligned so feet touch StageTopY precisely) // Feet: spheres centered at y=StageTopY+0.09 with r=0.09 => bottoms at StageTopY sphere { <-0.11, StageTopY+0.09, 0.05>, 0.09 pigment { color Col_BackBlack } finish { diffuse 0.85 } } sphere { < 0.11, StageTopY+0.09, 0.05>, 0.09 pigment { color Col_BackBlack } finish { diffuse 0.85 } } // Legs: end at ankle centers y=StageTopY+0.09 cylinder { <-0.11, 1.16, 0.05>, <-0.11, StageTopY+0.09, 0.05>, 0.06 pigment { color CLOTH_COL } finish { diffuse 0.9 } } cylinder { < 0.11, 1.16, 0.05>, < 0.11, StageTopY+0.09, 0.05>, 0.06 pigment { color CLOTH_COL } finish { diffuse 0.9 } } // Torso sphere { <0.00, 1.52, 0.00>, 0.30 pigment { color CLOTH_COL } finish { diffuse 0.9 specular 0.06 roughness 0.08 } } cylinder { <0.00, 1.20, 0.03>, <0.00, 1.42, 0.02>, 0.22 pigment { color CLOTH_COL } finish { diffuse 0.9 } } // Neck + head cylinder { <0.00, 1.74, 0.00>, <0.00, 1.82, 0.00>, 0.07 pigment { color Col_Skin } finish { diffuse 0.9 specular 0.06 roughness 0.08 } } sphere { <0.00, 2.02, 0.00>, 0.20 pigment { color Col_Skin } finish { diffuse 0.9 specular 0.06 roughness 0.08 } } // Arms (shoulders at y=1.62) cylinder { <-0.28, 1.62, 0.00>, <-0.62, 1.46, 0.02>, 0.06 pigment { color CLOTH_COL } finish { diffuse 0.9 } } cylinder { < 0.28, 1.62, 0.00>, < 0.62, 1.46, 0.02>, 0.06 pigment { color CLOTH_COL } finish { diffuse 0.9 } } // Hands sphere { <-0.70, 1.40, 0.03>, 0.09 pigment { color Col_Skin } finish { diffuse 0.9 specular 0.06 roughness 0.08 } } sphere { < 0.70, 1.40, 0.03>, 0.09 pigment { color Col_Skin } finish { diffuse 0.9 specular 0.06 roughness 0.08 } } // Simple face (fast) sphere { <-0.07, 2.06, -0.17>, 0.03 pigment { color rgb 0 } finish { diffuse 0.95 } } sphere { < 0.07, 2.06, -0.17>, 0.03 pigment { color rgb 0 } finish { diffuse 0.95 } } sphere { < 0.00, 1.97, -0.18>, 0.02 pigment { color rgb <0.55,0.14,0.16> } finish { diffuse 0.95 } } // Control bar above puppet (each puppet has its own) box { <-0.26, 3.28, 1.55>, <0.26, 3.33, 1.60> pigment { color Col_ControlWood } finish { diffuse 0.85 specular 0.12 roughness 0.07 } } // Strings (to control bar) cylinder { <-0.70, 1.40, 0.03>, <-0.18, 3.30, 1.575>, 0.006 pigment { color Col_String } finish { diffuse 0.85 } } cylinder { < 0.70, 1.40, 0.03>, < 0.18, 3.30, 1.575>, 0.006 pigment { color Col_String } finish { diffuse 0.85 } } cylinder { < 0.00, 2.02, 0.00>, < 0.00, 3.30, 1.575>, 0.005 pigment { color Col_String } finish { diffuse 0.85 } } // Positioning rotate <0, YAW_DEG, 0> translate POS } #end // ---------------- Place puppets ---------------- Marionette(<-0.85, 0.00, 1.55>, Col_BlueCloth, 12) Marionette(< 0.95, 0.00, 1.85>, Col_GreenCloth, -10) // ---------------- Simple stage prop ---------------- box { <-0.35, StageTopY, 2.70>, <0.35, StageTopY+0.38, 3.25> pigment { color Col_ControlWood } finish { diffuse 0.85 specular 0.12 roughness 0.07 } }