#version 3.7; global_settings { assumed_gamma 1.0 max_trace_level 6 } background { color rgb <0.80, 0.90, 1.00> } // simple sky // -------------------- Camera -------------------- camera { location <0, 8, -22> look_at <0, 3.2, 0> angle 35 } // -------------------- Lights (warm, soft-ish) -------------------- light_source { <30, 40, -40> color rgb <1.00, 0.90, 0.75> area_light <6,0,0>, <0,0,6>, 5, 5 adaptive 1 jitter } light_source { <-25, 25, -10> color rgb <0.60, 0.50, 0.40> area_light <5,0,0>, <0,0,5>, 4, 4 adaptive 1 jitter } // -------------------- Simple materials (no textures) -------------------- #declare WoodCol = color rgb <0.55, 0.33, 0.18>; #declare DarkWoodCol = color rgb <0.35, 0.22, 0.12>; #declare WaterCol = color rgb <0.18, 0.35, 0.55>; #declare Mat_Wood = finish { diffuse 0.75 specular 0.15 roughness 0.06 } #declare Mat_DarkWood = finish { diffuse 0.78 specular 0.10 roughness 0.08 } #declare Mat_Water = finish { diffuse 0.75 specular 0.25 roughness 0.03 reflection 0.08 } // -------------------- Environment -------------------- plane { y, 0 pigment { WaterCol } finish { Mat_Water } } // -------------------- Ark (stylized) -------------------- #declare ArkLength = 16; #declare ArkWidth = 6; #declare ArkHeight = 4; // Hull: base box #declare HullBase = box { <-ArkLength/2, 0, -ArkWidth/2>, < ArkLength/2, ArkHeight, ArkWidth/2> }; // Hull: rounded top “cap” to suggest curvature #declare HullCap = cylinder { <-ArkLength/2, ArkHeight, 0>, < ArkLength/2, ArkHeight, 0>, ArkWidth/2 scale <1, 0.55, 1> }; // Carve a gentle “keel” underside (subtractive) #declare KeelCut = cylinder { <-ArkLength/2 - 0.5, 0.9, 0>, < ArkLength/2 + 0.5, 0.9, 0>, ArkWidth*0.42 scale <1, 0.75, 1> }; // Main hull union/difference #declare ArkHull = difference { union { object { HullBase } object { HullCap } } object { KeelCut } // keep bottom flat at waterline plane { y, 0 inverse } pigment { WoodCol } finish { Mat_Wood } }; // Raised side rims (gunwales) #declare GunwaleH = 0.35; #declare GunwaleT = 0.18; #declare GunwaleLeft = box { <-ArkLength/2, ArkHeight - GunwaleH, -ArkWidth/2>, < ArkLength/2, ArkHeight, -ArkWidth/2 + GunwaleT> }; #declare GunwaleRight = box { <-ArkLength/2, ArkHeight - GunwaleH, ArkWidth/2 - GunwaleT>, < ArkLength/2, ArkHeight, ArkWidth/2> }; // Deck (just slightly below top) #declare Deck = box { <-ArkLength/2 + 0.2, ArkHeight - 0.25, -ArkWidth/2 + 0.2>, < ArkLength/2 - 0.2, ArkHeight - 0.18, ArkWidth/2 - 0.2> }; // Cabin on top #declare CabinL = 5.2; #declare CabinW = 3.2; #declare CabinH = 1.6; #declare CabinBase = box { <-CabinL/2, ArkHeight, -CabinW/2>, < CabinL/2, ArkHeight + CabinH, CabinW/2> }; #declare CabinRoof = cylinder { <-CabinL/2, ArkHeight + CabinH, 0>, < CabinL/2, ArkHeight + CabinH, 0>, CabinW/2 scale <1, 0.55, 1> }; // Simple window cutouts (subtractive) #declare WindowCut = box { <-0.35, ArkHeight+0.55, -0.08>, <0.35, ArkHeight+1.05, 0.08> }; #declare Cabin = difference { union { object { CabinBase } object { CabinRoof } } // windows left/right (cut through) object { WindowCut translate < -1.2, 0, CabinW/2 - 0.02> } object { WindowCut translate < 0.0, 0, CabinW/2 - 0.02> } object { WindowCut translate < 1.2, 0, CabinW/2 - 0.02> } object { WindowCut translate < -1.2, 0, -CabinW/2 + 0.02> } object { WindowCut translate < 0.0, 0, -CabinW/2 + 0.02> } object { WindowCut translate < 1.2, 0, -CabinW/2 + 0.02> } pigment { DarkWoodCol } finish { Mat_DarkWood } }; // Railing posts along deck edges #declare PostR = 0.06; #declare PostH = 0.55; #declare RailY0 = ArkHeight - 0.25; #declare RailY1 = RailY0 + PostH; #declare RailPost = cylinder { <0, RailY0, 0>, <0, RailY1, 0>, PostR pigment { DarkWoodCol } finish { Mat_DarkWood } }; #declare Railing = union { #declare NPosts = 9; #declare iPost = 0; #while (iPost < NPosts) #declare xPos = -ArkLength/2 + 1.2 + iPost*((ArkLength-2.4)/(NPosts-1)); object { RailPost translate } object { RailPost translate } #declare iPost = iPost + 1; #end // top rails (left/right) cylinder { <-ArkLength/2 + 1.2, RailY1 - 0.12, ArkWidth/2 - 0.22>, < ArkLength/2 - 1.2, RailY1 - 0.12, ArkWidth/2 - 0.22>, 0.05 pigment { DarkWoodCol } finish { Mat_DarkWood } } cylinder { <-ArkLength/2 + 1.2, RailY1 - 0.12, -ArkWidth/2 + 0.22>, < ArkLength/2 - 1.2, RailY1 - 0.12, -ArkWidth/2 + 0.22>, 0.05 pigment { DarkWoodCol } finish { Mat_DarkWood } } }; // -------------------- Assemble ark and float at waterline (y=0) -------------------- union { object { ArkHull } object { GunwaleLeft pigment { DarkWoodCol } finish { Mat_DarkWood } } object { GunwaleRight pigment { DarkWoodCol } finish { Mat_DarkWood } } object { Deck pigment { color rgb <0.48,0.30,0.17> } finish { Mat_Wood } } object { Cabin translate <0, 0.05, 0> } object { Railing } translate <0, 0, 0> } // Subtle sun haze: a faint elevated plane (fast) plane { y, 200 pigment { color rgbt <1,1,1,0.92> } finish { diffuse 0 } }