#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.05,0.06,0.10> } // Soft dreamy fog for depth fog { fog_type 2 distance 18 color rgb <0.10,0.10,0.14> fog_alt 1.2 turbulence 0.2 } camera { location <0, 3.2, -10.5> look_at <0, 2.1, 0> angle 40 up <0,9,0> right <16,0,0> // right,up -> 16:9 } // Warm soft key light light_source { <6, 9, -8> color rgb <1.0, 0.86, 0.70>*1.1 area_light <2.2,0,0>, <0,0,2.2>, 5, 5 adaptive 1 jitter } // Warm rim light light_source { <-7, 7, -2> color rgb <1.0, 0.80, 0.65>*0.55 area_light <1.6,0,0>, <0,0,1.6>, 4, 4 adaptive 1 jitter } // Gentle cool fill light_source { <0, 8, 6> color rgb <0.65, 0.75, 1.0>*0.25 area_light <2.0,0,0>, <0,0,2.0>, 4, 4 adaptive 1 jitter } // Simple shading materials #declare MatStage = finish { diffuse 0.75 specular 0.15 roughness 0.06 }; #declare MatWood = finish { diffuse 0.78 specular 0.18 roughness 0.05 }; #declare MatCloth = finish { diffuse 0.85 specular 0.08 roughness 0.10 }; #declare MatSkin = finish { diffuse 0.82 specular 0.10 roughness 0.08 }; #declare MatMetal = finish { diffuse 0.55 specular 0.35 roughness 0.03 }; #declare MatString= finish { diffuse 0.60 specular 0.10 roughness 0.10 }; #declare MatGlass = finish { diffuse 0.10 specular 0.45 roughness 0.01 reflection 0.08 }; // Ground / stage floor plane { y, 0 pigment { color rgb <0.12,0.11,0.12> } finish { diffuse 0.8 specular 0.1 roughness 0.08 } } // Stage pedestal (precisely on floor) #declare PedH = 0.55; cylinder { <0,0,0>, <0,PedH,0>, 1.35 pigment { color rgb <0.18,0.16,0.15> } finish { MatStage } } cylinder { <0,PedH,0>, <0,PedH+0.10,0>, 1.45 pigment { color rgb <0.22,0.20,0.19> } finish { MatStage } } // Overhead bar frame #declare BarY = 5.1; #declare BarHalf = 2.4; union { // vertical posts cylinder { <-BarHalf,0,0>, <-BarHalf,BarY,0>, 0.07 } cylinder { < BarHalf,0,0>, < BarHalf,BarY,0>, 0.07 } // top bar cylinder { <-BarHalf,BarY,0>, , 0.08 } pigment { color rgb <0.16,0.16,0.18> } finish { MatMetal } } // Marionette (assembled with aligned parts) // Base position on pedestal top #declare BaseY = PedH+0.10; // Dimensions #declare TorsoH = 1.15; #declare TorsoR = 0.33; #declare HipY = BaseY + 0.95; #declare TorsoY0= HipY; #declare TorsoY1= TorsoY0 + TorsoH; #declare HeadR = 0.28; #declare NeckH = 0.10; #declare ArmR = 0.08; #declare UpperArmL = 0.55; #declare ForeArmL = 0.55; #declare LegR = 0.09; #declare UpperLegL = 0.70; #declare LowerLegL = 0.70; #declare ShoulderY = TorsoY1 - 0.12; #declare ShoulderX = TorsoR + ArmR; // ensures arm touches torso #declare HipX = 0.18; // Helper colors #declare ColCloth = color rgb <0.36,0.45,0.85>; #declare ColWood = color rgb <0.65,0.52,0.38>; #declare ColSkin = color rgb <0.80,0.70,0.60>; #declare ColDark = color rgb <0.10,0.10,0.12>; union { // torso cylinder { <0,TorsoY0,0>, <0,TorsoY1,0>, TorsoR pigment { ColCloth } finish { MatCloth } } // simple belt ring torus { TorsoR, 0.035 rotate <90,0,0> translate <0,TorsoY0+0.12,0> pigment { color rgb <0.22,0.18,0.14> } finish { MatWood } } // neck (touches torso and head) cylinder { <0,TorsoY1,0>, <0,TorsoY1+NeckH,0>, 0.10 pigment { ColWood } finish { MatWood } } // head (touches neck top) sphere { <0,TorsoY1+NeckH+HeadR,0>, HeadR pigment { ColSkin } finish { MatSkin } } // small nose for character sphere { <0.0, TorsoY1+NeckH+HeadR, HeadR*0.92>, 0.045 pigment { ColSkin } finish { MatSkin } } // eyes (simple dark dots) sphere { <-0.09, TorsoY1+NeckH+HeadR+0.05, HeadR*0.88>, 0.03 pigment { ColDark } finish { diffuse 0.9 } } sphere { < 0.09, TorsoY1+NeckH+HeadR+0.05, HeadR*0.88>, 0.03 pigment { ColDark } finish { diffuse 0.9 } } // arms: left union { // upper arm from shoulder joint cylinder { <-ShoulderX,ShoulderY,0>, <-ShoulderX,ShoulderY-UpperArmL,0>, ArmR } sphere { <-ShoulderX,ShoulderY,0>, ArmR } // shoulder joint sphere { <-ShoulderX,ShoulderY-UpperArmL,0>, ArmR } // elbow joint // forearm cylinder { <-ShoulderX,ShoulderY-UpperArmL,0>, <-ShoulderX,ShoulderY-UpperArmL-ForeArmL,0>, ArmR*0.95 } sphere { <-ShoulderX,ShoulderY-UpperArmL-ForeArmL,0>, ArmR*0.95 } // wrist // hand sphere { <-ShoulderX,ShoulderY-UpperArmL-ForeArmL-0.10,0>, 0.10 } pigment { ColWood } finish { MatWood } } // arms: right union { cylinder { , , ArmR } sphere { , ArmR } sphere { , ArmR } cylinder { , , ArmR*0.95 } sphere { , ArmR*0.95 } sphere { , 0.10 } pigment { ColWood } finish { MatWood } } // hips joint spheres sphere { <-HipX, HipY, 0>, 0.10 pigment { ColWood } finish { MatWood } } sphere { < HipX, HipY, 0>, 0.10 pigment { ColWood } finish { MatWood } } // legs: left union { cylinder { <-HipX,HipY,0>, <-HipX,HipY-UpperLegL,0>, LegR } sphere { <-HipX,HipY-UpperLegL,0>, LegR } cylinder { <-HipX,HipY-UpperLegL,0>, <-HipX,HipY-UpperLegL-LowerLegL,0>, LegR*0.95 } sphere { <-HipX,HipY-UpperLegL-LowerLegL,0>, LegR*0.95 } // foot (touches floor? keep above pedestal top) box { <-HipX-0.14, HipY-UpperLegL-LowerLegL-0.10, -0.10>, <-HipX+0.14, HipY-UpperLegL-LowerLegL, 0.30> } pigment { ColWood } finish { MatWood } } // legs: right union { cylinder { , , LegR } sphere { , LegR } cylinder { , , LegR*0.95 } sphere { , LegR*0.95 } box { , } pigment { ColWood } finish { MatWood } } // ensure feet rest on pedestal top (not penetrating) translate <0, (BaseY + 0.02) - (HipY-UpperLegL-LowerLegL-0.10), 0> } // Dream bubbles (floating glassy spheres) #declare BubbleFinish = finish { MatGlass }; #declare BubbleCol = color rgb <0.75,0.85,1.0>; union { sphere { <-2.2, 3.2, 0.4>, 0.35 pigment { BubbleCol*0.75 } finish { BubbleFinish } } sphere { <-1.3, 4.1, -0.2>, 0.22 pigment { BubbleCol*0.65 } finish { BubbleFinish } } sphere { < 1.5, 3.6, 0.3>, 0.28 pigment { BubbleCol*0.70 } finish { BubbleFinish } } sphere { < 2.4, 4.5, -0.1>, 0.40 pigment { BubbleCol*0.60 } finish { BubbleFinish } } sphere { < 0.0, 4.9, 0.6>, 0.18 pigment { BubbleCol*0.55 } finish { BubbleFinish } } } // Strings (thin cylinders) to bar #declare StringR = 0.012; #declare StringCol = color rgb <0.30,0.28,0.26>; #declare PuppetTop = (PedH+0.10) + 0.02 + 0.95 + 1.15 + 0.10 + 2*0.28; // approx head top #declare HandY = (PedH+0.10) + 0.02 + ( (0.95+1.15) - 0.12 ) - (0.55+0.55) - 0.10; // approx hand level // Head string cylinder { <0, PuppetTop, 0>, <0, BarY, 0>, StringR pigment { StringCol } finish { MatString } } // Left hand string cylinder { <- (TorsoR + ArmR), HandY, 0>, <-1.0, BarY, 0>, StringR pigment { StringCol } finish { MatString } } // Right hand string cylinder { < (TorsoR + ArmR), HandY, 0>, < 1.0, BarY, 0>, StringR pigment { StringCol } finish { MatString } } // A soft "dream glow" disc behind the puppet (simple, fast) disc { <0,2.4,2.2>, <0,0,-1>, 2.6 pigment { color rgb <0.20,0.22,0.34> } finish { diffuse 0.7 specular 0.05 roughness 0.12 } }