#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) - close-up focusing on hands camera { location <0.35, 4.05, -3.20> look_at <-0.90, 3.45, 0.95> angle 40 up <0,9,0> right <16,0,0> // right,up -> 16:9 } // Soft warm lights (area for soft shadows) light_source { <-6, 10, -7> color rgb <1.00, 0.85, 0.70>*1.15 area_light <2.6,0,0>, <0,0,2.6>, 5, 5 adaptive 1 jitter } light_source { <7, 7, -3> color rgb <1.00, 0.80, 0.65>*0.55 area_light <2.2,0,0>, <0,0,2.2>, 4, 4 adaptive 1 jitter } // Neon rim / fill near the forward hand (still soft-ish) light_source { <-2.2, 3.9, 1.6> color rgb <0.20, 0.95, 1.00>*0.35 area_light <0.8,0,0>, <0,0,0.8>, 3, 3 adaptive 1 jitter } #declare Fin_Skin = finish { diffuse 0.75 specular 0.15 roughness 0.08 }; #declare Fin_Cloth = finish { diffuse 0.85 specular 0.05 roughness 0.12 }; #declare Fin_Metal = finish { diffuse 0.55 specular 0.35 roughness 0.04 }; #declare Fin_Neon = finish { diffuse 0.9 specular 0.2 roughness 0.03 ambient 0.25 }; #declare Fin_Ground = finish { diffuse 0.95 specular 0.02 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.10, 0.11, 0.14>; #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>; // Ground plane (kept, but out of focus area by framing) plane { y, 0 pigment { Col_Asphalt } finish { Fin_Ground } } // Minimal cyberpunk context (kept behind, low detail) union { // Side wall box { <-10,0, 2.6>, <10,9.5, 3.0> pigment { Col_Build } finish { Fin_Cloth } } // Neon sign blocks (soft, simple) box { <-3.2,5.6, 2.55>, <-1.1,6.2, 2.62> pigment { Col_NeonM } finish { Fin_Neon } } box { < 1.6,4.8, 2.55>, < 3.9,5.2, 2.62> pigment { Col_NeonC } finish { Fin_Neon } } // Window band box { <-8.5,2.4, 2.55>, <-5.8,3.6, 2.62> pigment { Col_Window } finish { Fin_Cloth } } translate <0,0,0> } // Curb hint box { <-6,0, -0.8>, <6,0.35,-0.2> pigment { Col_Concrete } finish { Fin_Cloth } } // --- Fighter (marionette style), posed to feature hands --- #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, PigCol, FinDecl) union { cylinder { <0,Y1,0>, <0,Y2,0>, R pigment { PigCol } finish { FinDecl } } sphere { <0,Y1,0>, R pigment { PigCol } finish { FinDecl } } sphere { <0,Y2,0>, R pigment { PigCol } finish { FinDecl } } } #end // Helper macro: build an arm from shoulder pivot with precise alignment // All parts are aligned end-to-end: upper [0..UpperArmL], then forearm [0..ForeArmL] starting at elbow. #macro ArmRig(ShoulderPos, UpperRot, ForeRot, HandOffset, IsBlade) union { // Upper arm (pivot at shoulder) union { object { CapsuleY(0, UpperArmL, ArmR, Col_Suit, Fin_Cloth) } rotate UpperRot translate ShoulderPos } // Compute elbow position by placing a marker at the end of the upper arm before transforming #local ElbowLocal = <0, UpperArmL, 0>; // Forearm (pivot at elbow) union { object { CapsuleY(0, ForeArmL, ArmR*0.95, Col_Armor, Fin_Metal) } rotate ForeRot // translate to elbow position in world by reusing same upper transform (approx but consistent for this rig): // Place at shoulder, apply UpperRot, then add elbow vector also rotated by UpperRot. translate (ShoulderPos + vrotate(ElbowLocal, UpperRot)) } // Hand (placed exactly at forearm end, using same forearm transform) #local WristLocal = <0, ForeArmL, 0>; #local ElbowWorld = (ShoulderPos + vrotate(ElbowLocal, UpperRot)); #local WristWorld = (ElbowWorld + vrotate(WristLocal, ForeRot)); sphere { WristWorld + HandOffset, ArmR*0.92 pigment { Col_Skin } finish { Fin_Skin } } #if (IsBlade) // Forearm blade aligned forward from the wrist (z+) box { (WristWorld + HandOffset + <-0.10, -0.05, 0.10>), (WristWorld + HandOffset + < 0.10, 0.55, 1.10>) pigment { Col_NeonC } finish { Fin_Neon } } #else // Neon wrist band cylinder { (WristWorld + <0.00, 0.05, 0.00>), (WristWorld + <0.22, 0.05, 0.00>), 0.06 pigment { Col_NeonY } finish { Fin_Neon } } #end } #end #declare Fighter = union { // Boots union { cylinder { <0, yFoot, 0>, <0, yFoot+BootH, 0>, BootR pigment { Col_Armor } finish { Fin_Metal } } box { <-BootR*0.95, yFoot, -0.40>, pigment { Col_Armor } finish { Fin_Metal } } translate <-0.45, 0, 0> } union { cylinder { <0, yFoot, 0>, <0, yFoot+BootH, 0>, BootR pigment { Col_Armor } finish { Fin_Metal } } box { <-BootR*0.95, yFoot, -0.40>, pigment { Col_Armor } finish { Fin_Metal } } translate <0.45, 0, 0> } // Legs union { CapsuleY(yFoot+BootH, yFoot+BootH+ShinL, LegR, Col_Suit, Fin_Cloth) sphere { <0, yFoot+BootH+ShinL, 0>, LegR*1.05 pigment { Col_Suit } finish { Fin_Cloth } } CapsuleY(yFoot+BootH+ShinL, yFoot+BootH+ShinL+ThighL, LegR, Col_Suit, Fin_Cloth) translate <-0.45, 0, 0> } union { CapsuleY(yFoot+BootH, yFoot+BootH+ShinL, LegR, Col_Suit, Fin_Cloth) sphere { <0, yFoot+BootH+ShinL, 0>, LegR*1.05 pigment { Col_Suit } finish { Fin_Cloth } } CapsuleY(yFoot+BootH+ShinL, yFoot+BootH+ShinL+ThighL, LegR, Col_Suit, Fin_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 { Fin_Metal } } // Torso cylinder { <0, yFoot+BootH+ShinL+ThighL+PelvisH, 0>, <0, yFoot+BootH+ShinL+ThighL+PelvisH+TorsoH, 0>, TorsoR pigment { Col_Suit } finish { Fin_Cloth } } 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 { Fin_Metal } } 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_NeonC } finish { Fin_Neon } } // Neck + head cylinder { <0, yFoot+BootH+ShinL+ThighL+PelvisH+TorsoH, 0>, <0, yFoot+BootH+ShinL+ThighL+PelvisH+TorsoH+NeckH, 0>, NeckR pigment { Col_Skin } finish { Fin_Skin } } sphere { <0, yFoot+BootH+ShinL+ThighL+PelvisH+TorsoH+NeckH+HeadR, 0>, HeadR pigment { Col_Skin } finish { Fin_Skin } } 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_NeonM } finish { Fin_Neon } } // Arms - reposed so forward hand dominates frame #declare ShoulderY = yFoot+BootH+ShinL+ThighL+PelvisH+TorsoH-0.15; // Left arm: thrust forward (featured hand + blade) object { ArmRig( <-0.78, ShoulderY, 0.10>, // shoulder <25, 0, 35>, // upper rotation <55, 0, 15>, // fore rotation (more forward) <0.00, 0.00, 0.00>, // hand offset yes // blade ) } // Right arm: pulled back guard object { ArmRig( <0.78, ShoulderY, -0.10>, <-10, 0, -30>, <-25, 0, -10>, <0.00, 0.00, 0.00>, no ) } // Shoulder pad (right) sphere { <0.82, ShoulderY+0.05, -0.05>, 0.28 pigment { Col_Armor } finish { Fin_Metal } } // Backpack module box { <-0.32, ShoulderY-0.55, 0.55>, <0.32, ShoulderY+0.35, 1.05> pigment { Col_Armor } finish { Fin_Metal } } box { <-0.05, ShoulderY-0.45, 1.06>, <0.05, ShoulderY+0.25, 1.12> pigment { Col_NeonM } finish { Fin_Neon } } // Lean slightly toward camera for hand emphasis rotate <-6, 12, 0> } object { Fighter translate <0,0,0> } // Foreground neon blocker for depth (kept off to side so hands stay clear) box { <-2.8,0.0, -1.9>, <-1.7,1.2,-1.2> pigment { color rgb <0.08,0.09,0.12> } finish { Fin_Cloth } } box { <-2.75,0.2,-1.85>, <-2.65,1.0,-1.25> pigment { Col_NeonC } finish { Fin_Neon } }