#version 3.7; global_settings { assumed_gamma 1.0 } background { color rgb <0.92, 0.94, 0.98> } camera { location <6.0, 3.2, -8.5> look_at <0.0, 1.2, 0.0> angle 35 } light_source { <12, 18, -16> color rgb <1.0, 1.0, 1.0> } light_source { <-10, 10, -6> color rgb <0.55, 0.60, 0.70> } light_source { <0, 6, 10> color rgb <0.25, 0.25, 0.30> } plane { y, 0 texture { pigment { color rgb <0.86, 0.88, 0.92> } finish { diffuse 0.85 specular 0.10 roughness 0.06 } } } #declare MeshBlackTex = texture { pigment { color rgb <0.03, 0.03, 0.035> } finish { diffuse 0.35 specular 0.55 roughness 0.03 reflection 0.04 } } #declare StrutTex = texture { pigment { color rgb <0.02, 0.02, 0.025> } finish { diffuse 0.30 specular 0.65 roughness 0.02 reflection 0.03 } } #macro RingChain(Start, End, N, MajorR, MinorR) #local i = 0; #local Dir = End-Start; #local d = vnormalize(Dir); #local yaw = degrees(atan2(d.x, d.z)); #local pitch = -degrees(asin(d.y)); #while (i < N) // NOTE: 't' is reserved in POV-Ray; use 'tt' instead. #local tt = (i+0.5)/N; #local P = Start + Dir*tt; torus { MajorR, MinorR rotate translate P texture { MeshBlackTex } } #local i = i + 1; #end #end #macro Strut(A, B, R) cylinder { A, B, R texture { StrutTex } } #end #declare Horse = union { // Torso and rump (two overlapping chains) RingChain(<-0.95, 1.25, 0.10>, <0.75, 1.25, 0.15>, 14, 0.55, 0.05) RingChain(<-0.75, 1.35, 0.05>, <0.95, 1.18, 0.20>, 12, 0.48, 0.045) // Back/top struts Strut(<-0.85, 1.55, 0.05>, <0.85, 1.45, 0.18>, 0.03) Strut(<-0.60, 1.62, 0.02>, <0.60, 1.52, 0.16>, 0.025) // Belly struts Strut(<-0.75, 1.02, 0.10>, <0.65, 1.02, 0.15>, 0.03) Strut(<-0.40, 0.95, 0.08>, <0.35, 0.95, 0.13>, 0.028) // Neck RingChain(<0.65, 1.45, 0.12>, <1.35, 2.05, -0.10>, 9, 0.26, 0.04) Strut(<0.70, 1.55, 0.10>, <1.28, 2.00, -0.08>, 0.022) Strut(<0.60, 1.40, 0.14>, <1.22, 1.90, -0.06>, 0.020) // Head (short chain + muzzle ring) RingChain(<1.35, 2.05, -0.10>, <1.88, 1.92, -0.42>, 7, 0.20, 0.035) torus { 0.16, 0.03 rotate <0, -25, 0> translate <1.98, 1.88, -0.52> texture { MeshBlackTex } } // Ear hints as tiny struts Strut(<1.55, 2.14, -0.18>, <1.60, 2.33, -0.22>, 0.012) Strut(<1.45, 2.14, -0.12>, <1.48, 2.30, -0.10>, 0.011) // Tail RingChain(<-1.00, 1.35, 0.08>, <-1.55, 1.05, 0.35>, 7, 0.18, 0.03) RingChain(<-1.55, 1.05, 0.35>, <-1.85, 0.75, 0.55>, 6, 0.14, 0.028) Strut(<-1.10, 1.35, 0.10>, <-1.82, 0.78, 0.55>, 0.018) // Legs (simple mesh columns with a couple of cross struts) // Front near leg RingChain(<0.55, 1.10, -0.05>, <0.62, 0.25, -0.10>, 10, 0.16, 0.03) Strut(<0.52, 0.78, -0.04>, <0.65, 0.62, -0.10>, 0.018) // Front far leg RingChain(<0.55, 1.10, 0.22>, <0.62, 0.28, 0.30>, 10, 0.16, 0.028) Strut(<0.50, 0.80, 0.22>, <0.66, 0.60, 0.30>, 0.017) // Rear near leg RingChain(<-0.55, 1.10, 0.02>, <-0.50, 0.25, 0.08>, 10, 0.18, 0.03) Strut(<-0.58, 0.78, 0.02>, <-0.47, 0.62, 0.08>, 0.018) // Rear far leg RingChain(<-0.55, 1.10, 0.26>, <-0.50, 0.28, 0.34>, 10, 0.18, 0.028) Strut(<-0.58, 0.80, 0.26>, <-0.46, 0.62, 0.34>, 0.017) // Hoof hints (small flattened rings close to ground) torus { 0.11, 0.022 scale <1.2,0.55,1.0> rotate <90,0,0> translate <0.62, 0.22, -0.10> texture { MeshBlackTex } } torus { 0.11, 0.022 scale <1.2,0.55,1.0> rotate <90,0,0> translate <0.62, 0.25, 0.30> texture { MeshBlackTex } } torus { 0.12, 0.024 scale <1.2,0.55,1.0> rotate <90,0,0> translate <-0.50, 0.22, 0.08> texture { MeshBlackTex } } torus { 0.12, 0.024 scale <1.2,0.55,1.0> rotate <90,0,0> translate <-0.50, 0.25, 0.34> texture { MeshBlackTex } } // Slight overall adjustment for nicer pose rotate <0, -15, 0> translate <0, 0, 0> } object { Horse }