#version 3.7; global_settings { assumed_gamma 1.0 max_trace_level 8 } background { color rgb <0.96, 0.97, 1.0> } // ------------------------------------------------------------ // Lights (warm, soft-ish shadows; fast settings) // ------------------------------------------------------------ light_source { <6, 10, -8> color rgb <1.00, 0.86, 0.70>*1.15 area_light <1.2,0,0>, <0,0,1.2>, 5, 5 adaptive 1 jitter } light_source { <-7, 7, -3> color rgb <1.00, 0.92, 0.80>*0.55 area_light <1.0,0,0>, <0,0,1.0>, 4, 4 adaptive 1 jitter } light_source { <0, 20, 0> color rgb <1,1,1>*0.20 } // ------------------------------------------------------------ // Camera // ------------------------------------------------------------ camera { location <0, 2.6, -9.0> look_at <0, 1.6, 0> angle 35 } // ------------------------------------------------------------ // Textures // ------------------------------------------------------------ #declare T_Wood = texture { pigment { wood color_map { [0.00 rgb <0.55, 0.33, 0.18>] [0.45 rgb <0.66, 0.40, 0.22>] [0.70 rgb <0.58, 0.35, 0.19>] [1.00 rgb <0.72, 0.45, 0.25>] } scale 0.25 rotate <0, 25, 0> } normal { bumps 0.25 scale 0.06 } finish { diffuse 0.78 specular 0.25 roughness 0.04 } } #declare T_Wood_Dark = texture { pigment { wood color_map { [0.00 rgb <0.32, 0.20, 0.12>] [1.00 rgb <0.46, 0.28, 0.16>] } scale 0.30 rotate <0, 10, 0> } normal { bumps 0.22 scale 0.07 } finish { diffuse 0.8 specular 0.22 roughness 0.05 } } #declare T_Cloth = texture { pigment { color rgb <0.20, 0.30, 0.55> } normal { ripples 0.15 scale 0.12 } finish { diffuse 0.9 specular 0.08 roughness 0.12 } } #declare T_String = texture { pigment { color rgb <0.92, 0.90, 0.82> } finish { diffuse 0.85 specular 0.08 roughness 0.10 } } // ------------------------------------------------------------ // Ground // ------------------------------------------------------------ plane { y, 0 texture { pigment { color rgb <0.93, 0.92, 0.90> } finish { diffuse 0.9 specular 0.05 roughness 0.15 } } } // ------------------------------------------------------------ // Marionette (aligned primitives) // ------------------------------------------------------------ #declare Puppet = union { // Body proportions (units) // Feet sit on y=0. // Ankles around y=0.25, knees ~0.85, hips ~1.2, torso up to ~2.1, head top ~2.85 // --- Legs --- // Left leg union { // Upper leg cylinder { <-0.35, 1.18, 0>, <-0.35, 0.80, 0>, 0.12 texture { T_Wood } } sphere { <-0.35, 0.80, 0>, 0.13 texture { T_Wood } } // knee // Lower leg cylinder { <-0.35, 0.80, 0>, <-0.35, 0.28, 0>, 0.10 texture { T_Wood } } sphere { <-0.35, 0.28, 0>, 0.11 texture { T_Wood } } // ankle // Foot box { <-0.52, 0.00, -0.14>, <-0.18, 0.12, 0.20> texture { T_Wood_Dark } } } // Right leg union { cylinder { <0.35, 1.18, 0>, <0.35, 0.80, 0>, 0.12 texture { T_Wood } } sphere { <0.35, 0.80, 0>, 0.13 texture { T_Wood } } cylinder { <0.35, 0.80, 0>, <0.35, 0.28, 0>, 0.10 texture { T_Wood } } sphere { <0.35, 0.28, 0>, 0.11 texture { T_Wood } } box { <0.18, 0.00, -0.14>, <0.52, 0.12, 0.20> texture { T_Wood_Dark } } } // --- Hips connector --- cylinder { <-0.35, 1.18, 0>, <0.35, 1.18, 0>, 0.10 texture { T_Wood } } // --- Torso --- union { // wooden core cylinder { <0, 1.20, 0>, <0, 2.05, 0>, 0.38 texture { T_Wood } } // cloth "shirt" overlay (slightly bigger) cylinder { <0, 1.28, 0>, <0, 2.00, 0>, 0.42 texture { T_Cloth } } } // --- Shoulders bar --- cylinder { <-0.75, 2.00, 0>, <0.75, 2.00, 0>, 0.09 texture { T_Wood } } // --- Arms --- // Left arm union { sphere { <-0.75, 2.00, 0>, 0.11 texture { T_Wood } } // shoulder joint cylinder { <-0.75, 2.00, 0>, <-1.18, 1.55, 0>, 0.09 texture { T_Wood } } // upper sphere { <-1.18, 1.55, 0>, 0.10 texture { T_Wood } } // elbow cylinder { <-1.18, 1.55, 0>, <-1.05, 1.05, 0>, 0.08 texture { T_Wood } } // lower sphere { <-1.05, 1.05, 0>, 0.09 texture { T_Wood } } // wrist box { <-1.16, 0.92, -0.08>, <-0.94, 1.06, 0.10> texture { T_Wood_Dark } } // hand } // Right arm union { sphere { <0.75, 2.00, 0>, 0.11 texture { T_Wood } } cylinder { <0.75, 2.00, 0>, <1.18, 1.55, 0>, 0.09 texture { T_Wood } } sphere { <1.18, 1.55, 0>, 0.10 texture { T_Wood } } cylinder { <1.18, 1.55, 0>, <1.05, 1.05, 0>, 0.08 texture { T_Wood } } sphere { <1.05, 1.05, 0>, 0.09 texture { T_Wood } } box { <0.94, 0.92, -0.08>, <1.16, 1.06, 0.10> texture { T_Wood_Dark } } } // --- Neck + Head --- cylinder { <0, 2.05, 0>, <0, 2.18, 0>, 0.12 texture { T_Wood } } union { sphere { <0, 2.45, 0>, 0.42 texture { T_Wood } } // head // simple carved nose cone { <0, 2.45, -0.42>, 0.06, <0, 2.45, -0.55>, 0.00 texture { T_Wood_Dark } } // eye dots sphere { <-0.12, 2.52, -0.33>, 0.04 texture { pigment { color rgb <0.08,0.08,0.08> } finish { diffuse 0.8 } } } sphere { < 0.12, 2.52, -0.33>, 0.04 texture { pigment { color rgb <0.08,0.08,0.08> } finish { diffuse 0.8 } } } // mouth torus { 0.16, 0.02 rotate <90,0,0> translate <0, 2.34, -0.33> texture { pigment { color rgb <0.25,0.10,0.07> } finish { diffuse 0.8 specular 0.05 } } } } // --- Controller + Strings --- union { // Controller crossbar above head box { <-0.90, 3.15, -0.10>, <0.90, 3.25, 0.10> texture { T_Wood_Dark } } box { <-0.10, 3.15, -0.90>, <0.10, 3.25, 0.90> texture { T_Wood_Dark } } // Strings (head + hands) cylinder { <0, 3.15, 0>, <0, 2.87, 0>, 0.01 texture { T_String } } // head top cylinder { <-0.85,3.15, 0>, <-1.05, 1.06, 0>, 0.01 texture { T_String } } // left hand cylinder { <0.85, 3.15, 0>, < 1.05, 1.06, 0>, 0.01 texture { T_String } } // right hand } } object { Puppet translate <0, 0, 0> }