#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> } fog { fog_type 2 distance 22 color rgb <0.04,0.05,0.08> fog_offset 0.2 fog_alt 2.0 turbulence 0.2 } // Camera (16:9) - reframed to fit full fighter camera { location <3.8, 3.4, -7.6> look_at <0.0, 2.45, 0.35> 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.10 area_light <3.0,0,0>, <0,0,3.0>, 5, 5 adaptive 1 jitter } light_source { <8, 7, -4> color rgb <1.00, 0.82, 0.68>*0.50 area_light <2.5,0,0>, <0,0,2.5>, 4, 4 adaptive 1 jitter } // Cool neon rim from front-right light_source { <5.0, 4.0, 2.0> color rgb <0.20, 0.95, 1.00>*0.45 area_light <1.2,0,0>, <0,0,1.2>, 3, 3 adaptive 1 jitter } // Magenta neon accent from left light_source { <-4.5, 4.5, 1.5> color rgb <0.95, 0.20, 0.80>*0.22 area_light <1.0,0,0>, <0,0,1.0>, 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.45 roughness 0.03 }; #declare Fin_Neon = finish { diffuse 0.80 specular 0.25 roughness 0.03 ambient 0.35 }; #declare Fin_Ground = finish { diffuse 0.95 specular 0.03 roughness 0.20 }; #declare Col_Asphalt = color rgb <0.07, 0.08, 0.10>; #declare Col_Concrete= color rgb <0.20, 0.20, 0.22>; #declare Col_Build = color rgb <0.09, 0.10, 0.13>; #declare Col_Window = color rgb <0.12, 0.14, 0.18>; #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.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>; #declare Tex_Asphalt = texture { pigment { granite color_map { [0.00 color rgb <0.04,0.04,0.06>] [0.55 color rgb <0.07,0.08,0.10>] [1.00 color rgb <0.11,0.12,0.15>] } scale 0.55 } normal { bumps 0.25 scale 0.12 } finish { Fin_Ground } }; #declare Tex_Concrete = texture { pigment { wrinkles color_map { [0.00 color rgb <0.16,0.16,0.18>] [1.00 color rgb <0.24,0.24,0.26>] } scale 0.35 } normal { bumps 0.20 scale 0.18 } finish { Fin_Cloth } }; #declare Tex_Suit = texture { pigment { bozo color_map { [0.00 color rgb <0.08,0.09,0.12>] [0.55 color rgb <0.10,0.12,0.16>] [1.00 color rgb <0.14,0.16,0.22>] } scale 0.22 } normal { ripples 0.25 scale 0.06 } finish { Fin_Cloth } }; #declare Tex_ArmorMetal = texture { pigment { color Col_Armor } normal { dents 0.30 scale 0.07 } finish { Fin_Metal } }; #declare Tex_Skin = texture { pigment { color Col_Skin } normal { bumps 0.12 scale 0.05 } finish { Fin_Skin } }; #declare Tex_NeonC = texture { pigment { color Col_NeonC } finish { Fin_Neon } } #declare Tex_NeonM = texture { pigment { color Col_NeonM } finish { Fin_Neon } } #declare Tex_NeonY = texture { pigment { color Col_NeonY } finish { Fin_Neon } } // Ground plane plane { y, 0 texture { Tex_Asphalt } } // City context: simple stacked buildings + windows + neon union { // Back wall / building mass box { <-16,0, 6.5>, <16,12.0, 7.5> pigment { Col_Build } finish { Fin_Cloth } } // Distant towers (simple silhouettes) box { <-12,0, 8.0>, <-7,16, 10.0> pigment { color rgb <0.06,0.07,0.10> } finish { Fin_Cloth } } box { < -5,0, 8.5>, < 1,19, 11.5> pigment { color rgb <0.05,0.06,0.09> } finish { Fin_Cloth } } box { < 4,0, 8.2>, < 10,15, 10.8> pigment { color rgb <0.06,0.07,0.10> } finish { Fin_Cloth } } // Window bands box { <-14,2.2, 6.45>, <-9,3.3, 6.55> pigment { Col_Window } finish { Fin_Cloth } } box { < -8,4.0, 6.45>, < -2,5.0, 6.55> pigment { Col_Window } finish { Fin_Cloth } } box { < 3,2.8, 6.45>, < 9,3.9, 6.55> pigment { Col_Window } finish { Fin_Cloth } } // Neon signs box { <-6.2,6.6, 6.44>, <-2.4,7.5, 6.56> texture { Tex_NeonM } } box { < 1.0,5.4, 6.44>, < 5.3,6.2, 6.56> texture { Tex_NeonC } } box { < 7.0,7.8, 6.44>, < 10.8,8.4, 6.56> texture { Tex_NeonY } } } // Curb / sidewalk box { <-8,0, -0.9>, <8,0.28,-0.2> texture { Tex_Concrete } } // --- Fighter (marionette style) --- #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; #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) // Neon forearm blade box { (WristWorld + HandOffset + <-0.10, -0.05, 0.10>), (WristWorld + HandOffset + < 0.10, 0.55, 1.10>) texture { Tex_NeonC } } #else // Neon wrist band cylinder { (WristWorld + <0.00, 0.05, 0.00>), (WristWorld + <0.22, 0.05, 0.00>), 0.06 texture { Tex_NeonY } } #end } #end #declare Fighter = union { // Boots (metal + rubber-ish toe) union { cylinder { <0, yFoot, 0>, <0, yFoot+BootH, 0>, BootR texture { Tex_ArmorMetal } } box { <-BootR*0.95, yFoot, -0.40>, texture { Tex_ArmorMetal } } translate <-0.45, 0, 0> } union { cylinder { <0, yFoot, 0>, <0, yFoot+BootH, 0>, BootR texture { Tex_ArmorMetal } } box { <-BootR*0.95, yFoot, -0.40>, texture { Tex_ArmorMetal } } translate <0.45, 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_Suit } } object { CapsuleY(yFoot+BootH+ShinL, yFoot+BootH+ShinL+ThighL, LegR, Tex_Suit) } translate <-0.45, 0, 0> } union { object { CapsuleY(yFoot+BootH, yFoot+BootH+ShinL, LegR, Tex_Suit) } sphere { <0, yFoot+BootH+ShinL, 0>, LegR*1.05 texture { Tex_Suit } } object { CapsuleY(yFoot+BootH+ShinL, yFoot+BootH+ShinL+ThighL, LegR, Tex_Suit) } translate <0.45, 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 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> texture { Tex_ArmorMetal } } // Neon chest strip 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> 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 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> texture { Tex_NeonM } } // Arms #declare ShoulderY = yFoot+BootH+ShinL+ThighL+PelvisH+TorsoH-0.15; // Left arm: forward (blade) object { ArmRig( <-0.78, ShoulderY, 0.10>, <20, 0, 30>, <55, 0, 10>, <0.00, 0.00, 0.00>, yes ) } // Right arm: guard object { ArmRig( <0.78, ShoulderY, -0.10>, <-12, 0, -26>, <-25, 0, -10>, <0.00, 0.00, 0.00>, no ) } // Shoulder pad (right) sphere { <0.82, ShoulderY+0.05, -0.05>, 0.28 texture { Tex_ArmorMetal } } // Backpack module box { <-0.32, ShoulderY-0.55, 0.55>, <0.32, ShoulderY+0.35, 1.05> texture { Tex_ArmorMetal } } box { <-0.05, ShoulderY-0.45, 1.06>, <0.05, ShoulderY+0.25, 1.12> texture { Tex_NeonM } } // Stance/lean (keep aligned) rotate <-5, 18, 0> translate <0.0, 0.0, 0.4> } object { Fighter } // Foreground neon post for depth (kept off to side) union { box { <-3.1,0.0, -2.2>, <-2.2,1.8,-1.4> pigment { color rgb <0.07,0.08,0.11> } finish { Fin_Cloth } } box { <-3.02,0.2,-2.12>, <-2.92,1.6,-1.48> texture { Tex_NeonC } } rotate <0, 12, 0> }