#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 } } #include "colors.inc" sky_sphere { pigment { gradient y color_map { [0.00 color rgb <0.50,0.66,0.66>] [0.50 color rgb <0.72,0.86,0.92>] [1.00 color rgb <0.84,0.94,0.98>] } } } camera { location <0, 4.2, -14> look_at <0, 2.2, 0> angle 40 up <0,9,0> right <16,0,0> // right,up -> 16:9 } // -------------------- Warm lights + soft shadows -------------------- light_source { <6, 10, -10> color rgb <1.00, 0.82, 0.65>*1.25 spotlight point_at <0, 1.8, 1.0> radius 16 falloff 28 tightness 8 area_light <2.2,0,0>, <0,0,2.2>, 5, 5 adaptive 1 jitter } light_source { <-8, 7, -6> color rgb <1.00, 0.88, 0.72>*0.75 spotlight point_at <0, 1.4, 0.6> radius 14 falloff 26 tightness 10 area_light <1.8,0,0>, <0,0,1.8>, 5, 5 adaptive 1 jitter } // soft ambient skylight (very low) light_source { <0, 18, -2> color rgb <1.00, 0.95, 0.88>*0.18 shadowless } // -------------------- Atmosphere -------------------- fog { fog_type 2 distance 44 color rgb <0.66,0.84,0.82> fog_offset 0.1 fog_alt 5.5 turbulence 0.22 } // bounded media for light shafts / jungle haze #declare AtmosBox = box { <-45,0,-55>, <45,20,35> } object { AtmosBox hollow pigment { rgbt <1,1,1, 1> } interior { media { method 3 intervals 1 samples 7, 14 scattering { 1, rgb <0.85, 0.95, 0.90>*0.11 } absorption rgb <0.06,0.08,0.06>*0.16 density { bozo color_map { [0.00 rgb 0.10] [0.55 rgb 0.40] [1.00 rgb 0.08] } scale 6 turbulence 0.95 } } } } // -------------------- Finishes -------------------- #declare Fin_Soil = finish { diffuse 0.92 specular 0.03 roughness 0.22 }; #declare Fin_Leaf = finish { diffuse 0.85 specular 0.16 roughness 0.07 }; #declare Fin_Bark = finish { diffuse 0.88 specular 0.10 roughness 0.10 }; #declare Fin_Vine = finish { diffuse 0.88 specular 0.06 roughness 0.14 }; #declare Fin_Stone = finish { diffuse 0.85 specular 0.12 roughness 0.07 }; // -------------------- Procedural Textures -------------------- // Soil: layered dirt + organic breakup + bump #declare Tex_Ground = texture { pigment { bozo color_map{ [0.00 color rgb <0.09,0.08,0.06>] [0.35 color rgb <0.16,0.13,0.09>] [0.75 color rgb <0.24,0.20,0.13>] [1.00 color rgb <0.11,0.10,0.07>] } scale 1.7 turbulence 0.85 } normal { bumps 0.40 scale 0.33 } finish { Fin_Soil } } // Leaf litter: smaller noise + flatter bump #declare Tex_LeafLitter = texture { pigment { granite color_map{ [0.00 color rgb <0.12,0.10,0.07>] [0.35 color rgb <0.20,0.16,0.10>] [0.75 color rgb <0.28,0.22,0.14>] [1.00 color rgb <0.10,0.09,0.06>] } scale 0.45 turbulence 0.6 } normal { bumps 0.22 scale 0.18 } finish { Fin_Soil } } // Bark: wood rings rotated to appear vertical + ridge normals #declare Tex_Bark = texture { pigment { wood color_map{ [0.00 color rgb <0.18,0.12,0.08>] [0.30 color rgb <0.33,0.23,0.15>] [0.65 color rgb <0.24,0.17,0.11>] [1.00 color rgb <0.12,0.09,0.06>] } scale 0.55 turbulence 0.25 rotate <0,90,0> } normal { wrinkles 0.80 scale 0.18 } finish { Fin_Bark } } // Leaves: broken greens + subtle veins #declare Tex_Leaf1 = texture { pigment { bozo color_map{ [0.00 color rgb <0.05,0.20,0.10>] [0.55 color rgb <0.10,0.36,0.17>] [1.00 color rgb <0.04,0.26,0.12>] } scale 0.70 turbulence 0.8 } normal { ripples 0.22 scale 0.11 } finish { Fin_Leaf } } #declare Tex_Leaf2 = texture { pigment { bozo color_map{ [0.00 color rgb <0.05,0.18,0.09>] [0.55 color rgb <0.08,0.30,0.15>] [1.00 color rgb <0.04,0.24,0.12>] } scale 0.85 turbulence 0.9 } normal { ripples 0.20 scale 0.12 } finish { Fin_Leaf } } #declare Tex_Vine = texture { pigment { bozo color_map{ [0.00 color rgb <0.05,0.14,0.07>] [0.60 color rgb <0.10,0.26,0.12>] [1.00 color rgb <0.06,0.16,0.08>] } scale 0.30 turbulence 0.6 } normal { bumps 0.35 scale 0.08 } finish { Fin_Vine } } #declare Tex_Stone = texture { pigment { granite color_map{ [0.00 color rgb <0.16,0.16,0.18>] [0.35 color rgb <0.32,0.32,0.34>] [0.70 color rgb <0.46,0.46,0.48>] [1.00 color rgb <0.22,0.22,0.24>] } scale 0.35 turbulence 0.4 } normal { bumps 0.65 scale 0.12 } finish { Fin_Stone } } // -------------------- Ground -------------------- plane { y, 0 texture { Tex_Ground } } // quick undulation via height_field (kept small and centered) #declare GroundRipples = height_field { function 140, 140 { pattern { bozo turbulence 0.65 scale 0.55 } } smooth translate <-0.5,0,-0.5> scale <16, 0.26, 16> translate <0, 0.02, 1.0> texture { Tex_Ground } } object { GroundRipples } #macro LitterPatch(P, R) cylinder { <0,0,0>, <0,0.02,0>, R texture { Tex_LeafLitter } translate P } #end LitterPatch(<-1.8,0, 1.2>, 1.4) LitterPatch(< 2.1,0, 0.2>, 1.1) LitterPatch(< 0.3,0, 2.4>, 0.9) LitterPatch(<-2.8,0,-0.3>, 1.0) LitterPatch(< 0.8,0,-1.0>, 0.8) // small mound + stones in clearing sphere { <0,0.55,1.5>, 1.25 texture { Tex_Ground } } sphere { <-1.4,0.20,0.3>, 0.25 texture { Tex_Stone } } sphere { <-1.1,0.16,0.9>, 0.20 texture { Tex_Stone } } sphere { < 1.6,0.18,0.6>, 0.22 texture { Tex_Stone } } sphere { < 1.2,0.14,1.2>, 0.18 texture { Tex_Stone } } // -------------------- Plants -------------------- #macro Tree(Pos, TrunkH, TrunkR, LeanX, LeanZ, LeafR) union { cylinder { <0,0,0>, , TrunkR texture { Tex_Bark } } // canopy blobs sphere { , LeafR texture { Tex_Leaf2 } } sphere { , LeafR*0.85 texture { Tex_Leaf1 } } sphere { , LeafR*0.75 texture { Tex_Leaf1 } } sphere { , LeafR*0.65 texture { Tex_Leaf2 } } translate Pos } #end #macro PalmLeaf(Ang, Len, Wide, TexA) union { // flattened "leaf blade" sphere { <0,0,0>, 1 scale translate <0, 0.10, Len*0.55> texture { TexA } } rotate <0, Ang, 0> } #end #macro BroadPlant(Pos, StemH, LeafTex) union { cylinder { <0,0,0>, <0,StemH,0>, 0.07 texture { Tex_Vine } } union { PalmLeaf( -35, 1.7, 0.60, LeafTex) PalmLeaf( 15, 1.95,0.68, LeafTex) PalmLeaf( 75, 1.60,0.55, LeafTex) PalmLeaf( 145, 1.85,0.66, LeafTex) translate <0, StemH, 0> } translate Pos } #end // Foreground framing plants (bigger for a more "jungle" feel) BroadPlant(<-3.7,0,-6.6>, 0.95, Tex_Leaf2) BroadPlant(< 3.8,0,-6.3>, 1.05, Tex_Leaf1) BroadPlant(<-2.7,0,-5.1>, 0.85, Tex_Leaf1) BroadPlant(< 0.0,0,-6.9>, 0.95, Tex_Leaf2) BroadPlant(< 2.2,0,-5.6>, 0.82, Tex_Leaf2) BroadPlant(<-1.8,0,-5.8>, 0.80, Tex_Leaf1) // Midground jungle ring Tree(<-5.5,0, -1.0>, 6.2, 0.28, 0.35, 0.10, 1.35) Tree(<-4.2,0, 2.0>, 5.8, 0.26, 0.25, -0.15, 1.25) Tree(<-2.5,0, 4.2>, 5.0, 0.22, -0.10, 0.20, 1.15) Tree(< 2.8,0, 4.0>, 5.2, 0.22, 0.15, 0.25, 1.15) Tree(< 5.0,0, 1.5>, 6.0, 0.27, -0.30, -0.10, 1.30) Tree(< 4.4,0, -2.2>, 5.6, 0.25, -0.20, 0.10, 1.20) Tree(< 1.8,0, -3.2>, 4.6, 0.20, 0.10, 0.00, 1.05) Tree(<-1.6,0, -3.0>, 4.8, 0.21, -0.10, 0.05, 1.05) // Extra trunks for density Tree(<-7.0,0, 0.8>, 5.8, 0.22, 0.10, 0.05, 0.95) Tree(< 7.2,0, -0.2>, 6.3, 0.24, -0.10, 0.08, 1.00) Tree(<-6.2,0, 3.8>, 6.8, 0.26, 0.18, -0.10, 1.10) Tree(< 6.0,0, 4.2>, 6.6, 0.26, -0.16, 0.12, 1.10) // Background depth layer (slightly larger + pushed back) Tree(<-8.6,0, 7.2>, 7.7, 0.33, 0.30, 0.20, 1.60) Tree(< 0.2,0, 8.6>, 7.2, 0.31, -0.25, 0.10, 1.55) Tree(< 8.6,0, 6.7>, 7.6, 0.33, -0.20, -0.15, 1.60) // Far silhouettes (simple trunks + darker canopies to suggest deep jungle) #declare Tex_LeafDark = texture { pigment { color rgb <0.06,0.16,0.10> } finish { diffuse 0.90 specular 0.05 roughness 0.10 } }; #macro FarTree(P, H, R, C) union{ cylinder{ <0,0,0>, <0,H,0>, R texture{ Tex_Bark } } sphere{ <0,H*0.9,0>, C texture{ Tex_LeafDark } } translate P } #end FarTree(<-14,0, 14>, 9.0, 0.40, 2.2) FarTree(< 14,0, 13>, 9.4, 0.42, 2.4) FarTree(< -2,0, 16>, 9.2, 0.40, 2.3) // Hanging vines union { #declare i = 0; #while (i < 11) #declare vx = -4.6 + i*0.92; cylinder { , , 0.05 texture { Tex_Vine } } cylinder { , , 0.04 texture { Tex_Vine } } #declare i = i + 1; #end } // Low shrubs around clearing edge union { #declare j = 0; #while (j < 18) #declare a = j*20; #declare px = 2.95*cos(radians(a)); #declare pz = 2.35*sin(radians(a)) + 1.35; sphere { , 0.55 texture { Tex_Leaf1 } } sphere { , 0.40 texture { Tex_Leaf2 } } #declare j = j + 1; #end } // Small scattered clumps near camera union { sphere { <-2.2,0.18,-4.8>, 0.35 texture { Tex_Leaf2 } } sphere { <-1.9,0.14,-4.5>, 0.28 texture { Tex_Leaf1 } } sphere { < 2.4,0.16,-4.9>, 0.33 texture { Tex_Leaf1 } } sphere { < 2.1,0.12,-4.6>, 0.26 texture { Tex_Leaf2 } } sphere { < 0.6,0.14,-4.4>, 0.24 texture { Tex_Leaf2 } } } // Foreground "big leaf" shapes (simple, fast) to sell jungle density #declare Tex_FGLeaf = texture { pigment { bozo color_map{ [0.00 color rgb <0.04,0.18,0.10>] [0.60 color rgb <0.08,0.28,0.15>] [1.00 color rgb <0.03,0.22,0.12>] } scale 0.55 turbulence 0.7 } normal { ripples 0.18 scale 0.10 } finish { diffuse 0.86 specular 0.12 roughness 0.08 } } union { sphere { <-6.2,0.0,-8.0>, 1 scale <3.0,0.10,1.6> translate <0,0.40,0> texture { Tex_FGLeaf } rotate <0,20,0> } sphere { <-4.8,0.0,-8.2>, 1 scale <2.6,0.10,1.4> translate <0,0.32,0> texture { Tex_FGLeaf } rotate <0,-10,0> } } union { sphere { <6.0,0.0,-8.1>, 1 scale <3.1,0.10,1.7> translate <0,0.38,0> texture { Tex_FGLeaf } rotate <0,-20,0> } sphere { <4.6,0.0,-8.3>, 1 scale <2.5,0.10,1.3> translate <0,0.30,0> texture { Tex_FGLeaf } rotate <0,12,0> } }