// Simple Noah's Ark (fast iteration, simple shading) - fixed syntax #version 3.7; global_settings { assumed_gamma 1.0 } background { color rgb <0.92, 0.96, 1.0> } // Camera camera { location <0, 6.2, -18> look_at <0, 2.3, 0> angle 34 } // Warm soft lights light_source { <-10, 14, -14> color rgb <1.00, 0.90, 0.75> area_light <4,0,0>, <0,0,4>, 5, 5 adaptive 1 jitter } light_source { <10, 10, -10> color rgb <1.00, 0.92, 0.80> area_light <3,0,0>, <0,0,3>, 4, 4 adaptive 1 jitter } light_source { <0, 18, 6> color rgb <0.60, 0.55, 0.50> } // Ground (subtle) plane { y, 0 pigment { color rgb <0.95,0.97,1.0> } finish { diffuse 0.6 ambient 0.2 } } // Colors (simple) #declare WoodCol = color rgb <0.74, 0.55, 0.34>; #declare TrimCol = color rgb <0.25, 0.18, 0.12>; #declare CabinCol = color rgb <0.80, 0.62, 0.40>; #declare RoofCol = color rgb <0.35, 0.23, 0.16>; #declare GlassCol = color rgb <0.70, 0.85, 0.95>; #declare MatteFinish = finish { diffuse 0.85 ambient 0.12 specular 0.10 roughness 0.06 } #declare GlassFinish = finish { diffuse 0.30 ambient 0.12 specular 0.25 roughness 0.03 } // ----------------------------- // Dimensions // ----------------------------- #declare L = 16.0; // hull length along X #declare Rx = L/2; #declare Rz = 2.8; // half width-ish (Z) #declare DeckY = 3.45; // ----------------------------- // Reusable roof prism (closed!) // Note: prism points are in 2D and must be closed for linear_spline. // We'll extrude along prism's sweep axis, then rotate to align along X. // ----------------------------- #declare RoofPrism = prism { linear_sweep linear_spline -2.55, 2.55, 6, <-2.20, 0.00>, <-1.75, -1.70>, < 1.75, -1.70>, < 2.20, 0.00>, < 0.00, 1.25>, <-2.20, 0.00> // close rotate <0,90,0> translate <0, 5.10, 0> }; // ----------------------------- // Part geometry as separate declares (avoids union/texture scoping issues) // ----------------------------- // Hull body (wood) #declare HullBody = difference { union { // Main capsule cylinder { <-Rx, 1.55, 0>, , Rz } sphere { <-Rx, 1.55, 0>, Rz } sphere { < Rx, 1.55, 0>, Rz } // Lower belly cylinder { <-Rx+0.4, 0.95, 0>, , Rz*0.92 } sphere { <-Rx+0.4, 0.95, 0>, Rz*0.92 } sphere { < Rx-0.4, 0.95, 0>, Rz*0.92 } // Slight vertical scaling for profile scale <1, 1.05, 1> } // Deck cut (flat top) box { <-Rx-2, DeckY, -6>, } }; // Rim / rail (trim) as a thin shell near deck line #declare DeckRim = difference { // Outer ring section above deck difference { union { cylinder { <-Rx, 1.55, 0>, , Rz*0.98 } sphere { <-Rx, 1.55, 0>, Rz*0.98 } sphere { < Rx, 1.55, 0>, Rz*0.98 } scale <1, 1.05, 1> } box { <-Rx-2, DeckY-0.05, -6>, } } // Inner cut to make it a rim difference { union { cylinder { <-Rx, 1.55, 0>, , Rz*0.88 } sphere { <-Rx, 1.55, 0>, Rz*0.88 } sphere { < Rx, 1.55, 0>, Rz*0.88 } scale <1, 1.05, 1> } box { <-Rx-2, DeckY-0.10, -6>, } } }; // Cabin solid (used for coloring) #declare CabinBox = box { <-2.4, DeckY, -1.55>, <2.4, 5.10, 1.55> }; // Cabin with window cutouts (a separate "shell" so the holes exist) #declare CabinWithWindows = difference { object { CabinBox } // cut windows on left side (negative X face) box { <-2.401, 4.10, -1.10>, <-2.10, 4.70, -0.20> } box { <-2.401, 4.10, 0.20>, <-2.10, 4.70, 1.10> } }; // Glass panes #declare Glass1 = box { <-2.11, 4.11, -1.09>, <-2.095, 4.69, -0.21> }; #declare Glass2 = box { <-2.11, 4.11, 0.21>, <-2.095, 4.69, 1.09> }; // Bow band accent (trim) #declare BowBand = intersection { difference { cylinder { , , Rz*1.10 } cylinder { , , Rz*0.94 } } box { , } }; // ----------------------------- // Assemble ark // ----------------------------- union { // Hull object { HullBody texture { pigment { WoodCol } finish { MatteFinish } } } // Rim object { DeckRim texture { pigment { TrimCol } finish { MatteFinish } } } // Cabin (with windows already cut) object { CabinWithWindows texture { pigment { CabinCol } finish { MatteFinish } } } // Roof object { RoofPrism texture { pigment { RoofCol } finish { MatteFinish } } } // Glass object { Glass1 texture { pigment { GlassCol } finish { GlassFinish } } } object { Glass2 texture { pigment { GlassCol } finish { GlassFinish } } } // Bow band object { BowBand texture { pigment { TrimCol } finish { MatteFinish } } } translate <0, 0, 0> }