#version 3.7; global_settings { assumed_gamma 1.0 max_trace_level 6 } #include "colors.inc" background { color rgb <1.00, 0.95, 0.92> } // warm pastel // ---------- Lights (warm, soft shadows) ---------- light_source { <6, 10, -8> color rgb <1.00, 0.92, 0.82>*1.2 area_light <2.2,0,0>, <0,0,2.2>, 5, 5 adaptive 1 jitter } light_source { <-6, 7, -6> color rgb <1.00, 0.95, 0.88>*0.7 area_light <1.6,0,0>, <0,0,1.6>, 4, 4 adaptive 1 jitter } // ---------- Camera ---------- camera { location <0, 3.2, -10> look_at <0, 2.0, 0> angle 34 } // ---------- Ground / simple stage ---------- plane { y, 0 texture { pigment { color rgb <0.98, 0.92, 0.90> } finish { diffuse 0.8 specular 0.08 roughness 0.06 } } } box { <-6, 0, -2>, <6, 0.15, 6> texture { pigment { color rgb <0.95, 0.88, 0.86> } finish { diffuse 0.8 specular 0.12 roughness 0.05 } } translate <0,0.0,0> } // ---------- Materials ---------- #declare WoodTex = texture { pigment { color rgb <0.86, 0.70, 0.50> } finish { diffuse 0.75 specular 0.15 roughness 0.06 } }; #declare DressPink = texture { pigment { color rgb <0.98, 0.62, 0.76> } finish { diffuse 0.75 specular 0.20 roughness 0.05 } }; #declare DressTrim = texture { pigment { color rgb <1.00, 0.90, 0.96> } finish { diffuse 0.75 specular 0.25 roughness 0.04 } }; #declare GoldTex = texture { pigment { color rgb <1.00, 0.84, 0.30> } finish { diffuse 0.45 specular 0.55 roughness 0.03 } }; #declare HairTex = texture { pigment { color rgb <0.45, 0.26, 0.12> } finish { diffuse 0.75 specular 0.15 roughness 0.06 } }; #declare EyeBlack = texture { pigment { color rgb <0.08, 0.08, 0.10> } finish { diffuse 0.6 specular 0.35 roughness 0.02 } }; #declare Cheek = texture { pigment { color rgb <1.0, 0.70, 0.78> } finish { diffuse 0.7 specular 0.15 roughness 0.06 } }; #declare StringTex = texture { pigment { color rgb <0.92, 0.92, 0.90> } finish { diffuse 0.8 specular 0.05 roughness 0.08 } }; // ---------- Puppet dimensions ---------- #declare PuppetY = 2.0; // chest height reference #declare HeadR = 0.55; #declare NeckR = 0.14; #declare TorsoR1 = 0.42; // top torso radius #declare TorsoR2 = 0.48; // bottom torso radius #declare TorsoH = 0.80; #declare HipR = 0.30; #declare UpperArmL = 0.55; #declare LowerArmL = 0.55; #declare ArmR = 0.12; #declare UpperLegL = 0.65; #declare LowerLegL = 0.65; #declare LegR = 0.14; #declare JointR = 0.16; // ---------- Helper: joint sphere ---------- #macro Joint(Pos) sphere { Pos, JointR texture { WoodTex } } #end // ---------- Puppet assembly ---------- #declare Puppet = union { // --- Head & neck --- sphere { <0, 3.05, 0>, HeadR texture { WoodTex } } cylinder { <0, 2.55, 0>, <0, 2.72, 0>, NeckR texture { WoodTex } } // Face: eyes, cheeks, mouth sphere { <-0.18, 3.10, -0.46>, 0.08 texture { EyeBlack } } sphere { < 0.18, 3.10, -0.46>, 0.08 texture { EyeBlack } } sphere { <-0.28, 2.92, -0.42>, 0.11 texture { Cheek } } sphere { < 0.28, 2.92, -0.42>, 0.11 texture { Cheek } } torus { 0.12, 0.025 rotate <90, 0, 0> translate <0, 2.85, -0.52> texture { pigment { color rgb <0.75,0.20,0.30> } finish { diffuse 0.6 specular 0.2 roughness 0.05 } } } // --- Hair (simple cap + side buns) --- difference { sphere { <0, 3.15, 0>, 0.58 } box { <-1, -1, -1>, <1, 3.05, 1> translate <0,0,0> } texture { HairTex } } sphere { <-0.48, 3.05, 0.05>, 0.22 texture { HairTex } } sphere { < 0.48, 3.05, 0.05>, 0.22 texture { HairTex } } // --- Crown --- union { torus { 0.26, 0.05 rotate <90,0,0> translate <0,3.55,0> texture { GoldTex } } cone { <0.00,3.52,0.18>, 0.07, <0.00,3.74,0.18>, 0.00 texture { GoldTex } } cone { <-0.16,3.52,0.10>, 0.06, <-0.16,3.72,0.10>, 0.00 texture { GoldTex } } cone { < 0.16,3.52,0.10>, 0.06, < 0.16,3.72,0.10>, 0.00 texture { GoldTex } } sphere { <0.00,3.75,0.18>, 0.04 texture { GoldTex } } } // --- Torso (wood under dress) --- cone { <0, 2.55, 0>, TorsoR1, <0, 1.75, 0>, TorsoR2 texture { WoodTex } } // --- Dress bodice (pink) fits torso precisely --- cone { <0, 2.55, 0>, TorsoR1+0.05, <0, 1.95, 0>, TorsoR2+0.08 texture { DressPink } } // Bodice trim torus { TorsoR1+0.06, 0.03 rotate <90,0,0> translate <0, 2.48, 0> texture { DressTrim } } // --- Skirt (flared) aligned to bodice bottom --- cone { <0, 1.95, 0>, TorsoR2+0.10, <0, 0.85, 0>, 1.05 texture { DressPink } } // Skirt hem trim torus { 1.05, 0.035 rotate <90,0,0> translate <0, 0.86, 0> texture { DressTrim } } // --- Hips joint area (inside skirt; still present) --- sphere { <0, 1.70, 0>, HipR texture { WoodTex } } // --- Arms (with joints) --- // Left shoulder joint Joint(<-0.60, 2.40, 0>) // Left upper arm cylinder { <-0.60,2.40,0>, <-1.10,2.10,0>, ArmR texture { WoodTex } } // Left elbow joint Joint(<-1.10, 2.10, 0>) // Left lower arm cylinder { <-1.10,2.10,0>, <-1.35,1.65,0>, ArmR texture { WoodTex } } // Left wrist joint Joint(<-1.35, 1.65, 0>) // Left hand (mitten) sphere { <-1.43, 1.55, 0.05>, 0.16 texture { WoodTex } } // Right shoulder joint Joint(<0.60, 2.40, 0>) cylinder { <0.60,2.40,0>, <1.10,2.10,0>, ArmR texture { WoodTex } } Joint(<1.10, 2.10, 0>) cylinder { <1.10,2.10,0>, <1.35,1.65,0>, ArmR texture { WoodTex } } Joint(<1.35, 1.65, 0>) sphere { <1.43, 1.55, 0.05>, 0.16 texture { WoodTex } } // --- Legs (with joints) --- // Left hip joint Joint(<-0.25, 1.55, 0>) // Left upper leg cylinder { <-0.25,1.55,0>, <-0.25,0.95,0>, LegR texture { WoodTex } } // Left knee joint Joint(<-0.25, 0.95, 0>) // Left lower leg cylinder { <-0.25,0.95,0>, <-0.25,0.35,0>, LegR texture { WoodTex } } // Left ankle joint Joint(<-0.25, 0.35, 0>) // Left shoe union { sphere { <-0.25, 0.22, -0.08>, 0.18 } box { <-0.43,0.05,-0.30>, <-0.07,0.22,0.10> } texture { pigment { color rgb <0.55,0.25,0.55> } finish { diffuse 0.75 specular 0.2 roughness 0.06 } } } // Right hip joint Joint(<0.25, 1.55, 0>) cylinder { <0.25,1.55,0>, <0.25,0.95,0>, LegR texture { WoodTex } } Joint(<0.25, 0.95, 0>) cylinder { <0.25,0.95,0>, <0.25,0.35,0>, LegR texture { WoodTex } } Joint(<0.25, 0.35, 0>) union { sphere { <0.25, 0.22, -0.08>, 0.18 } box { <0.07,0.05,-0.30>, <0.43,0.22,0.10> } texture { pigment { color rgb <0.55,0.25,0.55> } finish { diffuse 0.75 specular 0.2 roughness 0.06 } } } // --- Decorative heart on bodice --- union { sphere { <-0.08, 2.20, -0.47>, 0.10 } sphere { < 0.08, 2.20, -0.47>, 0.10 } cone { <0, 2.12, -0.47>, 0.14, <0, 2.00, -0.47>, 0.00 } texture { pigment { color rgb <0.95,0.25,0.45> } finish { diffuse 0.7 specular 0.25 roughness 0.05 } } } // --- Marionette strings + controller --- // Controller (simple cross) union { cylinder { <-0.70, 4.35, 0>, <0.70, 4.35, 0>, 0.05 texture { WoodTex } } cylinder { <0, 4.35, -0.70>, <0, 4.35, 0.70>, 0.05 texture { WoodTex } } sphere { <0,4.35,0>, 0.07 texture { WoodTex } } } // Strings to head and wrists (thin cylinders) cylinder { <0, 4.30, 0>, <0, 3.55, 0>, 0.012 texture { StringTex } } // to crown cylinder { <-0.55, 4.33, 0.05>, <-1.35, 1.75, 0.05>, 0.010 texture { StringTex } } // left wrist area cylinder { < 0.55, 4.33, 0.05>, < 1.35, 1.75, 0.05>, 0.010 texture { StringTex } } // right wrist area } // Place puppet on stage object { Puppet translate <0, 0.0, 1.5> }