#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.86, 0.93, 1.00> } camera { location <7.5, 5.2, -10.5> look_at <0.0, 2.2, 0.0> angle 40 up <0,9,0> right <16,0,0> // right,up -> 16:9 } light_source { <-6, 10, -8> color rgb <1.00, 0.88, 0.72>*1.2 area_light <2.2,0,0>, <0,0,2.2>, 5, 5 adaptive 1 jitter } light_source { <8, 7, -2> color rgb <1.00, 0.92, 0.80>*0.6 area_light <1.6,0,0>, <0,0,1.6>, 4, 4 adaptive 1 jitter } plane { y, 0 pigment { color rgb <0.95,0.95,0.97> } finish { diffuse 0.85 ambient 0.0 } } #declare Col_Skin = rgb <0.96, 0.80, 0.68>; #declare Col_Wood = rgb <0.70, 0.50, 0.30>; #declare Col_Shirt = rgb <0.35, 0.55, 0.95>; #declare Col_Pants = rgb <0.18, 0.22, 0.30>; #declare Col_String = rgb <0.82, 0.82, 0.82>; #declare Fin_Mat = finish { diffuse 0.85 ambient 0.0 specular 0.10 roughness 0.06 }; #declare Puppet = union { // Dimensions #local HeadR = 0.55; #local NeckH = 0.18; #local TorsoW = 1.10; #local TorsoH = 1.60; #local TorsoD = 0.55; #local ShoulderY = 3.55; #local HipY = 2.25; // Head (centered) sphere { <0, 4.55, 0>, HeadR pigment { color Col_Skin } finish { Fin_Mat } } // Simple face hint (small nose) sphere { <0.12, 4.52, -0.50>, 0.08 pigment { color Col_Skin*0.98 } finish { Fin_Mat } } // Neck (precisely touching head and torso) cylinder { <0, 4.55-HeadR, 0>, <0, 4.55-HeadR-NeckH, 0>, 0.17 pigment { color Col_Skin } finish { Fin_Mat } } // Torso (top touches bottom of neck) box { <-TorsoW/2, 4.55-HeadR-NeckH-TorsoH, -TorsoD/2>, < TorsoW/2, 4.55-HeadR-NeckH, TorsoD/2> pigment { color Col_Shirt } finish { Fin_Mat } } // Waist / pelvis block (touching torso bottom) box { <-0.55, 4.55-HeadR-NeckH-TorsoH-0.35, -0.30>, < 0.55, 4.55-HeadR-NeckH-TorsoH, 0.30> pigment { color Col_Pants } finish { Fin_Mat } } // Shoulders (touching torso sides) sphere { <-TorsoW/2, ShoulderY, 0>, 0.22 pigment { color Col_Wood } finish { Fin_Mat } } sphere { < TorsoW/2, ShoulderY, 0>, 0.22 pigment { color Col_Wood } finish { Fin_Mat } } // Arms (upper + lower + hands), aligned to touch at joints // Left arm #local UpperArmR = 0.16; #local LowerArmR = 0.14; #local UpperLen = 0.95; #local LowerLen = 0.90; // Upper arm: from shoulder to elbow cylinder { <-TorsoW/2, ShoulderY, 0>, <-TorsoW/2-0.55, ShoulderY-0.65, 0>, UpperArmR pigment { color Col_Wood } finish { Fin_Mat } } sphere { <-TorsoW/2-0.55, ShoulderY-0.65, 0>, 0.18 pigment { color Col_Wood } finish { Fin_Mat } } // elbow // Lower arm: elbow to wrist cylinder { <-TorsoW/2-0.55, ShoulderY-0.65, 0>, <-TorsoW/2-0.80, ShoulderY-1.45, 0>, LowerArmR pigment { color Col_Wood } finish { Fin_Mat } } sphere { <-TorsoW/2-0.80, ShoulderY-1.45, 0>, 0.16 pigment { color Col_Wood } finish { Fin_Mat } } // wrist sphere { <-TorsoW/2-0.82, ShoulderY-1.62, -0.02>, 0.20 pigment { color Col_Skin } finish { Fin_Mat } } // hand // Right arm (mirrored) cylinder { , , UpperArmR pigment { color Col_Wood } finish { Fin_Mat } } sphere { , 0.18 pigment { color Col_Wood } finish { Fin_Mat } } cylinder { , , LowerArmR pigment { color Col_Wood } finish { Fin_Mat } } sphere { , 0.16 pigment { color Col_Wood } finish { Fin_Mat } } sphere { , 0.20 pigment { color Col_Skin } finish { Fin_Mat } } // Hips (touching pelvis sides) sphere { <-0.45, HipY, 0>, 0.22 pigment { color Col_Wood } finish { Fin_Mat } } sphere { < 0.45, HipY, 0>, 0.22 pigment { color Col_Wood } finish { Fin_Mat } } // Legs (upper + lower + feet) #local UpperLegR = 0.17; #local LowerLegR = 0.15; // Left leg cylinder { <-0.45, HipY, 0>, <-0.55, HipY-1.05, 0>, UpperLegR pigment { color Col_Pants } finish { Fin_Mat } } sphere { <-0.55, HipY-1.05, 0>, 0.18 pigment { color Col_Wood } finish { Fin_Mat } } // knee cylinder { <-0.55, HipY-1.05, 0>, <-0.50, HipY-2.05, 0>, LowerLegR pigment { color Col_Pants } finish { Fin_Mat } } // Foot touching ground (bottom at y=0) box { <-0.78, 0.00, -0.20>, <-0.22, 0.22, 0.35> pigment { color Col_Wood } finish { Fin_Mat } translate <-0.50, HipY-2.05-0.22, 0> } // Right leg cylinder { <0.45, HipY, 0>, <0.55, HipY-1.05, 0>, UpperLegR pigment { color Col_Pants } finish { Fin_Mat } } sphere { <0.55, HipY-1.05, 0>, 0.18 pigment { color Col_Wood } finish { Fin_Mat } } cylinder { <0.55, HipY-1.05, 0>, <0.50, HipY-2.05, 0>, LowerLegR pigment { color Col_Pants } finish { Fin_Mat } } box { <0.22, 0.00, -0.20>, <0.78, 0.22, 0.35> pigment { color Col_Wood } finish { Fin_Mat } translate <0.50, HipY-2.05-0.22, 0> } // Small chest button (morning accent) sphere { <0.0, 3.05, -TorsoD/2-0.01>, 0.06 pigment { color rgb <1,1,1>*0.95 } finish { Fin_Mat } } // Move puppet so feet sit on ground precisely translate <0, 0.00, 0> } object { Puppet } // Control cross above puppet #declare Cross = union { box { <-1.4, 0.00, -0.12>, < 1.4, 0.18, 0.12> pigment { color Col_Wood } finish { Fin_Mat } } box { <-0.12, 0.00, -1.0>, < 0.12, 0.18, 1.0> pigment { color Col_Wood } finish { Fin_Mat } } translate <0, 6.3, 0> } object { Cross } // Strings (simple cylinders) #declare StringR = 0.02; // From cross center to head top cylinder { <0, 6.3, 0>, <0, 5.10, 0>, StringR pigment { color Col_String } finish { diffuse 0.75 ambient 0.0 specular 0.05 roughness 0.10 } } // To left hand cylinder { <-1.4, 6.3, 0>, <-1.92, 1.93, -0.02>, StringR pigment { color Col_String } finish { diffuse 0.75 ambient 0.0 specular 0.05 roughness 0.10 } } // To right hand cylinder { <1.4, 6.3, 0>, <1.92, 1.93, -0.02>, StringR pigment { color Col_String } finish { diffuse 0.75 ambient 0.0 specular 0.05 roughness 0.10 } } // To left shoulder cylinder { <-0.7, 6.3, 0>, <-0.55, 3.55, 0>, StringR pigment { color Col_String } finish { diffuse 0.75 ambient 0.0 specular 0.05 roughness 0.10 } } // To right shoulder cylinder { <0.7, 6.3, 0>, <0.55, 3.55, 0>, StringR pigment { color Col_String } finish { diffuse 0.75 ambient 0.0 specular 0.05 roughness 0.10 } }