#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.02, 0.02, 0.035> } // Night haze, kept light for speed fog { fog_type 2 distance 28 color rgb <0.04,0.05,0.08> fog_offset 0.2 fog_alt 2.2 turbulence 0.15 } // Camera (16:9) - lower, closer, more street-level camera { location <4.6, 2.2, -8.2> look_at <0.1, 2.25, 0.45> angle 40 up <0,9,0> right <16,0,0> // right,up -> 16:9 } // Soft warm lights (area for soft shadows) light_source { <-7, 10, -8> color rgb <1.00, 0.86, 0.72>*1.05 area_light <3.2,0,0>, <0,0,3.2>, 5, 5 adaptive 1 jitter } light_source { <8, 7, -4> color rgb <1.00, 0.82, 0.68>*0.45 area_light <2.6,0,0>, <0,0,2.6>, 4, 4 adaptive 1 jitter } // Neon fills/rims light_source { <5.0, 3.6, 1.8> color rgb <0.20, 0.95, 1.00>*0.55 area_light <1.4,0,0>, <0,0,1.4>, 3, 3 adaptive 1 jitter } light_source { <-5.2, 4.2, 1.4> color rgb <0.95, 0.20, 0.80>*0.30 area_light <1.2,0,0>, <0,0,1.2>, 3, 3 adaptive 1 jitter } #declare Fin_Skin = finish { diffuse 0.70 specular 0.18 roughness 0.07 }; #declare Fin_Cloth = finish { diffuse 0.88 specular 0.06 roughness 0.14 }; #declare Fin_Metal = finish { diffuse 0.55 specular 0.55 roughness 0.03 }; #declare Fin_Neon = finish { diffuse 0.80 specular 0.25 roughness 0.03 ambient 0.45 }; #declare Fin_Wet = finish { diffuse 0.90 specular 0.22 roughness 0.06 }; #declare Col_Asphalt = color rgb <0.05, 0.06, 0.08>; #declare Col_Concrete= color rgb <0.18, 0.18, 0.20>; #declare Col_Build = color rgb <0.07, 0.08, 0.11>; #declare Col_Window = color rgb <0.10, 0.12, 0.16>; #declare Col_NeonC = color rgb <0.10, 0.85, 0.95>; #declare Col_NeonM = color rgb <0.95, 0.15, 0.75>; #declare Col_NeonY = color rgb <1.00, 0.85, 0.20>; #declare Col_Suit = color rgb <0.09, 0.11, 0.16>; #declare Col_Armor = color rgb <0.22, 0.24, 0.28>; #declare Col_Skin = color rgb <0.72, 0.55, 0.45>; #declare Tex_Asphalt = texture { pigment { Col_Asphalt } finish { Fin_Wet } } #declare Tex_Concrete = texture { pigment { Col_Concrete } finish { Fin_Cloth } } #declare Tex_Suit = texture { pigment { Col_Suit } finish { Fin_Cloth } } #declare Tex_ArmorMetal= texture { pigment { Col_Armor } finish { Fin_Metal } } #declare Tex_Skin = texture { pigment { Col_Skin } finish { Fin_Skin } } #declare Tex_Build = texture { pigment { Col_Build } finish { Fin_Cloth } } #declare Tex_Window = texture { pigment { Col_Window } finish { Fin_Cloth } } #declare Tex_NeonC = texture { pigment { Col_NeonC } finish { Fin_Neon } } #declare Tex_NeonM = texture { pigment { Col_NeonM } finish { Fin_Neon } } #declare Tex_NeonY = texture { pigment { Col_NeonY } finish { Fin_Neon } } // Ground plane (wet street) plane { y, 0 texture { Tex_Asphalt } } // Sidewalk strip/curb (precise fit on ground) box { <-9.0,0.00,-1.10>, < 9.0,0.28,-0.20> texture { Tex_Concrete } } box { <-9.0,0.00,-0.20>, < 9.0,0.10,-0.05> texture { Tex_Concrete } } // City backdrop: masses + windows + more neon structure union { // Main facade box { <-18,0, 6.6>, <18,12.4, 7.6> texture { Tex_Build } } // Tower silhouettes box { <-13,0, 8.1>, <-7,17.0, 10.2> texture { Tex_Build } } box { < -6,0, 8.6>, < 2,20.0, 11.8> texture { Tex_Build } } box { < 4,0, 8.3>, < 11,16.0, 10.9> texture { Tex_Build } } // Window bands (thin inset for crisp lines) box { <-14,2.1, 6.55>, <-9,3.2, 6.62> texture { Tex_Window } } box { < -8,4.0, 6.55>, < -2,5.0, 6.62> texture { Tex_Window } } box { < 3,2.8, 6.55>, < 9,3.9, 6.62> texture { Tex_Window } } // Neon signs (more prominent) box { <-6.6,6.4, 6.52>, <-2.1,7.6, 6.70> texture { Tex_NeonM } } box { < 0.7,5.3, 6.52>, < 5.9,6.3, 6.70> texture { Tex_NeonC } } box { < 6.8,7.7, 6.52>, <11.2,8.6, 6.70> texture { Tex_NeonY } } // Vertical neon pylons to sell “Night City” union { box { <-10.9,0.0, 5.8>, <-10.1,9.8, 6.2> texture { Tex_Build } } box { <-10.65,0.6, 5.78>, <-10.35,9.2, 5.82> texture { Tex_NeonC } } } union { box { < 12.0,0.0, 5.9>, <12.9,11.2, 6.3> texture { Tex_Build } } box { < 12.35,1.0, 5.78>, <12.55,10.6, 5.82> texture { Tex_NeonM } } } } // Simple puddle streaks (cheap: glossy strips) box { <-6.5,0.001,-2.6>, <-2.8,0.002, 1.8> texture { pigment { Col_Asphalt } finish { Fin_Wet } } } box { < 1.6,0.001,-2.2>, < 5.4,0.002, 2.2> texture { pigment { Col_Asphalt } finish { Fin_Wet } } } // --- Fighter (marionette style, improved silhouette) --- #declare HeadR = 0.46; #declare NeckR = 0.12; #declare NeckH = 0.18; #declare TorsoH = 1.45; #declare TorsoR = 0.52; #declare PelvisH = 0.36; #declare PelvisR = 0.44; #declare UpperArmL = 0.90; #declare ForeArmL = 0.82; #declare ArmR = 0.16; #declare ThighL = 1.05; #declare ShinL = 1.02; #declare LegR = 0.19; #declare BootH = 0.30; #declare BootR = 0.25; #declare yFoot = 0.0; #macro CapsuleY(Y1,Y2,R, TexObj) union { cylinder { <0,Y1,0>, <0,Y2,0>, R texture { TexObj } } sphere { <0,Y1,0>, R texture { TexObj } } sphere { <0,Y2,0>, R texture { TexObj } } } #end #macro ArmRig(ShoulderPos, UpperRot, ForeRot, HandOffset, IsBlade) union { // Upper arm union { object { CapsuleY(0, UpperArmL, ArmR, Tex_Suit) } rotate UpperRot translate ShoulderPos } #local ElbowLocal = <0, UpperArmL, 0>; // Forearm union { object { CapsuleY(0, ForeArmL, ArmR*0.95, Tex_ArmorMetal) } rotate ForeRot translate (ShoulderPos + vrotate(ElbowLocal, UpperRot)) } // Hand #local WristLocal = <0, ForeArmL, 0>; #local ElbowWorld = (ShoulderPos + vrotate(ElbowLocal, UpperRot)); #local WristWorld = (ElbowWorld + vrotate(WristLocal, ForeRot)); sphere { WristWorld + HandOffset, ArmR*0.92 texture { Tex_Skin } } #if (IsBlade) // Brighter, longer neon forearm blade union { box { (WristWorld + HandOffset + <-0.11, -0.06, 0.08>), (WristWorld + HandOffset + < 0.11, 0.70, 1.35>) texture { Tex_NeonC } } // Guard plate box { (WristWorld + HandOffset + <-0.18, -0.10, 0.05>), (WristWorld + HandOffset + < 0.18, 0.08, 0.30>) texture { Tex_ArmorMetal } } } #else // Neon wrist band torus { 0.12, 0.035 rotate <90,0,0> translate (WristWorld + <0.00, 0.05, 0.02>) texture { Tex_NeonY } } #end } #end #declare Fighter = union { // Boots union { cylinder { <0, yFoot, 0>, <0, yFoot+BootH, 0>, BootR texture { Tex_ArmorMetal } } box { <-BootR*0.95, yFoot, -0.42>, texture { Tex_ArmorMetal } } translate <-0.46, 0, 0> } union { cylinder { <0, yFoot, 0>, <0, yFoot+BootH, 0>, BootR texture { Tex_ArmorMetal } } box { <-BootR*0.95, yFoot, -0.42>, texture { Tex_ArmorMetal } } translate <0.46, 0, 0> } // Legs union { object { CapsuleY(yFoot+BootH, yFoot+BootH+ShinL, LegR, Tex_Suit) } sphere { <0, yFoot+BootH+ShinL, 0>, LegR*1.05 texture { Tex_ArmorMetal } } // knee cap object { CapsuleY(yFoot+BootH+ShinL, yFoot+BootH+ShinL+ThighL, LegR, Tex_Suit) } translate <-0.46, 0, 0> } union { object { CapsuleY(yFoot+BootH, yFoot+BootH+ShinL, LegR, Tex_Suit) } sphere { <0, yFoot+BootH+ShinL, 0>, LegR*1.05 texture { Tex_ArmorMetal } } object { CapsuleY(yFoot+BootH+ShinL, yFoot+BootH+ShinL+ThighL, LegR, Tex_Suit) } translate <0.46, 0, 0> } // Pelvis cylinder { <0, yFoot+BootH+ShinL+ThighL, 0>, <0, yFoot+BootH+ShinL+ThighL+PelvisH, 0>, PelvisR texture { Tex_ArmorMetal } } // Torso cylinder { <0, yFoot+BootH+ShinL+ThighL+PelvisH, 0>, <0, yFoot+BootH+ShinL+ThighL+PelvisH+TorsoH, 0>, TorsoR texture { Tex_Suit } } // Chest plate + shoulder harness (blockier cyber armor) box { <-TorsoR*0.90, yFoot+BootH+ShinL+ThighL+PelvisH+0.30, -TorsoR*0.55>, < TorsoR*0.90, yFoot+BootH+ShinL+ThighL+PelvisH+TorsoH-0.20, TorsoR*0.70> texture { Tex_ArmorMetal } } box { <-TorsoR*0.95, yFoot+BootH+ShinL+ThighL+PelvisH+TorsoH-0.35, -0.10>, < TorsoR*0.95, yFoot+BootH+ShinL+ThighL+PelvisH+TorsoH-0.05, 0.25> texture { Tex_ArmorMetal } } // Neon chest strip box { <-0.06, yFoot+BootH+ShinL+ThighL+PelvisH+0.45, -TorsoR*0.57>, < 0.06, yFoot+BootH+ShinL+ThighL+PelvisH+TorsoH-0.35, -TorsoR*0.48> texture { Tex_NeonC } } // Neck + head cylinder { <0, yFoot+BootH+ShinL+ThighL+PelvisH+TorsoH, 0>, <0, yFoot+BootH+ShinL+ThighL+PelvisH+TorsoH+NeckH, 0>, NeckR texture { Tex_Skin } } sphere { <0, yFoot+BootH+ShinL+ThighL+PelvisH+TorsoH+NeckH+HeadR, 0>, HeadR texture { Tex_Skin } } // Visor (thicker, clearer glow) box { <-0.40, yFoot+BootH+ShinL+ThighL+PelvisH+TorsoH+NeckH+HeadR+0.02, -HeadR-0.02>, < 0.40, yFoot+BootH+ShinL+ThighL+PelvisH+TorsoH+NeckH+HeadR+0.24, -HeadR+0.22> texture { Tex_NeonM } } // Shoulder height #declare ShoulderY = yFoot+BootH+ShinL+ThighL+PelvisH+TorsoH-0.14; // Left arm: forward blade object { ArmRig( <-0.82, ShoulderY, 0.12>, <18, 0, 34>, <55, 0, 12>, <0.00, 0.00, 0.00>, yes ) } // Right arm: guard near torso object { ArmRig( <0.82, ShoulderY, -0.08>, <-10, 0, -22>, <-30, 0, -18>, <0.00, 0.00, 0.00>, no ) } // Shoulder pads sphere { <-0.88, ShoulderY+0.05, 0.05>, 0.30 texture { Tex_ArmorMetal } } sphere { < 0.88, ShoulderY+0.05, -0.05>, 0.30 texture { Tex_ArmorMetal } } // Backpack module (cyber gear) box { <-0.34, ShoulderY-0.58, 0.60>, <0.34, ShoulderY+0.36, 1.15> texture { Tex_ArmorMetal } } box { <-0.07, ShoulderY-0.46, 1.16>, <0.07, ShoulderY+0.22, 1.22> texture { Tex_NeonM } } box { <-0.28, ShoulderY-0.10, 1.12>, <-0.10, ShoulderY+0.26, 1.18> texture { Tex_NeonC } } // Stance/lean: more “fighter”, planted on street rotate <-6, 18, 0> translate <0.0, 0.0, 0.45> } object { Fighter } // Foreground neon post for depth (kept left, closer) union { box { <-3.4,0.0, -2.4>, <-2.3,2.1,-1.3> texture { Tex_Build } } box { <-3.26,0.2,-2.28>, <-3.08,1.9,-1.40> texture { Tex_NeonC } } box { <-2.70,0.6,-2.28>, <-2.52,1.7,-1.40> texture { Tex_NeonM } } rotate <0, 10, 0> }