#version 3.7; global_settings { assumed_gamma 1.3 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 } } background { color rgb <0.03, 0.03, 0.05> } // Camera (16:9) camera { location <0, 6.2, -16> look_at <0, 3.2, 0> angle 40 up <0,9,0> right <16,0,0> // right,up -> 16:9 } // Soft warm lights light_source { <-10, 18, -18> color rgb <1.00, 0.85, 0.70>*1.2 area_light <4,0,0>, <0,0,4>, 5, 5 adaptive 1 jitter } light_source { <12, 10, -10> color rgb <1.00, 0.80, 0.65>*0.6 area_light <3,0,0>, <0,0,3>, 4, 4 adaptive 1 jitter } // Simple materials (no textures) #declare Mat_Skin = finish { diffuse 0.75 specular 0.15 roughness 0.08 }; #declare Mat_Cloth = finish { diffuse 0.85 specular 0.05 roughness 0.12 }; #declare Mat_Metal = finish { diffuse 0.55 specular 0.35 roughness 0.04 }; #declare Mat_Neon = finish { diffuse 0.9 specular 0.2 roughness 0.03 ambient 0.25 }; #declare Mat_Asphalt= finish { diffuse 0.95 specular 0.02 roughness 0.2 }; #declare Col_Asphalt = color rgb <0.07, 0.08, 0.10>; #declare Col_Concrete= color rgb <0.20, 0.20, 0.22>; #declare Col_Building= color rgb <0.10, 0.11, 0.14>; #declare Col_Window = color rgb <0.12, 0.14, 0.18>; #declare Col_NeonCyan= color rgb <0.10, 0.85, 0.95>; #declare Col_NeonMag = color rgb <0.95, 0.15, 0.75>; #declare Col_NeonYel = color rgb <1.00, 0.85, 0.20>; #declare Col_Suit = color rgb <0.10, 0.12, 0.16>; #declare Col_Armor = color rgb <0.22, 0.24, 0.28>; #declare Col_Skin = color rgb <0.72, 0.55, 0.45>; // Ground / street plane { y, 0 pigment { Col_Asphalt } finish { Mat_Asphalt } } // Sidewalk curbs #declare Curb = box { <-0.5,0,-6>, <0.5,0.35,6> pigment { Col_Concrete } finish { Mat_Cloth } }; object { Curb translate <-5.2, 0, 0> } object { Curb translate < 5.2, 0, 0> } // Road center line (simple blocks) #declare Dash = box { <-0.15,0.01,-0.6>, <0.15,0.02,0.6> pigment { color rgb <0.9,0.9,0.95>*0.8 } finish { Mat_Cloth } }; #declare i = -5; #while (i <= 5) object { Dash translate <0,0,i*2.0> } #declare i = i + 1; #end // Buildings (simple boxes with neon strips) #macro Building(Pos, Size, NeonCol) union { box { <-Size.x/2, 0, -Size.z/2>, pigment { Col_Building } finish { Mat_Cloth } } // Window band box { <-Size.x*0.42, Size.y*0.25, -Size.z/2-0.02>, pigment { Col_Window } finish { Mat_Cloth } } // Neon vertical strip box { , pigment { NeonCol } finish { Mat_Neon } } translate Pos } #end Building(<-8.0,0, 2.0>, <4.2,10.0,6.0>, Col_NeonCyan) Building(<-7.0,0,-6.0>, <3.6, 8.0,5.0>, Col_NeonMag) Building(< 8.0,0, 1.0>, <4.0,11.5,6.5>, Col_NeonYel) Building(< 7.2,0,-7.0>, <3.8, 9.0,5.5>, Col_NeonCyan) // Distant building silhouettes #declare j = -3; #while (j <= 3) box { <-2.0, 0, -2.0>, <2.0, 6.0 + j*0.7, 2.0> pigment { color rgb <0.06,0.07,0.10> } finish { Mat_Cloth } translate < (j*3.2), 0, 10.5> } #declare j = j + 1; #end // Street light posts (simple) #macro LampPost(X,Z, NeonCol) union { cylinder { <0,0,0>, <0,4.4,0>, 0.08 pigment { color rgb <0.18,0.18,0.20> } finish { Mat_Metal } } cylinder { <0,4.1,0>, <0.9,4.1,0>, 0.05 pigment { color rgb <0.18,0.18,0.20> } finish { Mat_Metal } } sphere { <1.05,4.1,0>, 0.18 pigment { NeonCol } finish { Mat_Neon } } translate } #end LampPost(-4.7, -3.0, Col_NeonMag) LampPost( 4.7, -1.0, Col_NeonCyan) // --- Cyberpunk Fighter (marionette style) --- #declare yFoot = 0.0; // Dimensions #declare HeadR = 0.45; #declare NeckR = 0.12; #declare NeckH = 0.18; #declare TorsoH = 1.35; #declare TorsoR = 0.50; #declare PelvisH = 0.35; #declare PelvisR = 0.42; #declare UpperArmL = 0.85; #declare ForeArmL = 0.80; #declare ArmR = 0.16; #declare ThighL = 1.00; #declare ShinL = 1.00; #declare LegR = 0.18; #declare BootH = 0.28; #declare BootR = 0.24; // Helper: capsule aligned on y #macro CapsuleY(Y1,Y2,R, Pig, Fin) union { cylinder { <0,Y1,0>, <0,Y2,0>, R pigment { Pig } finish { Fin } } sphere { <0,Y1,0>, R pigment { Pig } finish { Fin } } sphere { <0,Y2,0>, R pigment { Pig } finish { Fin } } } #end #declare Fighter = union { // Feet/boots (centered under legs) union { cylinder { <0, yFoot, 0>, <0, yFoot+BootH, 0>, BootR pigment { Col_Armor } finish { Mat_Metal } } box { <-BootR*0.95, yFoot, -0.40>, pigment { Col_Armor } finish { Mat_Metal } } translate <-0.45, 0, 0> } union { cylinder { <0, yFoot, 0>, <0, yFoot+BootH, 0>, BootR pigment { Col_Armor } finish { Mat_Metal } } box { <-BootR*0.95, yFoot, -0.40>, pigment { Col_Armor } finish { Mat_Metal } } translate <0.45, 0, 0> } // Legs (thigh + shin) with knee spheres // Left leg union { CapsuleY(yFoot+BootH, yFoot+BootH+ShinL, LegR, Col_Suit, Mat_Cloth) sphere { <0, yFoot+BootH+ShinL, 0>, LegR*1.05 pigment { Col_Suit } finish { Mat_Cloth } } // knee CapsuleY(yFoot+BootH+ShinL, yFoot+BootH+ShinL+ThighL, LegR, Col_Suit, Mat_Cloth) translate <-0.45, 0, 0> } // Right leg union { CapsuleY(yFoot+BootH, yFoot+BootH+ShinL, LegR, Col_Suit, Mat_Cloth) sphere { <0, yFoot+BootH+ShinL, 0>, LegR*1.05 pigment { Col_Suit } finish { Mat_Cloth } } CapsuleY(yFoot+BootH+ShinL, yFoot+BootH+ShinL+ThighL, LegR, Col_Suit, Mat_Cloth) translate <0.45, 0, 0> } // Pelvis cylinder { <0, yFoot+BootH+ShinL+ThighL, 0>, <0, yFoot+BootH+ShinL+ThighL+PelvisH, 0>, PelvisR pigment { Col_Armor } finish { Mat_Metal } } // Torso cylinder { <0, yFoot+BootH+ShinL+ThighL+PelvisH, 0>, <0, yFoot+BootH+ShinL+ThighL+PelvisH+TorsoH, 0>, TorsoR pigment { Col_Suit } finish { Mat_Cloth } } // Chest armor plate box { <-TorsoR*0.85, yFoot+BootH+ShinL+ThighL+PelvisH+0.35, -TorsoR*0.45>, < TorsoR*0.85, yFoot+BootH+ShinL+ThighL+PelvisH+TorsoH-0.25, TorsoR*0.60> pigment { Col_Armor } finish { Mat_Metal } } // Neon chest stripe box { <-0.06, yFoot+BootH+ShinL+ThighL+PelvisH+0.45, -TorsoR*0.47>, < 0.06, yFoot+BootH+ShinL+ThighL+PelvisH+TorsoH-0.35, -TorsoR*0.40> pigment { Col_NeonCyan } finish { Mat_Neon } } // Neck cylinder { <0, yFoot+BootH+ShinL+ThighL+PelvisH+TorsoH, 0>, <0, yFoot+BootH+ShinL+ThighL+PelvisH+TorsoH+NeckH, 0>, NeckR pigment { Col_Skin } finish { Mat_Skin } } // Head sphere { <0, yFoot+BootH+ShinL+ThighL+PelvisH+TorsoH+NeckH+HeadR, 0>, HeadR pigment { Col_Skin } finish { Mat_Skin } } // Visor (cyberpunk) box { <-0.38, yFoot+BootH+ShinL+ThighL+PelvisH+TorsoH+NeckH+HeadR+0.05, -HeadR-0.01>, < 0.38, yFoot+BootH+ShinL+ThighL+PelvisH+TorsoH+NeckH+HeadR+0.22, -HeadR+0.18> pigment { Col_NeonMag } finish { Mat_Neon } } // Arms (slightly forward fighting stance) #declare ShoulderY = yFoot+BootH+ShinL+ThighL+PelvisH+TorsoH-0.15; // Left arm union { // upper arm angled forward object { CapsuleY(0, UpperArmL, ArmR, Col_Suit, Mat_Cloth) rotate <0,0,20> rotate <20,0,0> translate <-0.78, ShoulderY, 0.05> } // forearm object { CapsuleY(0, ForeArmL, ArmR*0.95, Col_Armor, Mat_Metal) rotate <0,0,10> rotate <35,0,0> translate <-1.05, ShoulderY-0.55, 0.45> } // hand sphere { <-1.08, ShoulderY-1.20, 0.92>, ArmR*0.9 pigment { Col_Skin } finish { Mat_Skin } } // arm blade box { <-1.18, ShoulderY-1.35, 0.98>, <-0.98, ShoulderY-0.70, 1.95> pigment { Col_NeonCyan } finish { Mat_Neon } } } // Right arm (pulled back) union { object { CapsuleY(0, UpperArmL, ArmR, Col_Suit, Mat_Cloth) rotate <0,0,-20> rotate <-10,0,0> translate <0.78, ShoulderY, -0.05> } object { CapsuleY(0, ForeArmL, ArmR*0.95, Col_Armor, Mat_Metal) rotate <0,0,-10> rotate <-25,0,0> translate <1.05, ShoulderY-0.55, -0.40> } sphere { <1.12, ShoulderY-1.20, -0.72>, ArmR*0.9 pigment { Col_Skin } finish { Mat_Skin } } // small neon wrist band cylinder { <1.05, ShoulderY-0.95, -0.52>, <1.22, ShoulderY-0.95, -0.52>, 0.06 pigment { Col_NeonYel } finish { Mat_Neon } } } // Shoulder pad (right) sphere { <0.82, ShoulderY+0.05, -0.05>, 0.28 pigment { Col_Armor } finish { Mat_Metal } } // Backpack module box { <-0.32, ShoulderY-0.55, 0.55>, <0.32, ShoulderY+0.35, 1.05> pigment { Col_Armor } finish { Mat_Metal } } box { <-0.05, ShoulderY-0.45, 1.06>, <0.05, ShoulderY+0.25, 1.12> pigment { Col_NeonMag } finish { Mat_Neon } } // Slight lean forward rotate <-5, 0, 0> translate <0, 0, 0> } object { Fighter translate <0,0,0> } // A couple of foreground neon blocks for depth box { <-6.0,0,-8.0>, <-4.8,1.1,-6.8> pigment { color rgb <0.08,0.09,0.12> } finish { Mat_Cloth } } box { <-5.95,0.2,-7.95>, <-5.85,1.0,-6.85> pigment { Col_NeonCyan } finish { Mat_Neon } } box { <4.8,0,-8.5>, <6.2,0.9,-7.1> pigment { color rgb <0.08,0.09,0.12> } finish { Mat_Cloth } } box { <6.05,0.15,-8.35>, <6.15,0.75,-7.2> pigment { Col_NeonMag } finish { Mat_Neon } }