#version 3.7; global_settings { assumed_gamma 1.0 max_trace_level 8 } background { color rgb <0.92, 0.95, 1.0> } camera { location <0, 1.65, -6.0> look_at <0, 1.35, 0> angle 34 } light_source { <-7, 9, -7> color rgb <1, 1, 1> } light_source { < 6, 6, -2> color rgb <0.55, 0.60, 0.75> } light_source { < 0, 10, 6> color rgb <0.25, 0.25, 0.30> } #declare ToonFinish = finish { ambient 0.15 diffuse 0.85 specular 0.12 roughness 0.07 } #declare SkinTex = texture { pigment { color rgb <1.00, 0.83, 0.72> } finish { ToonFinish } } #declare ShirtTex = texture { pigment { color rgb <0.20, 0.55, 0.95> } finish { ToonFinish } } #declare PantsTex = texture { pigment { color rgb <0.18, 0.22, 0.32> } finish { ToonFinish } } #declare ShoeTex = texture { pigment { color rgb <0.08, 0.08, 0.09> } finish { ToonFinish } } #declare HairTex = texture { pigment { color rgb <0.12, 0.07, 0.03> } finish { ToonFinish } } #declare WhiteTex = texture { pigment { color rgb <1,1,1> } finish { ToonFinish } } #declare EyeTex = texture { pigment { color rgb <0.05, 0.12, 0.18> } finish { ToonFinish } } #declare MouthTex = texture { pigment { color rgb <0.25, 0.07, 0.08> } finish { ToonFinish } } #declare GroundTex = texture { pigment { color rgb <0.90, 0.90, 0.93> } finish { ambient 0.08 diffuse 0.92 specular 0.03 roughness 0.12 } } plane { y, 0 texture { GroundTex } } // ------------------------------ // Proportions / anchors (origin at feet center) // ------------------------------ #declare FootY = 0.10; // sole thickness approximation #declare AnkleY = 0.22; #declare KneeY = 0.62; #declare HipY = 0.98; #declare BellyY = 1.28; #declare ChestY = 1.48; #declare NeckY0 = 1.78; #declare NeckY1 = 1.93; #declare HeadY = 2.28; #declare ShoulderY = 1.60; #declare ShoulderX = 0.56; #declare HeadR = 0.50; // ------------------------------ // Limb macros (aligned by shared endpoints) // ------------------------------ #macro MakeArm(Side) #local sx = Side*ShoulderX; #local sh = ; #local el = ; #local wr = ; #local ha = ; union { // Upper arm (shirt) cylinder { sh, el, 0.14 texture { ShirtTex } } sphere { el, 0.15 texture { ShirtTex } } // Forearm (skin) cylinder { el, wr, 0.12 texture { SkinTex } } sphere { wr, 0.12 texture { SkinTex } } // Hand mitten sphere { ha, 0.16 scale <1.15, 0.85, 1.25> texture { SkinTex } } // Thumb bump (kept attached to hand) sphere { ha + , 0.06 texture { SkinTex } } } #end #macro MakeLeg(Side) #local sx = Side*0.22; #local hip = ; #local knee = ; #local ank = ; union { // Thigh cylinder { hip, knee, 0.16 texture { PantsTex } } sphere { knee, 0.17 texture { PantsTex } } // Shin cylinder { knee, ank, 0.14 texture { PantsTex } } // Shoe (aligned to ankle) union { sphere { , 0.18 scale <1.25, 0.62, 1.70> } sphere { , 0.14 scale <1.05, 0.58, 1.15> } texture { ShoeTex } } } #end // ------------------------------ // Character // ------------------------------ #declare HumanCartoon = union { // Hips / pelvis (pants) sphere { <0, HipY, 0>, 0.42 scale <1.05, 0.80, 0.78> texture { PantsTex } } // Torso (shirt) - aligned to hips sphere { <0, ChestY, 0>, 0.56 scale <0.92, 1.20, 0.70> texture { ShirtTex } } // Belly hint (shirt) - centered sphere { <0, BellyY, 0.06>, 0.40 scale <0.98, 1.00, 0.75> texture { ShirtTex } } // Neck (skin) cylinder { <0, NeckY0, 0>, <0, NeckY1, 0>, 0.13 texture { SkinTex } } // Head (skin) sphere { <0, HeadY, 0>, HeadR scale <1.00, 1.05, 0.95> texture { SkinTex } } // Hair cap (attached to head) difference { sphere { <0, HeadY+0.07, 0>, HeadR*1.03 scale <1.03, 0.92, 1.02> } box { <-2, -2, -2>, <2, HeadY+0.01, 2> } texture { HairTex } } // Hair tuft cone { <0.12, HeadY+0.48, -0.02>, 0.15, <0.30, HeadY+0.70, -0.18>, 0.00 texture { HairTex } } // Eyes (white + pupils) - symmetrically placed on face sphere { <-0.16, HeadY+0.10, -0.42>, 0.11 scale <1.10, 1.40, 0.60> texture { WhiteTex } } sphere { < 0.16, HeadY+0.10, -0.42>, 0.11 scale <1.10, 1.40, 0.60> texture { WhiteTex } } sphere { <-0.15, HeadY+0.10, -0.48>, 0.055 scale <1.00, 1.20, 0.60> texture { EyeTex } } sphere { < 0.17, HeadY+0.10, -0.48>, 0.055 scale <1.00, 1.20, 0.60> texture { EyeTex } } // Nose sphere { <0.00, HeadY-0.04, -0.47>, 0.07 scale <0.75, 0.55, 0.90> texture { SkinTex } } // Smile torus { 0.17, 0.03 rotate <90, 0, 0> texture { MouthTex } translate <0.00, HeadY-0.18, -0.45> scale <1.1, 1.0, 1.0> } // Arms (aligned at shoulders) object { MakeArm(-1) } object { MakeArm( 1) } // Legs (aligned at hip anchors) object { MakeLeg(-1) } object { MakeLeg( 1) } }; object { HumanCartoon translate <0, 0.00, 0> } // Subtle contact shadow blob (fast) blob { threshold 0.65 sphere { <-0.22, 0.02, 0.06>, 0.36, 1.0 } sphere { < 0.22, 0.02, 0.06>, 0.36, 1.0 } sphere { < 0.00, 0.02, 0.00>, 0.45, 0.8 } scale <1.25, 0.22, 1.25> texture { pigment { color rgbt <0, 0, 0, 0.78> } finish { ambient 1 diffuse 0 } } translate <0, 0.00, 0.08> }