#version 3.7; global_settings { assumed_gamma 1.0 max_trace_level 10 } #include "colors.inc" #include "textures.inc" #include "finish.inc" background { color srgb <0.94, 0.95, 0.98> } // -------------------- Camera -------------------- #declare CamLoc = <1.35, 4.15, -8.75>; #declare CamLook = <0.00, 1.05, 0.25>; camera { location CamLoc look_at CamLook angle 34 right x*image_width/image_height aperture 0.10 blur_samples 7 focal_point <0.0, 1.10, 0.25> confidence 0.90 variance 1/256 } // -------------------- Lighting (studio) -------------------- light_source { < 7.0, 8.5, -7.5> color srgb <1.00, 0.98, 0.95>*1.15 area_light <2.4,0,0>, <0,0,2.4>, 6, 6 adaptive 1 jitter } light_source { <-6.8, 5.2, -1.8> color srgb <0.75, 0.86, 1.00>*0.55 area_light <2.0,0,0>, <0,1.6,0>, 5, 4 adaptive 1 jitter } light_source { <0.0, 7.2, 6.8> color srgb <1,1,1>*0.28 area_light <2.8,0,0>, <0,1.6,0>, 5, 4 adaptive 1 jitter } light_source { <0, 10, 0> color srgb <1,1,1>*0.08 shadowless } // -------------------- Atmosphere -------------------- fog { fog_type 2 distance 24 color srgb <0.94, 0.95, 0.98> fog_alt 1.25 turbulence 0.0 } // -------------------- Environment reflection dome -------------------- sphere { <0,1.2,0>, 90 hollow no_shadow texture { pigment { gradient y color_map { [0.00 color srgb <0.88,0.90,0.95>] [0.46 color srgb <0.985,0.99,1.00>] [1.00 color srgb <0.92,0.94,0.98>] } scale 20 translate <0,-4.5,0> } finish { diffuse 0 emission 0.85 } } } // -------------------- Finishes -------------------- #declare Fin_SoftStone = finish { diffuse 0.86 specular 0.18 roughness 0.050 reflection { 0.015, 0.10 fresnel on } conserve_energy } #declare Fin_CeramicMatte = finish { diffuse 0.84 specular 0.18 roughness 0.060 reflection { 0.01, 0.06 fresnel on } conserve_energy } #declare Fin_SatinPaint = finish { diffuse 0.72 specular 0.34 roughness 0.030 reflection { 0.03, 0.12 fresnel on } conserve_energy } #declare Fin_Rubber = finish { diffuse 0.92 specular 0.08 roughness 0.10 reflection { 0.00, 0.03 fresnel on } conserve_energy } #declare Fin_MetalBrushed = finish { diffuse 0.10 metallic specular 0.88 roughness 0.020 reflection { 0.20, 0.62 fresnel on } conserve_energy } #declare Fin_GlassClean = finish { diffuse 0.01 specular 0.95 roughness 0.0035 reflection { 0.10, 0.45 fresnel on } conserve_energy } // -------------------- Textures / Materials (all objects except ball) -------------------- #declare Mat_PlatformStone = texture { pigment { marble color_map { [0.00 color srgb <0.96,0.96,0.97>] [0.22 color srgb <0.84,0.85,0.87>] [0.48 color srgb <0.985,0.985,0.99>] [0.72 color srgb <0.82,0.83,0.86>] [1.00 color srgb <0.97,0.97,0.98>] } turbulence 0.55 scale <0.55,0.25,0.55> rotate <0, 25, 0> } normal { average normal_map { [1 bumps 0.14 scale 0.010] [1 wrinkles 0.22 scale 0.050] } } finish { Fin_SoftStone } } #declare Mat_BasaltRubber = texture { pigment { granite color_map { [0.00 color srgb <0.06,0.06,0.07>] [0.40 color srgb <0.10,0.10,0.12>] [0.78 color srgb <0.05,0.05,0.06>] [1.00 color srgb <0.12,0.12,0.14>] } scale 0.25 } normal { average normal_map { [1 bumps 0.55 scale 0.018] [1 ripples 0.06 scale 0.28] } } finish { Fin_Rubber } } #declare Mat_BrushedCopper = texture { pigment { color srgb <0.87, 0.52, 0.30> } normal { average normal_map { [1 wrinkles 0.18 scale <0.030,0.010,0.030>] [1 bumps 0.11 scale 0.006] [1 ripples 0.08 scale <0.16,0.02,0.16>] } } finish { Fin_MetalBrushed } } #declare Mat_AnodizedRed = texture { pigment { granite color_map { [0.00 color srgb <0.55, 0.07, 0.10>] [0.35 color srgb <0.90, 0.16, 0.20>] [0.70 color srgb <0.70, 0.10, 0.14>] [1.00 color srgb <0.96, 0.20, 0.24>] } scale 0.20 } normal { average normal_map { [1 bumps 0.22 scale 0.010] [1 ripples 0.07 scale 0.16] } } finish { Fin_SatinPaint } } #declare Mat_FrameCoat = texture { pigment { bozo color_map { [0.00 color srgb <0.66, 0.39, 0.22>] [0.50 color srgb <0.76, 0.46, 0.26>] [1.00 color srgb <0.58, 0.34, 0.20>] } scale 0.40 } normal { average normal_map { [1 bumps 0.18 scale 0.010] [1 wrinkles 0.10 scale 0.050] } } finish { diffuse 0.70 specular 0.30 roughness 0.040 reflection { 0.02, 0.10 fresnel on } conserve_energy } } #declare Mat_Floor = texture { pigment { pigment_pattern { crackle metric 2.0 offset 0.15 } color_map { [0.00 color srgb <0.93,0.94,0.97>] [0.70 color srgb <0.985,0.99,1.00>] [1.00 color srgb <0.90,0.92,0.95>] } scale 2.2 } normal { average normal_map { [1 bumps 0.06 scale 0.020] [1 wrinkles 0.04 scale 0.12] } } finish { diffuse 0.88 specular 0.10 roughness 0.07 reflection { 0.01, 0.06 fresnel on } conserve_energy } } #declare Mat_Backdrop = texture { pigment { gradient y color_map { [0.00 color srgb <0.90,0.92,0.96>] [0.58 color srgb <0.99,0.995,1.00>] [1.00 color srgb <0.93,0.95,0.98>] } scale 6.5 translate <0,-1.2,0> } normal { bumps 0.02 scale 0.35 } finish { diffuse 0.97 specular 0.03 roughness 0.14 } } // -------------------- Geometry (precise fits) -------------------- #declare PlinthW = 2.45; #declare PlinthD = 2.05; #declare PlinthH = 0.56; #declare PlinthTopY = PlinthH; // chamfer amount #declare Cham = 0.06; #declare TopDiscR = 0.95; #declare TopDiscH = 0.12; #declare TopDiscBottomY = PlinthTopY; #declare TopDiscTopY = TopDiscBottomY + TopDiscH; #declare RingOuterR = 0.78; #declare RingInnerR = 0.60; #declare RingH = 0.14; #declare RingBottomY = TopDiscTopY; #declare RingTopY = RingBottomY + RingH; #declare SphereR = 0.55; #declare SphereCenter = <0, RingTopY + SphereR, 0>; #declare CubeSize = 0.72; #declare CubeHalf = CubeSize/2; #declare CubeBottomY = RingTopY; #declare CubeCenter = <0.0, CubeBottomY + CubeHalf, 1.02>; #declare ArcOuterR = 1.55; #declare ArcInnerR = 1.35; #declare ArcThickness = 0.18; #declare ArcCenter = <0, 1.38, 0.62>; // -------------------- Floor -------------------- plane { y, 0 texture { Mat_Floor } } // -------------------- Cyclorama backdrop (curved sweep) -------------------- union { plane { z, 3.75 texture { Mat_Backdrop } } difference { cylinder { <0,0,3.75>, <0,3.1,3.75>, 2.35 } cylinder { <0,0,3.75>, <0,3.1,3.75>, 2.20 } plane { z, 3.75 inverse } plane { x, 2.9 } plane { x, -2.9 inverse } plane { y, 0 inverse } } texture { Mat_Backdrop } } // -------------------- Plinth (layered stone with chamfer) -------------------- union { // main body box { <-PlinthW/2, 0, -PlinthD/2>, } // top cap (slightly inset) box { <-PlinthW/2+0.04, PlinthH-0.10, -PlinthD/2+0.04>, < PlinthW/2-0.04, PlinthH, PlinthD/2-0.04> } // beveled edges via subtracting corner cylinders (fast-ish) difference { box { <-PlinthW/2, 0, -PlinthD/2>, } // vertical edge bevels (4) cylinder { < PlinthW/2-Cham, 0, PlinthD/2-Cham>, < PlinthW/2-Cham, PlinthH, PlinthD/2-Cham>, Cham } cylinder { <-PlinthW/2+Cham, 0, PlinthD/2-Cham>, <-PlinthW/2+Cham, PlinthH, PlinthD/2-Cham>, Cham } cylinder { < PlinthW/2-Cham, 0, -PlinthD/2+Cham>, < PlinthW/2-Cham, PlinthH, -PlinthD/2+Cham>, Cham } cylinder { <-PlinthW/2+Cham, 0, -PlinthD/2+Cham>, <-PlinthW/2+Cham, PlinthH, -PlinthD/2+Cham>, Cham } // clip cylinders to corners only plane { x, PlinthW/2-Cham } plane { x, -PlinthW/2+Cham inverse } plane { z, PlinthD/2-Cham } plane { z, -PlinthD/2+Cham inverse } } texture { Mat_PlatformStone } } // -------------------- Top Disc (basalt rubber) -------------------- cylinder { <0, TopDiscBottomY, 0>, <0, TopDiscTopY, 0>, TopDiscR texture { Mat_BasaltRubber } } // -------------------- Ring (brushed copper) -------------------- difference { cylinder { <0, RingBottomY, 0>, <0, RingTopY, 0>, RingOuterR } cylinder { <0, RingBottomY-0.001, 0>, <0, RingTopY+0.001, 0>, RingInnerR } texture { Mat_BrushedCopper } } // -------------------- Glass Sphere (ball must stay untextured) -------------------- sphere { SphereCenter, SphereR pigment { color srgbt <1,1,1,0.92> } finish { Fin_GlassClean } interior { ior 1.48 caustics 0.45 } } // -------------------- Red Cube (anodized) -------------------- box { <-CubeHalf, CubeBottomY, (CubeCenter.z)-CubeHalf>, texture { Mat_AnodizedRed } rotate <0, 18, 0> } // -------------------- Large Arc (basalt rubber) -------------------- difference { torus { ArcOuterR, ArcThickness } torus { ArcInnerR, ArcThickness+0.001 } texture { Mat_BasaltRubber } rotate <90, 0, 0> translate ArcCenter } // -------------------- Framing rectangle (coated metal rods) -------------------- #declare RodR = 0.032; #declare FrameZ = -0.92; #declare FrameX = 1.18; #declare FrameY0 = PlinthTopY + 0.02; #declare FrameY1 = 1.86; cylinder { <-FrameX, FrameY0, FrameZ>, < FrameX, FrameY0, FrameZ>, RodR texture { Mat_FrameCoat } } cylinder { <-FrameX, FrameY0, FrameZ>, <-FrameX, FrameY1, FrameZ>, RodR texture { Mat_FrameCoat } } cylinder { < FrameX, FrameY0, FrameZ>, < FrameX, FrameY1, FrameZ>, RodR texture { Mat_FrameCoat } } cylinder { <-FrameX, FrameY1, FrameZ>, < FrameX, FrameY1, FrameZ>, RodR texture { Mat_FrameCoat } } // -------------------- Small accent slab (adds layered still-life feel) -------------------- #declare SlabW = 1.05; #declare SlabD = 0.62; #declare SlabH = 0.08; #declare SlabY = PlinthTopY + 0.02; #declare SlabZ = -0.30; box { <-SlabW/2, SlabY, SlabZ-SlabD/2>, texture { pigment { granite color_map { [0.00 color srgb <0.86,0.87,0.90>] [0.55 color srgb <0.96,0.97,0.99>] [1.00 color srgb <0.80,0.82,0.86>] } scale 0.35 } normal { bumps 0.10 scale 0.008 } finish { Fin_CeramicMatte } } rotate <0, -10, 0> }