// Warm textured lighthouse vignette (no external images), inspired by zrk.jpg #version 3.7; global_settings { assumed_gamma 1.0 max_trace_level 8 } #include "colors.inc" // ------------------------------------------------------------ // Camera / Background // ------------------------------------------------------------ camera { location <0.2, 7.2, -19.5> look_at <0.0, 5.3, 0.0> angle 36 } sky_sphere { pigment { gradient y color_map { [0.00 color rgb <0.03, 0.08, 0.09>] // deep [0.45 color rgb <0.05, 0.22, 0.24>] // teal [0.75 color rgb <0.10, 0.38, 0.42>] // brighter teal [1.00 color rgb <0.32, 0.44, 0.42>] // warm gray-green top } scale 1.6 } } fog { fog_type 2 distance 55 color rgb <0.20, 0.40, 0.38> fog_offset 0 fog_alt 2.0 turbulence 0.8 } // ------------------------------------------------------------ // Lights (warm, soft shadows) // ------------------------------------------------------------ light_source { <16, 20, -22> color rgb <1.00, 0.86, 0.68>*1.25 area_light <4,0,0>, <0,0,4>, 7, 7 adaptive 1 jitter } light_source { <-10, 13, -10> color rgb <1.00, 0.78, 0.58>*0.55 area_light <3,0,0>, <0,0,3>, 6, 6 adaptive 1 jitter } light_source { <0, 16, -6> color rgb <0.55, 0.85, 1.00>*0.18 } // ------------------------------------------------------------ // Finishes / Textures (procedural, fast) // ------------------------------------------------------------ #declare Fin_Matte = finish { diffuse 0.95 ambient 0 specular 0.05 roughness 0.14 } #declare Fin_Satin = finish { diffuse 0.85 ambient 0 specular 0.16 roughness 0.08 } #declare Fin_Metal = finish { diffuse 0.25 ambient 0 specular 0.60 roughness 0.03 } #declare Tex_Rock = texture { pigment { bozo color_map { [0.00 rgb <0.02,0.03,0.04>] [0.45 rgb <0.03,0.04,0.06>] [1.00 rgb <0.06,0.07,0.10>] } turbulence 0.6 scale 1.2 } normal { bumps 0.65 scale 0.45 } finish { diffuse 0.95 ambient 0 specular 0.03 roughness 0.20 } } #declare Tex_Platform = texture { pigment { granite color_map { [0.00 rgb <0.02,0.025,0.03>] [1.00 rgb <0.08,0.09,0.11>] } scale 0.55 } normal { bumps 0.35 scale 0.25 } finish { diffuse 0.9 ambient 0 specular 0.05 roughness 0.14 } } #declare Tex_Paint = texture { pigment { bozo color_map { [0.00 rgb <0.84,0.80,0.72>] [0.55 rgb <0.93,0.90,0.84>] [1.00 rgb <0.98,0.96,0.92>] } turbulence 0.35 scale 0.85 } normal { bumps 0.22 scale 0.22 } finish { diffuse 0.88 ambient 0 specular 0.12 roughness 0.07 } } #declare Tex_DarkMetal = texture { pigment { granite color_map { [0.00 rgb <0.05,0.06,0.07>] [1.00 rgb <0.12,0.14,0.16>] } scale 0.25 } normal { bumps 0.22 scale 0.15 } finish { Fin_Metal } } #declare Tex_Glass = texture { pigment { color rgbt <1,1,1,0.88> } finish { diffuse 0.05 ambient 0 specular 0.80 roughness 0.006 } } // Water-ish dark base (for reflection mood; kept subtle/fast) plane { y, -7.2 pigment { color rgb <0.02,0.07,0.08> } finish { diffuse 0.15 specular 0.10 roughness 0.12 } normal { ripples 0.25 scale 0.9 } } // ------------------------------------------------------------ // Cliff / Platform (stylized silhouette like reference) // ------------------------------------------------------------ #declare CliffYShift = 1.0; #declare Cliff = union { // Top platform box { <-6.6, 0.0, -2.3>, <6.6, 0.60, 2.3> texture { Tex_Platform } } // Main cliff mass (stacked blocks) box { <-6.0, -2.8, -2.0>, <5.2, 0.0, 2.0> texture { Tex_Rock } } box { <-5.1, -5.8, -1.7>, <4.3, -2.8, 1.7> texture { Tex_Rock } } box { <-4.0, -8.4, -1.35>, <3.4, -5.8, 1.35> texture { Tex_Rock } } // Right-side overhang shaping box { <1.7, -2.4, -1.8>, <7.0, -0.3, 1.8> texture { Tex_Rock } } box { <3.0, -5.0, -1.35>, <6.8, -2.4, 1.35> texture { Tex_Rock } } // A few "chiseled" cuts (difference with big boxes) to break rectangular feel difference { box { <-6.0, -8.4, -2.0>, <7.0, 0.60, 2.0> texture { Tex_Rock } } box { <-7.0, -4.0, -3.0>, <-3.2, 1.5, 3.0> } box { <2.0, -7.4, -3.0>, <7.6, -3.2, 3.0> } box { <-2.0, -9.0, -3.0>, <1.8, -6.2, 3.0> } } translate <0, CliffYShift, 0> } object { Cliff } // ------------------------------------------------------------ // Lighthouse (precisely stacked) // ------------------------------------------------------------ #declare PlatformTopY = 0.60 + CliffYShift; #declare BaseY = PlatformTopY; #declare TowerH = 8.6; #declare TowerR0 = 1.12; #declare TowerR1 = 0.74; #declare LightY = BaseY + TowerH; // Tower union #declare Lighthouse = union { // Tower body cone { <0, BaseY, 0>, TowerR0 <0, BaseY + TowerH, 0>, TowerR1 texture { Tex_Paint } } // Base metal ring (touching platform) cylinder { <0, BaseY-0.10, 0>, <0, BaseY+0.10, 0>, TowerR0*1.03 texture { Tex_DarkMetal } } // Small window/door recess difference { box { <-0.26, BaseY+1.0, -1.01>, <0.26, BaseY+2.0, -0.60> } box { <-0.18, BaseY+1.12, -1.03>, <0.18, BaseY+1.90, -0.72> } texture { Tex_DarkMetal } } // Lantern deck ring cylinder { <0, LightY-0.28, 0>, <0, LightY+0.12, 0>, 1.06 texture { Tex_DarkMetal } } // Railing posts #declare k = 0; #while (k < 14) #declare ang = radians(k*(360/14)); cylinder { <0.95*cos(ang), LightY+0.12, 0.95*sin(ang)>, <0.95*cos(ang), LightY+0.58, 0.95*sin(ang)>, 0.04 texture { Tex_DarkMetal } } #declare k = k + 1; #end // Lantern frame ring (shell) difference { cylinder { <0, LightY+0.12, 0>, <0, LightY+0.98, 0>, 0.88 } cylinder { <0, LightY+0.14, 0>, <0, LightY+0.96, 0>, 0.79 } texture { Tex_DarkMetal } } // Lantern glass cylinder { <0, LightY+0.16, 0>, <0, LightY+0.94, 0>, 0.80 texture { Tex_Glass } no_shadow } // Inner warm emitter cylinder { <0, LightY+0.22, 0>, <0, LightY+0.88, 0>, 0.62 pigment { color rgb <1.00, 0.93, 0.78>*1.6 } finish { diffuse 0.10 ambient 1.25 specular 0 } no_shadow } // Roof cap cone { <0, LightY+0.98, 0>, 0.98, <0, LightY+1.52, 0>, 0.10 texture { Tex_DarkMetal } } } object { Lighthouse } // ------------------------------------------------------------ // Lighthouse beam (soft, warm, textured) // ------------------------------------------------------------ #declare BeamLen = 30; #declare BeamAngle = 14; cone { <0, 0, 0>, 0.22 , tan(radians(BeamAngle))*BeamLen hollow texture { pigment { bozo color_map { [0.00 rgbt <1.00, 0.95, 0.84, 0.90>] [0.35 rgbt <1.00, 0.94, 0.82, 0.78>] [1.00 rgbt <1.00, 0.94, 0.82, 0.93>] } turbulence 1.0 scale 2.2 } finish { diffuse 0.06 ambient 0.95 specular 0 } } no_shadow translate <0, LightY+0.62, 0> rotate <0, -10, 0> } // ------------------------------------------------------------ // Simple silhouette figures (textured slightly) // ------------------------------------------------------------ #declare Tex_Silhouette = texture { pigment { bozo color_map { [0.00 rgb <0.03,0.04,0.06>] [1.00 rgb <0.08,0.10,0.14>] } scale 0.35 } finish { Fin_Matte } } #macro Person(Pos, S) union { cylinder { <0,0,0>, <0,1.25,0>, 0.22 } // torso sphere { <0,1.52,0>, 0.29 } // head cylinder { <-0.11,0,0>, <-0.11,-0.70,0>, 0.10 } cylinder { < 0.11,0,0>, < 0.11,-0.70,0>, 0.10 } cylinder { <0.20,0.90,0>, <0.58,0.55,0>, 0.07 } texture { Tex_Silhouette } scale S translate Pos } #end Person(<-1.25, BaseY+0.06, -0.35>, 0.90) Person(< 1.85, BaseY+0.06, -0.12>, 1.15) Person(<-2.45, BaseY+0.06, -0.05>, 0.70) // ------------------------------------------------------------ // Zodiac-like faint arc behind lighthouse // ------------------------------------------------------------ #declare RingR = 5.6; #declare RingY = LightY+0.85; #declare RingZ = 0.6; #declare DotN = 46; #declare i = 0; #while (i < DotN) #declare a = radians(205 + (135*i/(DotN-1))); sphere { 0.075 texture { pigment { color rgbt <0.98, 1.00, 1.00, 0.45> } finish { diffuse 0.05 ambient 0.85 specular 0 } } no_shadow } #declare i = i + 1; #end // ------------------------------------------------------------ // Floating bokeh/snow particles (fast procedural) // ------------------------------------------------------------ #declare PCount = 75; #declare j = 0; #while (j < PCount) #declare s1 = seed(1000 + j*7); #declare s2 = seed(2000 + j*11); #declare s3 = seed(3000 + j*13); #declare px = -8 + 16*rand(s1); #declare py = 2 + 13*rand(s2); #declare pz = -8 + 22*rand(s3); #declare pr = 0.05 + 0.25*rand(s2); #declare tr = 0.62 + 0.30*rand(s1); sphere { , pr texture { pigment { bozo color_map { [0.00 rgbt <1.00, 0.95, 0.86, tr>] [1.00 rgbt <0.92, 0.98, 1.00, min(0.98, tr+0.10)>] } scale 0.7 } finish { diffuse 0.03 ambient 0.95 specular 0 } } no_shadow } #declare j = j + 1; #end