#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 } } #default { finish { ambient 0 diffuse 1 } } background { color rgb <0.78, 0.78, 0.82> } camera { location <0, 2.8, -12.6> look_at <0, 2.1, 0> angle 40 up <0,9,0> right <16,0,0> // right,up -> 16:9 } // ----------------- // Warm lights (soft shadows) - reduced intensity // ----------------- #declare Target = <0, 2.1, 0>; light_source { <-4.2, 7.4, -6.4> color rgb <1.00, 0.86, 0.72>*0.60 spotlight point_at Target radius 18 falloff 30 tightness 8 fade_distance 18 fade_power 2 area_light <0.9,0,0>, <0,0,0.9>, 5, 5 adaptive 1 jitter } light_source { <5.4, 6.2, -3.2> color rgb <1.00, 0.90, 0.80>*0.30 spotlight point_at <0.2, 2.0, 0.2> radius 22 falloff 38 tightness 6 fade_distance 18 fade_power 2 area_light <0.8,0,0>, <0,0,0.8>, 4, 4 adaptive 1 jitter } light_source { <0.0, 7.0, 5.8> color rgb <1.00, 0.92, 0.82>*0.12 spotlight point_at <0, 2.4, 0> radius 25 falloff 45 tightness 4 fade_distance 22 fade_power 2 area_light <1.0,0,0>, <0,0,1.0>, 4, 4 adaptive 1 jitter } // ----------------- // Palette (vectors) // ----------------- #declare C_WallA_v = <0.86, 0.86, 0.90>; #declare C_FloorA_v = <0.68, 0.58, 0.44>; #declare C_WoodA_v = <0.72, 0.58, 0.40>; #declare C_Cloth_v = <0.22, 0.33, 0.78>; #declare C_Skin_v = <0.95, 0.84, 0.72>; #declare C_Dark_v = <0.12, 0.12, 0.14>; #declare C_String_v = <0.92, 0.92, 0.92>; #declare C_Base_v = <0.72, 0.70, 0.68>; // ----------------- // Simple shading (no textures), fast renders // ----------------- #declare Tex_Back = texture { pigment { color rgb C_WallA_v } finish { diffuse 0.92 specular 0.02 roughness 0.14 } } #declare Tex_Floor = texture { pigment { color rgb C_FloorA_v } finish { diffuse 0.90 specular 0.06 roughness 0.08 } } #declare Tex_Wood = texture { pigment { color rgb C_WoodA_v } finish { diffuse 0.86 specular 0.18 roughness 0.06 } } #declare Tex_Cloth = texture { pigment { color rgb C_Cloth_v } finish { diffuse 0.96 specular 0.05 roughness 0.13 } } #declare Tex_Skin = texture { pigment { color rgb C_Skin_v } finish { diffuse 0.88 specular 0.10 roughness 0.09 } } #declare Tex_Dark = texture { pigment { color rgb C_Dark_v } finish { diffuse 0.90 specular 0.03 roughness 0.14 } } #declare Tex_String= texture { pigment { color rgb C_String_v } finish { diffuse 0.65 specular 0.18 roughness 0.06 } } #declare Tex_Base = texture { pigment { color rgb C_Base_v } finish { diffuse 0.90 specular 0.04 roughness 0.12 } } // ----------------- // Stage // ----------------- plane { y, 0 texture { Tex_Floor } } // Back wall box { <-6, 0, 2>, < 6, 6, 2.2> texture { Tex_Back } no_shadow } // Baseboard box { <-6, 0.00, 2.00>, <6, 0.35, 2.15> texture { Tex_Base } no_shadow } // ----------------- // Mirrors: left/right 1/5 of camera view (placed near camera) // ----------------- #declare MirrorFinish = finish { diffuse 0.02 specular 0.90 roughness 0.002 reflection { 0.55, 0.70 fresnel on } conserve_energy }; #declare MirrorTex = texture { pigment { color rgb <0.98,0.98,1.00> } finish { MirrorFinish } }; // Approximate: at z=-10, view width ~7.28, so 1/5 ~1.46. Use panels ~1.55 wide. #declare Mirror_Z = -10.0; #declare Mirror_Y0 = 0.0; #declare Mirror_Y1 = 6.0; #declare Mirror_W = 1.55; #declare Mirror_T = 0.03; box { <-3.64, Mirror_Y0, Mirror_Z>, <-3.64+Mirror_W, Mirror_Y1, Mirror_Z+Mirror_T> texture { MirrorTex } } box { < 3.64-Mirror_W, Mirror_Y0, Mirror_Z>, < 3.64, Mirror_Y1, Mirror_Z+Mirror_T> texture { MirrorTex } } // ----------------- // Marionette dimensions // ----------------- #declare Head_R = 0.35; #declare Neck_R = 0.10; #declare Torso_R = 0.45; #declare Torso_H = 1.05; #declare Hip_R = 0.23; #declare UpperArm_R = 0.14; #declare UpperArm_L = 0.70; #declare ForeArm_R = 0.12; #declare ForeArm_L = 0.65; #declare Thigh_R = 0.16; #declare Thigh_L = 0.80; #declare Shin_R = 0.14; #declare Shin_L = 0.80; #declare Hand_R = 0.13; #declare Foot_R = 0.15; #declare Y_Foot = 0.15; #declare Y_Knee = Y_Foot + Shin_L; #declare Y_Hip = Y_Knee + Thigh_L; #declare Y_TorsoBase = Y_Hip + Hip_R; #declare Y_TorsoTop = Y_TorsoBase + Torso_H; #declare Y_Neck = Y_TorsoTop + 0.12; #declare Y_Head = Y_Neck + Head_R + 0.10; #declare Shoulder_Y = Y_TorsoTop - 0.10; #declare Shoulder_Offset = 0.55; #declare Puppet = union { sphere { <0, Y_Hip, 0>, Hip_R texture { Tex_Wood } } cylinder { <0, Y_TorsoBase, 0>, <0, Y_TorsoTop, 0>, Torso_R texture { Tex_Cloth } } sphere { <0, Y_TorsoTop, 0>, Torso_R texture { Tex_Cloth } } cylinder { <0, Y_TorsoTop+0.02, 0>, <0, Y_Neck, 0>, Neck_R texture { Tex_Wood } } sphere { <0, Y_Head, 0>, Head_R texture { Tex_Skin } } sphere { <-0.10, Y_Head+0.05, -Head_R+0.04>, 0.035 texture { Tex_Dark } } sphere { < 0.10, Y_Head+0.05, -Head_R+0.04>, 0.035 texture { Tex_Dark } } cylinder { <0, Y_Head-0.08, -Head_R+0.03>, <0, Y_Head-0.11, -Head_R+0.03>, 0.03 texture { Tex_Dark } } sphere { <-Shoulder_Offset, Shoulder_Y, 0>, UpperArm_R texture { Tex_Wood } } sphere { < Shoulder_Offset, Shoulder_Y, 0>, UpperArm_R texture { Tex_Wood } } cylinder { <-Shoulder_Offset, Shoulder_Y, 0>, <-Shoulder_Offset, Shoulder_Y-UpperArm_L, 0.15>, UpperArm_R texture { Tex_Wood } } sphere { <-Shoulder_Offset, Shoulder_Y-UpperArm_L, 0.15>, ForeArm_R texture { Tex_Wood } } cylinder { <-Shoulder_Offset, Shoulder_Y-UpperArm_L, 0.15>, <-Shoulder_Offset, Shoulder_Y-UpperArm_L-ForeArm_L, 0.05>, ForeArm_R texture { Tex_Wood } } sphere { <-Shoulder_Offset, Shoulder_Y-UpperArm_L-ForeArm_L, 0.05>, Hand_R texture { Tex_Skin } } cylinder { , , UpperArm_R texture { Tex_Wood } } sphere { , ForeArm_R texture { Tex_Wood } } cylinder { , , ForeArm_R texture { Tex_Wood } } sphere { , Hand_R texture { Tex_Skin } } #declare Hip_Offset = 0.22; sphere { <-Hip_Offset, Y_Hip, 0>, Thigh_R texture { Tex_Wood } } sphere { < Hip_Offset, Y_Hip, 0>, Thigh_R texture { Tex_Wood } } cylinder { <-Hip_Offset, Y_Hip, 0>, <-Hip_Offset, Y_Knee, 0.08>, Thigh_R texture { Tex_Wood } } sphere { <-Hip_Offset, Y_Knee, 0.08>, Shin_R texture { Tex_Wood } } cylinder { <-Hip_Offset, Y_Knee, 0.08>, <-Hip_Offset, Y_Foot, 0.03>, Shin_R texture { Tex_Wood } } sphere { <-Hip_Offset, Y_Foot, 0.03>, Foot_R texture { Tex_Dark } } cylinder { , , Thigh_R texture { Tex_Wood } } sphere { , Shin_R texture { Tex_Wood } } cylinder { , , Shin_R texture { Tex_Wood } } sphere { , Foot_R texture { Tex_Dark } } torus { 0.36, 0.05 rotate <90,0,0> translate <0, Y_TorsoBase+0.08, 0> texture { Tex_Dark } } } object { Puppet } // ----------------- // Controller + strings // ----------------- #declare Ctrl_Y = 4.2; #declare Ctrl_Z = -0.2; #declare Controller = union { box { <-1.4, Ctrl_Y-0.05, Ctrl_Z-0.10>, <1.4, Ctrl_Y+0.05, Ctrl_Z+0.10> texture { Tex_Wood } } box { <-0.12, Ctrl_Y-0.75, Ctrl_Z-0.08>, <0.12, Ctrl_Y-0.05, Ctrl_Z+0.08> texture { Tex_Wood } } } object { Controller } #declare LHand = <-Shoulder_Offset, Shoulder_Y-UpperArm_L-ForeArm_L, 0.05>; #declare RHand = < Shoulder_Offset, Shoulder_Y-UpperArm_L-ForeArm_L, -0.05>; #declare HeadTop = <0, Y_Head+Head_R, 0>; #declare LCtrl = <-1.1, Ctrl_Y-0.05, Ctrl_Z>; #declare RCtrl = < 1.1, Ctrl_Y-0.05, Ctrl_Z>; #declare HCtrl = < 0.0, Ctrl_Y-0.05, Ctrl_Z>; cylinder { LCtrl, LHand, 0.015 texture { Tex_String } } cylinder { RCtrl, RHand, 0.015 texture { Tex_String } } cylinder { HCtrl, HeadTop, 0.012 texture { Tex_String } }