#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 "functions.inc" background { color rgb <0.045, 0.060, 0.095> } // Camera (kept) camera { location <85, 42, -120> look_at <0, 14, 0> angle 40 up <0,9,0> right <16,0,0> // right,up -> 16:9 } // ----------------------------------------------------------------------------- // Conical (spot) lights: warm + soft edges. No area_lights. // ----------------------------------------------------------------------------- // Warm key spotlight from above-right light_source { <140, 120, -110> color rgb <1.00, 0.78, 0.60>*1.10 spotlight point_at <0, 14, 0> radius 18 falloff 38 tightness 8 } // Warm fill spotlight from left light_source { <-120, 95, -40> color rgb <1.00, 0.84, 0.70>*0.90 spotlight point_at <0, 12, 10> radius 22 falloff 48 tightness 6 } // High dome-ish soft spot (broad cone) light_source { <0, 220, 0> color rgb <1.00, 0.95, 0.85>*0.55 spotlight point_at <0, 10, 0> radius 45 falloff 80 tightness 2 } // Subtle cool rim from far horizon light_source { <0, 70, 260> color rgb <0.55, 0.70, 0.95>*0.18 spotlight point_at <0, 16, 0> radius 28 falloff 55 tightness 4 } // Raking “sky spots” to create futuristic shafts in haze light_source { <-220, 120, -240> color rgb <1.00, 0.78, 0.62>*0.65 spotlight point_at <20, 18, 10> radius 10 falloff 22 tightness 14 } light_source { <240, 130, -210> color rgb <1.00, 0.80, 0.60>*0.55 spotlight point_at <-25, 16, -5> radius 10 falloff 24 tightness 14 } // Street / infrastructure spot pools light_source { <40, 18, -40> color rgb <1.00, 0.75, 0.50>*0.55 spotlight point_at <40, 0.6, -40> radius 14 falloff 30 tightness 10 } light_source { <-55, 20, 35> color rgb <1.00, 0.74, 0.48>*0.45 spotlight point_at <-55, 0.6, 35> radius 16 falloff 34 tightness 10 } light_source { <0, 22, 85> color rgb <1.00, 0.76, 0.52>*0.40 spotlight point_at <0, 0.6, 85> radius 16 falloff 36 tightness 9 } // Atmospheric haze (kept, slightly tuned for spotlight shafts) fog { fog_type 2 distance 185 color rgb <0.16, 0.18, 0.22> fog_offset 0 fog_alt 14 turbulence 0.55 } // Sky gradient sphere { <0,0,0>, 2000 hollow texture { pigment { gradient y color_map { [0.00 color rgb <0.040,0.055,0.090>] [0.40 color rgb <0.070,0.090,0.125>] [0.70 color rgb <0.095,0.110,0.140>] [1.00 color rgb <0.160,0.175,0.200>] } scale 800 translate <0,-200,0> } finish { diffuse 0 ambient 1 } } } // Ground plane plane { y, 0.0 texture { pigment { color rgb <0.06, 0.065, 0.075> } finish { diffuse 0.85 specular 0.05 roughness 0.12 } } } // -------------------- Simple materials (no image textures) -------------------- #declare Mat_Concrete = texture { pigment { bozo color_map { [0.00 color rgb <0.19, 0.20, 0.23>] [0.55 color rgb <0.24, 0.26, 0.30>] [1.00 color rgb <0.15, 0.16, 0.19>] } scale 2.3 } finish { diffuse 0.82 specular 0.10 roughness 0.06 } }; #declare Mat_DarkMetal = texture { pigment { granite color_map { [0.00 color rgb <0.10, 0.11, 0.13>] [0.70 color rgb <0.15, 0.16, 0.18>] [1.00 color rgb <0.07, 0.08, 0.09>] } scale 1.2 } finish { diffuse 0.55 specular 0.30 roughness 0.025 } }; #declare Mat_Glass = texture { pigment { color rgbt <0.20, 0.36, 0.50, 0.70> } finish { diffuse 0.08 specular 0.55 roughness 0.010 reflection 0.08 } }; #declare Mat_LightCyan = texture { pigment { color rgb <0.25, 0.85, 0.95> } finish { diffuse 0.55 specular 0.25 roughness 0.03 ambient 0.14 } }; #declare Mat_LightMagenta = texture { pigment { color rgb <0.95, 0.30, 0.75> } finish { diffuse 0.55 specular 0.25 roughness 0.03 ambient 0.14 } }; #declare Mat_LightAmber = texture { pigment { color rgb <1.0, 0.70, 0.25> } finish { diffuse 0.58 specular 0.18 roughness 0.04 ambient 0.14 } }; #declare Mat_AsphaltPaint = texture { pigment { color rgb <0.13,0.13,0.14> } finish { diffuse 0.9 specular 0.04 roughness 0.10 } }; // -------------------- Ground base slab -------------------- box { <-220, 0, -220>, <220, 0.6, 220> texture { Mat_DarkMetal } } // Grid accents #declare i = -10; #while (i <= 10) box { <-220, 0.601, i*20-0.35>, <220, 0.605, i*20+0.35> texture { Mat_AsphaltPaint } } box { , texture { Mat_AsphaltPaint } } #declare i = i + 1; #end // -------------------- Macros -------------------- #macro Building(BaseX, BaseZ, W, D, H, StepCount, StepInset) union { #local i = 0; #while (i < StepCount) #local w2 = W - 2*StepInset*i; #local d2 = D - 2*StepInset*i; #local hh = (H/StepCount)*0.72; #local y0 = 0.6 + i*(H/StepCount)*0.56; #if (w2 < 1) #local w2 = 1; #end #if (d2 < 1) #local d2 = 1; #end box { , texture { Mat_Concrete } } #local i = i + 1; #end // crown box { , texture { Mat_DarkMetal } } // antenna cylinder { , , W*0.06 texture { Mat_DarkMetal } } cone { , W*0.06, , 0.0 texture { Mat_LightCyan } } // window bands #local bandCount = 8; #local b = 0; #while (b < bandCount) #local yy = 0.6 + H*(0.08 + 0.105*b); box { , texture { pigment { bozo color_map { [0.00 color rgb <0.09, 0.10, 0.11>] [0.60 color rgb <0.12, 0.13, 0.14>] [1.00 color rgb <0.07, 0.08, 0.09>] } scale 1.0 } finish { diffuse 0.38 specular 0.18 roughness 0.035 } } } box { , texture { Mat_Glass } } #local b = b + 1; #end } #end #macro SignPanel(Cx, Cy, Cz, W, H, ColTex) box { , texture { ColTex } } #end #macro SkyBridge(X1,Z1, X2,Z2, Y, W) union { box { , texture { Mat_DarkMetal } } box { , texture { Mat_Glass } } } #end #macro TransitTube(P1, P2, R) union { cylinder { P1, P2, R texture { Mat_DarkMetal } } cylinder { P1, P2, R*0.78 texture { Mat_Glass } } cylinder { P1, P2, R*0.12 texture { Mat_LightAmber } } } #end #macro LowBlock(Cx,Cz,W,D,H, T) box { , texture { T } } #end // -------------------- City core -------------------- union { Building( 0, 0, 18, 18, 36, 6, 1.0) Building( 18, -8, 14, 12, 28, 5, 0.9) Building(-18, 6, 16, 14, 30, 6, 0.9) Building( 10, 18, 12, 12, 24, 5, 0.8) Building(-10, -18, 12, 16, 26, 5, 0.8) Building( 34, 10, 10, 10, 20, 4, 0.7) Building( 34, -18, 10, 14, 22, 4, 0.7) Building(-34, 16, 12, 10, 22, 4, 0.7) Building(-34, -12, 10, 12, 20, 4, 0.7) SkyBridge(-18, 6, 0, 0, 16, 3.5) SkyBridge( 0, 0, 18, -8, 14, 3.5) SkyBridge(-10,-18, 10, 18, 12, 2.8) TransitTube(<-95, 12, -65>, < 95, 14, -15>, 1.8) TransitTube(<-90, 16, 55>, < 90, 17, 20>, 1.5) TransitTube(<-55, 20, -110>, < 25, 21, 110>, 1.35) #declare PlatTex = texture { pigment { granite color_map { [0 color rgb <0.11,0.12,0.14>] [1 color rgb <0.17,0.18,0.20>] } scale 1.4 } finish { diffuse 0.58 specular 0.22 roughness 0.035 } }; union { cylinder { <22, 9.5, 8>, <22, 10.0, 8>, 4.2 texture { PlatTex } } torus { 4.2, 0.25 rotate <90,0,0> translate <22,10.0, 8> texture { Mat_LightCyan } } } union { cylinder { <-26, 11.0, -6>, <-26, 11.5, -6>, 3.6 texture { PlatTex } } torus { 3.6, 0.22 rotate <90,0,0> translate <-26,11.5,-6> texture { Mat_LightMagenta } } } SignPanel( 9, 9.5, 8.8, 5.5, 2.0, Mat_LightMagenta) SignPanel( -7, 13.0, -8.2, 6.0, 2.2, Mat_LightCyan) SignPanel( 18.8, 11.0, -8.0, 4.0, 1.8, Mat_LightAmber) // Extra “future” beacons (small glowing cones on rooftops) cone { < 12, 26.0, 18>, 0.8, < 12, 29.5, 18>, 0.0 texture { Mat_LightCyan } } cone { <-18, 28.0, 6>, 0.7, <-18, 31.0, 6>, 0.0 texture { Mat_LightMagenta } } cone { < 34, 20.8, -18>, 0.6, < 34, 23.2, -18>, 0.0 texture { Mat_LightAmber } } } // -------------------- Broader city spread -------------------- #declare sx = -4; #while (sx <= 4) #declare sz = -4; #while (sz <= 4) #declare PX = sx*42; #declare PZ = sz*42; #if (abs(PX) > 55 | abs(PZ) > 55) #declare w = 14 + mod(abs(sx*17 + sz*11), 10); #declare d = 12 + mod(abs(sx*13 + sz*19), 12); #declare h = 6 + mod(abs(sx*23 + sz*29), 10); LowBlock(PX, PZ, w, d, h, Mat_Concrete) #if (mod(abs(sx*7 + sz*9), 4) = 0) Building(PX+8, PZ-6, 10, 10, 18 + mod(abs(sx*31+sz*17), 10), 4, 0.7) #end #end #declare sz = sz + 1; #end #declare sx = sx + 1; #end // -------------------- Elevated ring road -------------------- union { torus { 78, 1.25 rotate <90,0,0> translate <0, 7.8, 0> texture { Mat_DarkMetal } } torus { 78, 0.72 rotate <90,0,0> translate <0, 7.8, 0> texture { Mat_Glass } } torus { 78, 0.18 rotate <90,0,0> translate <0, 7.8, 0> texture { Mat_LightAmber } } } // -------------------- Distant silhouettes for depth -------------------- #declare k = 0; #while (k < 26) #declare a = (360/26)*k; #declare rx = 160*cos(radians(a)); #declare rz = 160*sin(radians(a)); #declare hh = 14 + mod(k*19, 22); #declare ww = 18 + mod(k*13, 10); #declare dd = 16 + mod(k*17, 12); box { , texture { pigment { color rgb <0.10,0.11,0.13> } finish { diffuse 0.68 specular 0.04 roughness 0.10 } } } #declare k = k + 1; #end