#version 3.7; global_settings { assumed_gamma 0.7 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 } } background { color rgb <0.00, 0.00, 0.0> } camera { location <19, 15, -19.0> look_at <0, 4.4, 0> angle 38 } //light_source { <40, 60, -40> color rgb <1, 1, 1>*0.35 } //light_source { <-15, 15, -15> color rgb <0.3, 0.3, 0.3>*0.3 } // Soft "studio fill" to prevent overly crushed shadows (fast, not radiosity) //light_source { // <0, 25, 0> // color rgb <1,1,1>*0.1314 // shadowless //} #declare BrickTex = texture{ pigment{ function { min( abs(sin(x*3.14159*2.8)), abs(sin(z*3.14159*2.8)) ) } color_map{ [0.00 color rgb <0.88, 0.86, 0.83>] [0.06 color rgb <0.88, 0.86, 0.83>] [0.11 color rgb <0.62, 0.24, 0.18>] [1.00 color rgb <0.62, 0.24, 0.18>] } } finish { diffuse 0.75 specular 0.08 roughness 0.05 ambient 0.0 } normal { bumps 0.3 scale 0.25 } } #declare StoneTex = texture{ pigment{ color rgb <0.70, 0.72, 0.74> } finish { diffuse 0.85 specular 0.10 roughness 0.06 ambient 0.0 } normal { bumps 0.20 scale 0.35 } } #declare GlassTex = texture{ pigment{ color rgbt <0.20, 0.35, 0.45, 0.80> } finish { diffuse 0.03 specular 0.65 roughness 0.02 reflection 0.06 ambient 0.0 } } #declare InteriorWallTex = texture{ pigment{ color rgb <0.90, 0.90, 0.88> } finish { diffuse 0.85 specular 0.02 roughness 0.12 ambient 0.0 } } #declare InteriorFloorTex = texture{ pigment{ checker color rgb <0.64, 0.60, 0.56> color rgb <0.58, 0.54, 0.50> scale 1.2 } finish { diffuse 0.85 specular 0.05 roughness 0.10 ambient 0.0 } } plane { y, 0 texture{ pigment{ checker color rgb <0.86, 0.88, 0.92> color rgb <0.80, 0.82, 0.86> scale 2.5 } finish { diffuse 0.95 specular 0.03 roughness 0.10 ambient 0.0 } } } // --- Cut primitives --- #declare WindowCut = box { <-0.7, 1.2, -0.3>, <0.7, 2.4, 0.3> } #declare DoorCut = box { <-0.9, 0.0, -3.35>, <0.9, 12.6, 3.35> } // --- Building solids (with a simplified "display cutaway" so interior is visible) --- #declare MainBuilding = difference{ // Main block box { <-4.5, 0, -3.0>, <4.5, 8.5, 3.0> } // Recessed entry box { <-1.4, 0.0, -3.05>, <1.4, 3.0, -1.9> } // A big cutaway slice on the back/top-left to reveal interior box { <-6.0, 2.0, 0.6>, <-0.6, 9.5, 6.0> } // Windows (front face) #local r=0; #while (r < 3) #local c=0; #while (c < 5) object{ WindowCut translate <(-3.2 + c*1.6), (3.2 + r*1.8), -3.05> } #local c=c+1; #end #local r=r+1; #end // Windows (right face) #local r2=0; #while (r2 < 3) #local c2=0; #while (c2 < 4) object{ WindowCut rotate <0, 90, 0> translate <4.55, (3.2 + r2*1.8), (-2.1 + c2*1.4)> } #local c2=c2+1; #end #local r2=r2+1; #end // Door opening in recessed entry object{ DoorCut translate <0, 0, 9.06> } } #declare SideWing = difference{ box { <-8.0, 0, -2.4>, <-4.6, 6.5, 2.4> } // Cutaway slice for wing interior visibility box { <-9.0, 1.2, 0.8>, <-5.6, 7.5, 5.0> } // Windows on front of wing #local rr=0; #while (rr < 3) #local cc=0; #while (cc < 2) object{ WindowCut scale <0.95, 0.95, 1> translate <(-7.2 + cc*1.7), (2.6 + rr*1.5), -2.45> } #local cc=cc+1; #end #local rr=rr+1; #end } #declare Tower = difference{ box { <2.7, 0, -2.2>, <6.5, 11.5, 2.2> } // Simple cutaway on tower rear so the interior reads as "lit core" box { <3.2, 2.0, 0.5>, <6.8, 12.5, 5.5> } // Tall narrow windows #local k=0; #while (k < 5) object{ box { <-0.45, 1.0, -0.35>, <0.45, 3.2, 0.35> } translate <4.6, (1.8 + k*1.85), -2.25> } #local k=k+1; #end // Simple crenel notch at top #local n=0; #while (n < 6) box { <2.95 + n*0.55, 10.9, -2.25>, <3.25 + n*0.55, 11.7, -1.5> } #local n=n+1; #end } // --- Interior "room volumes" (simple surfaces) --- #declare InteriorMain = union{ // inner walls/floor/ceiling (slightly inset so they don't z-fight) box { <-4.35, 0.02, -2.85>, <4.35, 9.35, 2.85> texture{ InteriorWallTex } hollow } // floor accent box { <-4.30, 0.02, -2.80>, <4.30, 0.08, 2.80> texture{ InteriorFloorTex } } } #declare InteriorWing = union{ box { <-7.85, 0.02, -2.25>, <-4.75, 8.35, 2.25> texture{ InteriorWallTex } hollow } box { <-7.80, 0.02, -2.20>, <-4.80, 0.08, 2.20> texture{ InteriorFloorTex } } } #declare InteriorTower = union{ box { <2.85, 0.02, -2.05>, <6.35, 11.35, 2.05> texture{ InteriorWallTex } hollow } box { <2.90, 0.02, -2.00>, <6.30, 0.08, 2.00> texture{ InteriorFloorTex } } } // --- Ambient-style interior lighting: warm area lights inside (fast, soft) --- #declare Warm = <1.00, 0.85, 0.65>; //light_source{ // <0, 4.5, -0.2> // color rgb Warm*1.25 // area_light <1.8,0,0>, <0,0,1.8>, 4, 4 // adaptive 1 jitter // fade_distance 14 fade_power 2 //} //light_source{ // <-6.2, 3.5, -0.1> // color rgb Warm*0.85 // area_light <1.2,0,0>, <0,0,1.2>, 3, 3 // adaptive 1 jitter // fade_distance 10 fade_power 2 //} //light_source{ // <4.9, 6.0, 0.0> // color rgb Warm*1.00 // area_light <1.0,0,0>, <0,0,1.0>, 3, 3 // adaptive 1 jitter // fade_distance 12 fade_power 2 //} light_source { <1, 0.5, 1> color rgb Warm*0.05 area_light <1.0,0,0>, <0,0,1.0>, 3, 3 adaptive 1 jitter fade_distance 12 fade_power 2 } light_source { <-25, 10, -25> color rgb Warm*0.01 area_light <1,0,0>, <0,0,1>, 1, 1 adaptive 1 jitter fade_distance 12 fade_power 2 } // --- Assemble building --- union{ // Solids difference { object{ MainBuilding texture{ BrickTex } } object{ InteriorMain } } difference { object{ SideWing texture{ BrickTex } } object{ InteriorWing } } difference { object{ Tower texture{ BrickTex } } object{ InteriorTower } } // Interior shells (revealed by cutaways) // Stone base trim box { <-8.05, 0, -3.05>, <6.55, 0.5, 3.05> texture{ StoneTex } } // Entry steps box { <-1.8, 0.0, -3.6>, <1.8, 0.25, -3.05> texture{ StoneTex } } box { <-1.5, 0.25, -3.45>, <1.5, 0.50, -3.05> texture{ StoneTex } } // Simple roof caps box { <-4.7, 8.5, -3.2>, <4.7, 8.9, 3.2> texture{ StoneTex } } box { <-8.2, 6.5, -2.6>, <-4.4, 6.85, 2.6> texture{ StoneTex } } box { <2.55, 11.5, -2.4>, <6.65, 11.9, 2.4> texture{ StoneTex } } } // --- Glass panes --- union{ // Window glass panes (front main) #local r3=0; #while (r3 < 2) #local c3=0; #while (c3 < 5) box{ <-0.62, 1.25, -3.02>, <0.62, 2.35, -2.98> translate <(-3.2 + c3*1.6), (3.2 + r3*1.8), 0> texture{ GlassTex } } #local c3=c3+1; #end #local r3=r3+1; #end // Windows right face (glass) #local r4=0; #while (r4 < 2) #local c4=0; #while (c4 < 4) box{ <-0.62, 1.25, -3.02>, <0.62, 2.35, -2.98> rotate <0, 90, 0> translate <4.52, (3.2 + r4*1.8), (-2.1 + c4*1.4)> texture{ GlassTex } } #local c4=c4+1; #end #local r4=r4+1; #end // Wing front windows (glass) #local r5=0; #while (r5 < 2) #local c5=0; #while (c5 < 2) box{ <-0.60, 1.25, -2.42>, <0.60, 2.28, -2.38> translate <(-7.2 + c5*1.7), (2.6 + r5*1.5), 0> texture{ GlassTex } } #local c5=c5+1; #end #local r5=r5+1; #end }