// Warm lighthouse vignette with CONICAL light + soft shadows // Single-file POV-Ray SDL, fast iteration, simple shading (no image textures) #version 3.7; global_settings { assumed_gamma 1.8 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 "colors.inc" background { color rgb <0.03, 0.07, 0.08> } // ------------------------------------------------------------ // Camera / Background mood (teal foggy sky) // ------------------------------------------------------------ camera { location <4.5, 8.4, -39.5> look_at <0.0, 5.8, 0.0> angle 37 up <0,9,0> right <16,0,0> // right,up -> 16:9 } sky_sphere { pigment { gradient y color_map { [0.00 color rgb <0.02, 0.06, 0.07>] [0.45 color rgb <0.05, 0.22, 0.24>] [0.78 color rgb <0.10, 0.38, 0.42>] [1.00 color rgb <0.35, 0.46, 0.42>] } scale 1.6 } } fog { fog_type 2 distance 55 color rgb <0.18, 0.38, 0.36> fog_offset 0 fog_alt 2.0 turbulence 0.7 } // ------------------------------------------------------------ // Simple finishes (no textures) // ------------------------------------------------------------ #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.18 roughness 0.08 } #declare Fin_Metal = finish { diffuse 0.25 ambient 0 specular 0.60 roughness 0.03 } #declare Col_Rock = color rgb <0.03,0.04,0.06>; #declare Col_Platform = color rgb <0.06,0.07,0.09>; #declare Col_Paint = color rgb <0.94,0.91,0.86>; #declare Col_Metal = color rgb <0.10,0.12,0.14>; // ------------------------------------------------------------ // Lights: warm + soft shadows, plus conical lantern spotlight // ------------------------------------------------------------ // Soft warm key (area) light_source { <18, 20, -22> color rgb <1.00, 0.86, 0.68>*1.05 area_light <4,0,0>, <0,0,4>, 7, 7 adaptive 1 jitter } // Soft warm fill (area) light_source { <-12, 14, -12> color rgb <1.00, 0.78, 0.58>*0.45 area_light <3,0,0>, <0,0,3>, 6, 6 adaptive 1 jitter } // Cool ambient lift (no shadows) light_source { <0, 18, -6> color rgb <0.55, 0.85, 1.00>*0.16 shadowless } // ------------------------------------------------------------ // Water plane (subtle) // ------------------------------------------------------------ plane { y, -7.2 pigment { color rgb <0.02,0.07,0.08> } finish { diffuse 0.18 specular 0.10 roughness 0.12 } normal { ripples 0.22 scale 0.9 } } // ------------------------------------------------------------ // Cliff / Platform (stylized silhouette, aligned) // ------------------------------------------------------------ #declare CliffYShift = 1.0; #declare PlatformTopY = 0.60 + CliffYShift; #declare Cliff = union { // Platform slab box { <-7.2, 0.0, -2.6>, <7.2, 0.60, 2.6> pigment { Col_Platform } finish { Fin_Matte } } // Main cliff blocks box { <-6.5, -2.8, -2.2>, <5.4, 0.0, 2.2> pigment { Col_Rock } finish { Fin_Matte } } box { <-5.4, -5.9, -1.85>, <4.4, -2.8, 1.85> pigment { Col_Rock } finish { Fin_Matte } } box { <-4.2, -8.5, -1.45>, <3.6, -5.9, 1.45> pigment { Col_Rock } finish { Fin_Matte } } // Right overhang box { <1.8, -2.4, -2.0>, <7.6, -0.3, 2.0> pigment { Col_Rock } finish { Fin_Matte } } box { <3.2, -5.1, -1.45>, <7.4, -2.4, 1.45> pigment { Col_Rock } finish { Fin_Matte } } // Cutouts to break silhouette difference { box { <-6.5, -8.5, -2.2>, <7.6, 0.60, 2.2> pigment { Col_Rock } finish { Fin_Matte } } box { <-7.8, -4.2, -3.4>, <-3.3, 1.6, 3.4> } box { <2.2, -7.5, -3.4>, <8.2, -3.1, 3.4> } box { <-2.2, -9.2, -3.4>, <1.7, -6.2, 3.4> } } translate <0, CliffYShift, 0> } object { Cliff } // ------------------------------------------------------------ // Lighthouse (precisely stacked and centered) // ------------------------------------------------------------ #declare BaseY = PlatformTopY; #declare TowerH = 9.2; #declare TowerR0 = 1.18; #declare TowerR1 = 0.76; #declare LightY = BaseY + TowerH; #declare Lighthouse = union { // Tower body cone { <0, BaseY, 0>, TowerR0 <0, BaseY + TowerH, 0>, TowerR1 pigment { Col_Paint } finish { Fin_Satin } } // Base ring (touching platform) cylinder { <0, BaseY-0.10, 0>, <0, BaseY+0.10, 0>, TowerR0*1.035 pigment { Col_Metal } finish { Fin_Metal } } // Simple window recess (front, negative Z) difference { box { <-0.24, BaseY+1.3, -1.02>, <0.24, BaseY+2.3, -0.62> } box { <-0.16, BaseY+1.42, -1.03>, <0.16, BaseY+2.18, -0.76> } pigment { Col_Metal } finish { Fin_Metal } } // Lantern deck ring cylinder { <0, LightY-0.28, 0>, <0, LightY+0.12, 0>, 1.10 pigment { Col_Metal } finish { Fin_Metal } } // Railing posts #declare k = 0; #while (k < 14) #declare ang = radians(k*(360/14)); cylinder { <0.98*cos(ang), LightY+0.12, 0.98*sin(ang)>, <0.98*cos(ang), LightY+0.58, 0.98*sin(ang)>, 0.04 pigment { Col_Metal } finish { Fin_Metal } } #declare k = k + 1; #end // Lantern frame difference { cylinder { <0, LightY+0.12, 0>, <0, LightY+0.98, 0>, 0.92 } cylinder { <0, LightY+0.14, 0>, <0, LightY+0.96, 0>, 0.82 } pigment { Col_Metal } finish { Fin_Metal } } // Lantern glass cylinder { <0, LightY+0.16, 0>, <0, LightY+0.94, 0>, 0.83 pigment { color rgbt <1,1,1,0.88> } finish { diffuse 0.05 ambient 0 specular 0.85 roughness 0.006 } no_shadow } // Inner warm glow (visible source) cylinder { <0, LightY+0.22, 0>, <0, LightY+0.88, 0>, 0.64 pigment { color rgb <1.00, 0.92, 0.76>*1.3 } finish { diffuse 0.10 ambient 1.25 specular 0 } no_shadow } // Roof cap cone { <0, LightY+0.98, 0>, 1.02, <0, LightY+1.54, 0>, 0.10 pigment { Col_Metal } finish { Fin_Metal } } } object { Lighthouse } // ------------------------------------------------------------ // CONICAL spotlight from the lantern (requested) + soft shadows // ------------------------------------------------------------ #declare BeamDir = <1, 0.02, 0>; // points to the right with slight upward tilt #declare BeamPos = <0, LightY+0.62, 0>; light_source { BeamPos color rgb <1.00, 0.92, 0.74>*2.15 spotlight point_at (BeamPos + BeamDir*40) radius 8 falloff 14 tightness 8 // soften spotlight shadows area_light <0.35,0,0>, <0,0.35,0>, 7, 7 adaptive 1 jitter } // Visible volumetric-ish beam (fast hollow cone) #declare BeamLen = 38; #declare BeamAngle = 14; cone { <0, 0, 0>, 0.22 , tan(radians(BeamAngle))*BeamLen hollow pigment { color rgbt <1.00, 0.95, 0.84, 0.86> } finish { diffuse 0.05 ambient 0.90 specular 0 } no_shadow translate BeamPos rotate <0, -10, 0> } // ------------------------------------------------------------ // Simple silhouette figures (warm scene; minimal) // ------------------------------------------------------------ #declare Tex_Silhouette = texture { pigment { color rgb <0.05,0.06,0.09> } 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.35, BaseY+0.06, -0.35>, 0.90) Person(< 2.05, BaseY+0.06, -0.12>, 1.18) Person(<-2.55, BaseY+0.06, -0.05>, 0.72) // ------------------------------------------------------------ // Zodiac-like faint arc behind lighthouse (simple points) // ------------------------------------------------------------ #declare RingR = 6.0; #declare RingY = LightY+0.95; #declare RingZ = 0.8; #declare DotN = 48; #declare i = 0; #while (i < DotN) #declare a = radians(205 + (135*i/(DotN-1))); sphere { 0.075 pigment { color rgbt <0.98, 1.00, 1.00, 0.55> } finish { diffuse 0.05 ambient 0.80 specular 0 } no_shadow } #declare i = i + 1; #end // ------------------------------------------------------------ // Floating bokeh/snow particles (fast, deterministic seeds) // ------------------------------------------------------------ #declare PCount = 85; #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 = -9 + 18*rand(s1); #declare py = 1 + 15*rand(s2); #declare pz = -10 + 26*rand(s3); #declare pr = 0.05 + 0.30*rand(s2); #declare tr = 0.60 + 0.34*rand(s1); sphere { , pr pigment { color rgbt <0.98, 0.98, 1.00, tr> } finish { diffuse 0.03 ambient 0.92 specular 0 } no_shadow } #declare j = j + 1; #end