#version 3.7; global_settings { assumed_gamma 1.0 } background { color rgb <0.94,0.95,0.98> } camera { location <6.5, 5.0, -10.5> look_at <0.0, 1.2, 0.0> angle 38 } light_source { <10, 14, -12> color rgb <1,1,1>*1.2 area_light <2,0,0>, <0,0,2>, 5, 5 adaptive 1 jitter } light_source { <-8, 10, -6> color rgb <1,1,1>*0.5 } #declare DeskTex = texture { pigment { color rgb <0.86,0.84,0.82> } finish { diffuse 0.85 specular 0.15 roughness 0.05 } } #declare PaperTex = texture { pigment { color rgb <0.98,0.98,0.99> } finish { diffuse 0.9 specular 0.08 roughness 0.08 } } #declare InkTex = texture { pigment { color rgb <0.15,0.18,0.22> } finish { diffuse 0.6 specular 0.35 roughness 0.03 } } #declare ScreenTex = texture { pigment { color rgb <0.06,0.08,0.10> } finish { diffuse 0.25 specular 0.5 roughness 0.02 reflection 0.05 } } #declare MetalTex = texture { pigment { color rgb <0.72,0.74,0.78> } finish { diffuse 0.35 specular 0.55 roughness 0.02 } } #declare MugTex = texture { pigment { color rgb <0.92,0.26,0.22> } finish { diffuse 0.75 specular 0.25 roughness 0.04 } } #declare GlassTex = texture { pigment { color rgbt <0.9,0.95,1.0,0.85> } finish { diffuse 0.15 specular 0.7 roughness 0.01 reflection 0.08 } } #declare ShadowCatcher = plane { y, 0 texture { DeskTex } } object { ShadowCatcher } // Stable random seeds (declare once, reuse) #declare R1 = seed(13); #declare R2 = seed(17); #declare R3 = seed(19); #declare PaperW = 3.0; #declare PaperH = 0.045; #declare PaperD = 2.2; #declare PaperSheet = box { <-PaperW/2, 0, -PaperD/2>, texture { PaperTex } } #declare StackCount = 24; #declare I = 0; #while (I < StackCount) #declare TT = I/(StackCount-1); // (kept for future shaping; also avoids reserved 't') #declare SkewX = (rand(R1) - 0.5) * 0.08; #declare SkewZ = (rand(R2) - 0.5) * 0.08; #declare RotY = (rand(R3) - 0.5) * 2.2; object { PaperSheet rotate <0, RotY, 0> translate < -1.2 + SkewX, 0.02 + I*PaperH, 0.2 + SkewZ > } #declare I = I + 1; #end // Binder clip (simple) union { box { <-0.35, 0, -0.18>, <0.35, 0.09, 0.18> texture { InkTex } } torus { 0.16, 0.03 rotate <90,0,0> translate <-0.18,0.10,0> texture { MetalTex } } torus { 0.16, 0.03 rotate <90,0,0> translate < 0.18,0.10,0> texture { MetalTex } } translate <-2.55, 0.02 + StackCount*PaperH - 0.02, 0.25> } // Laptop (base + screen) #declare LaptopBase = box { <-2.2, 0, -1.5>, <2.2, 0.14, 1.5> texture { MetalTex } } #declare LaptopScreen = box { <-2.2, 0, -0.06>, <2.2, 2.6, 0.06> texture { ScreenTex } } union { object { LaptopBase } object { LaptopScreen rotate < -105, 0, 0> translate <0,0.14, -1.5> } // keyboard hint box { <-1.9, 0.141, -1.25>, <1.9, 0.155, 1.15> texture { InkTex } finish { diffuse 0.4 specular 0.2 roughness 0.06 } } translate <2.6, 0.02, -0.1> } // Coffee mug union { cylinder { <0,0,0>, <0,0.9,0>, 0.45 texture { MugTex } } difference { torus { 0.34, 0.08 rotate <0,0,90> translate <0.55,0.55,0> texture { MugTex } } box { <-0.1,-0.2,-1>, <1.2,1.2,1> translate <0.55,0.55,0> } } // coffee surface cylinder { <0,0.88,0>, <0,0.89,0>, 0.40 texture { pigment { color rgb <0.25,0.14,0.08> } finish { diffuse 0.6 specular 0.2 roughness 0.05 } } } translate <0.2, 0.02, -2.1> } // Small clock (time pressure) union { cylinder { <0,0,0>, <0,0.16,0>, 0.62 texture { GlassTex } } cylinder { <0,0.16,0>, <0,0.26,0>, 0.62 texture { MetalTex } } cylinder { <0,0.26,0>, <0,0.30,0>, 0.64 texture { InkTex } } // clock face cylinder { <0,0.255,0>, <0,0.258,0>, 0.55 texture { PaperTex } } // hands box { <-0.02,0.258,-0.02>, <0.02,0.260,0.40> texture { InkTex } } box { <-0.02,0.258,-0.02>, <0.02,0.260,0.28> texture { InkTex } rotate <0,0,70> } translate <1.3, 0.02, 1.9> } // A few extra “todo” slips scattered #declare Slip = box { <-0.55,0,-0.35>, <0.55,0.02,0.35> texture { PaperTex } } object { Slip rotate <0, 18, 0> translate <-0.2, 0.021, 1.35> } object { Slip rotate <0, -22, 0> translate <0.9, 0.021, 0.95> } object { Slip rotate <0, 7, 0> translate <-2.4, 0.021, -1.4> } // Subtle wall/backdrop for depth plane { z, 6.0 pigment { color rgb <0.93,0.94,0.97> } finish { diffuse 0.9 } }