#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.95, 0.96, 0.98> } camera { location <0, 3.2, -10.5> look_at <0, 2.2, 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.92, 0.80>*1.1 area_light <2.2,0,0>, <0,0,2.2>, 5, 5 adaptive 1 jitter } light_source { <-7, 7, -5> color rgb <1.00, 0.88, 0.75>*0.6 area_light <1.8,0,0>, <0,0,1.8>, 5, 5 adaptive 1 jitter } #declare Mat_Wood = finish { diffuse 0.75 specular 0.10 roughness 0.06 }; #declare Mat_Metal = finish { diffuse 0.55 specular 0.25 roughness 0.03 }; #declare Mat_String = finish { diffuse 0.70 specular 0.05 roughness 0.10 }; #declare Col_Stage = color rgb <0.90, 0.88, 0.84>; #declare Col_Wall = color rgb <0.93, 0.94, 0.96>; #declare Col_Wood = color rgb <0.77, 0.60, 0.42>; #declare Col_Joint = color rgb <0.30, 0.26, 0.22>; #declare Col_Metal = color rgb <0.75, 0.75, 0.78>; #declare Col_String = color rgb <0.18, 0.18, 0.20>; plane { y, 0 pigment { Col_Stage } finish { diffuse 0.85 specular 0.05 roughness 0.08 } } plane { z, 4 pigment { Col_Wall } finish { diffuse 0.90 specular 0.02 roughness 0.10 } } #macro Capsule(P1, P2, R) union { cylinder { P1, P2, R } sphere { P1, R } sphere { P2, R } } #end #declare PuppetY = 2.0; // overall body reference height #declare PuppetPos = <0, 0, 0>; #declare HeadR = 0.55; #declare NeckR = 0.14; #declare TorsoTop = <0, PuppetY+0.35, 0>; #declare TorsoBot = <0, PuppetY-0.75, 0>; #declare TorsoR1 = 0.55; #declare TorsoR2 = 0.65; #declare HipCenter = <0, PuppetY-0.95, 0>; #declare HipR = 0.28; #declare ShoulderY = PuppetY+0.20; #declare ShoulderL = <-0.80, ShoulderY, 0>; #declare ShoulderR = < 0.80, ShoulderY, 0>; #declare ShoulderRJoint = 0.18; #declare ElbowL = <-1.35, ShoulderY-0.45, 0>; #declare ElbowR = < 1.35, ShoulderY-0.45, 0>; #declare WristL = <-1.55, ShoulderY-1.05, 0>; #declare WristR = < 1.55, ShoulderY-1.05, 0>; #declare ArmR = 0.14; #declare HandR = 0.18; #declare KneeL = <-0.40, PuppetY-1.85, 0>; #declare KneeR = < 0.40, PuppetY-1.85, 0>; #declare AnkleL = <-0.40, PuppetY-2.70, 0>; #declare AnkleR = < 0.40, PuppetY-2.70, 0>; #declare LegR = 0.16; #declare FootR = 0.18; #declare HeadCenter = <0, PuppetY+1.15, 0>; #declare NeckTop = <0, PuppetY+0.65, 0>; #declare NeckBot = <0, PuppetY+0.40, 0>; #declare Puppet = union { // Head sphere { HeadCenter, HeadR pigment { Col_Wood } finish { Mat_Wood } } // Neck (fits precisely between head and torso top) object { Capsule(NeckBot, NeckTop, NeckR) pigment { Col_Joint } finish { Mat_Wood } } // Torso cone { TorsoTop, TorsoR1 TorsoBot, TorsoR2 pigment { Col_Wood } finish { Mat_Wood } } // Hips joint sphere { HipCenter, HipR pigment { Col_Joint } finish { Mat_Wood } } // Shoulder joints sphere { ShoulderL, ShoulderRJoint pigment { Col_Joint } finish { Mat_Wood } } sphere { ShoulderR, ShoulderRJoint pigment { Col_Joint } finish { Mat_Wood } } // Arms (upper + lower, with elbow joint) object { Capsule(ShoulderL, ElbowL, ArmR) pigment { Col_Wood } finish { Mat_Wood } } sphere { ElbowL, 0.16 pigment { Col_Joint } finish { Mat_Wood } } object { Capsule(ElbowL, WristL, ArmR) pigment { Col_Wood } finish { Mat_Wood } } sphere { WristL, HandR pigment { Col_Wood } finish { Mat_Wood } } object { Capsule(ShoulderR, ElbowR, ArmR) pigment { Col_Wood } finish { Mat_Wood } } sphere { ElbowR, 0.16 pigment { Col_Joint } finish { Mat_Wood } } object { Capsule(ElbowR, WristR, ArmR) pigment { Col_Wood } finish { Mat_Wood } } sphere { WristR, HandR pigment { Col_Wood } finish { Mat_Wood } } // Leg joints at hip (left/right) sphere { <-0.40, PuppetY-1.10, 0>, 0.18 pigment { Col_Joint } finish { Mat_Wood } } sphere { < 0.40, PuppetY-1.10, 0>, 0.18 pigment { Col_Joint } finish { Mat_Wood } } // Legs (upper + lower, knee joint) object { Capsule(<-0.40, PuppetY-1.10, 0>, KneeL, LegR) pigment { Col_Wood } finish { Mat_Wood } } sphere { KneeL, 0.18 pigment { Col_Joint } finish { Mat_Wood } } object { Capsule(KneeL, AnkleL, LegR) pigment { Col_Wood } finish { Mat_Wood } } sphere { AnkleL, FootR pigment { Col_Wood } finish { Mat_Wood } } object { Capsule(< 0.40, PuppetY-1.10, 0>, KneeR, LegR) pigment { Col_Wood } finish { Mat_Wood } } sphere { KneeR, 0.18 pigment { Col_Joint } finish { Mat_Wood } } object { Capsule(KneeR, AnkleR, LegR) pigment { Col_Wood } finish { Mat_Wood } } sphere { AnkleR, FootR pigment { Col_Wood } finish { Mat_Wood } } // Position puppet translate PuppetPos } object { Puppet } // // Control cross + strings // #declare CrossY = PuppetY + 3.10; #declare CrossCenter = <0, CrossY, -0.2>; #declare CrossHalf = 1.20; #declare CrossR = 0.06; #declare Cross = union { object { Capsule(CrossCenter + <-CrossHalf,0,0>, CrossCenter + , CrossR) pigment { Col_Metal } finish { Mat_Metal } } object { Capsule(CrossCenter + <0,0,-CrossHalf>, CrossCenter + <0,0, CrossHalf>, CrossR) pigment { Col_Metal } finish { Mat_Metal } } sphere { CrossCenter, 0.09 pigment { Col_Metal } finish { Mat_Metal } } } object { Cross } #declare StringR = 0.018; // Strings to hands and head object { Capsule(CrossCenter + <-CrossHalf,0,0>, WristL + <0,0.15,0>, StringR) pigment { Col_String } finish { Mat_String } } object { Capsule(CrossCenter + < CrossHalf,0,0>, WristR + <0,0.15,0>, StringR) pigment { Col_String } finish { Mat_String } } object { Capsule(CrossCenter + <0,0,0>, HeadCenter + <0,0.55,0>, StringR) pigment { Col_String } finish { Mat_String } }