// Princess and Red Dragon - textured, simplified fast-iteration scene #version 3.7; global_settings { assumed_gamma 1.0 max_trace_level 8 } #include "colors.inc" background { color rgb <0.78, 0.88, 1.00> } // ---------------- Camera ---------------- camera { location <0.4, 3.9, -13.8> look_at <0.6, 1.45, 1.0> angle 34 } // ---------------- Lights ---------------- // Key (warm) light_source { <-10, 14, -14> color rgb <1.10, 1.00, 0.92> } // Fill (cool) light_source { < 12, 7, -7> color rgb <0.45,0.55,0.70> } // Rim (neutral) light_source { < 0, 10, 8> color rgb <0.30,0.30,0.33> } // A little ambient bounce without radiosity (fast) #declare AMB = 0.06; // ---------------- Ground ---------------- plane { y, 0 texture { pigment { bozo color_map { [0.00 rgb <0.44,0.46,0.43>] [0.40 rgb <0.55,0.58,0.52>] [0.75 rgb <0.68,0.70,0.64>] [1.00 rgb <0.38,0.39,0.36>] } scale 2.2 translate <0.2,0,0.4> } normal { bumps 0.55 scale 0.35 } finish { diffuse 0.92 ambient AMB specular 0.08 roughness 0.08 } } } // ---------------- Materials ---------------- // Utility: subtle color variation "skin noise" #declare Skin_Noise_N = normal { bumps 0.35 scale 0.12 }; #declare Dragon_Scale_Normal = normal { // layered: small bumps + larger wrinkles average normal_map { [1.0 bumps 0.55 scale 0.10] [0.7 wrinkles 0.25 scale 0.45] } }; #declare Dragon_Red_Scales = texture { pigment { granite color_map { [0.00 rgb <0.33, 0.03, 0.03>] [0.30 rgb <0.55, 0.06, 0.06>] [0.60 rgb <0.78, 0.10, 0.08>] [1.00 rgb <0.95, 0.22, 0.12>] } scale 0.55 } normal { Dragon_Scale_Normal } finish { diffuse 0.85 ambient AMB specular 0.35 roughness 0.035 brilliance 1.4 } } #declare Dragon_Red_Deep = texture { pigment { bozo color_map { [0.00 rgb <0.20, 0.02, 0.02>] [0.55 rgb <0.40, 0.03, 0.04>] [1.00 rgb <0.62, 0.06, 0.06>] } scale 0.75 } normal { Dragon_Scale_Normal } finish { diffuse 0.88 ambient AMB specular 0.22 roughness 0.05 } } #declare Dragon_BellyPlates = texture { pigment { // lighter, desaturated belly with bands gradient z color_map { [0.00 rgb <0.62, 0.18, 0.10>] [0.40 rgb <0.74, 0.22, 0.12>] [0.50 rgb <0.50, 0.12, 0.08>] [0.85 rgb <0.78, 0.24, 0.13>] [1.00 rgb <0.62, 0.18, 0.10>] } scale 0.35 } normal { // plate ridges ripples 0.25 scale 0.18 rotate <0,90,0> } finish { diffuse 0.87 ambient AMB specular 0.28 roughness 0.045 } } #declare Wing_Membrane_Tex = texture { pigment { bozo color_map { [0.00 rgb <0.22, 0.03, 0.04>] [0.55 rgb <0.34, 0.05, 0.06>] [1.00 rgb <0.48, 0.07, 0.08>] } scale 0.55 } normal { // vein-like pattern (cheap) average normal_map { [1.0 wrinkles 0.35 scale 0.35] [0.6 ripples 0.18 scale 0.12] } } finish { diffuse 0.85 ambient AMB specular 0.18 roughness 0.06 } } #declare Horn_Tex = texture { pigment { gradient y color_map { [0.00 rgb <0.55,0.50,0.40>] [0.45 rgb <0.82,0.78,0.68>] [1.00 rgb <0.96,0.94,0.88>] } scale 0.7 } normal { // striations along length granite 0.35 scale 0.18 } finish { diffuse 0.9 ambient AMB specular 0.25 roughness 0.06 } }; #declare Eye_Tex = texture { pigment { // ember eye: dark rim, hot center radial color_map { [0.00 rgb <1.00,0.55,0.10>] [0.18 rgb <0.90,0.20,0.08>] [0.55 rgb <0.10,0.02,0.02>] [1.00 rgb <0.02,0.02,0.02>] } scale 0.08 } finish { diffuse 0.25 ambient 0.02 specular 0.85 roughness 0.015 } }; #declare Princess_Skin = texture { pigment { color rgb <1.00, 0.84, 0.72> } normal { bumps 0.15 scale 0.12 } finish { diffuse 0.9 ambient AMB specular 0.18 roughness 0.06 } }; #declare Princess_Dress = texture { pigment { // slight fabric variation bozo color_map { [0.00 rgb <0.10, 0.28, 0.78>] [0.55 rgb <0.18, 0.38, 0.92>] [1.00 rgb <0.25, 0.48, 1.00>] } scale 0.35 } normal { wrinkles 0.18 scale 0.22 } finish { diffuse 0.85 ambient AMB specular 0.20 roughness 0.05 } }; #declare Princess_Hair = texture { pigment { gradient x color_map { [0.00 rgb <0.55,0.40,0.10>] [0.50 rgb <0.82,0.64,0.18>] [1.00 rgb <0.95,0.80,0.28>] } scale 0.35 } normal { bumps 0.25 scale 0.08 } finish { diffuse 0.9 ambient AMB specular 0.20 roughness 0.06 } }; #declare Gold_Tex = texture { pigment { color rgb <0.95, 0.78, 0.18> } finish { diffuse 0.35 ambient AMB specular 0.85 roughness 0.02 metallic } }; #declare Rock_Tex = texture { pigment { granite color_map { [0.00 rgb <0.30,0.30,0.33>] [0.50 rgb <0.48,0.48,0.52>] [1.00 rgb <0.72,0.72,0.75>] } scale 0.55 } normal { bumps 0.65 scale 0.22 } finish { diffuse 0.95 ambient AMB specular 0.05 roughness 0.10 } }; // ---------------- Helpers ---------------- #macro Limb(P1, P2, R, TEX) union { cylinder { P1, P2, R } sphere { P1, R } sphere { P2, R } texture { TEX } } #end #macro Claw(P, Dir, Len, R0) cone { P, R0, P + (vnormalize(Dir)*Len), 0.0 texture { Horn_Tex } } #end // ---------------- Dragon ---------------- #declare Dragon = union { // Core body volumes sphere { <0.00, 1.20, 0.50>, 1.18 texture { Dragon_Red_Scales } } // chest sphere { <0.00, 1.15, 2.05>, 1.02 texture { Dragon_Red_Scales } } // mid sphere { <0.00, 1.07, 3.55>, 0.82 texture { Dragon_Red_Scales } } // hips cylinder { <0,1.16,0.55>, <0,1.10,3.55>, 0.62 texture { Dragon_Red_Scales } } // Belly hint: a thin underlay cylinder with belly plates (adds read without remodeling) cylinder { <0,0.88,0.75>, <0,0.80,3.40>, 0.50 texture { Dragon_BellyPlates } } // Neck sphere { <0.00, 1.55, -0.55>, 0.62 texture { Dragon_Red_Scales } } sphere { <0.00, 1.78, -1.35>, 0.52 texture { Dragon_Red_Scales } } sphere { <0.00, 1.92, -2.05>, 0.44 texture { Dragon_Red_Scales } } // Head sphere { <0.00, 1.94, -2.65>, 0.56 texture { Dragon_Red_Scales } } // cranium sphere { <0.00, 1.83, -3.10>, 0.38 texture { Dragon_Red_Scales } } // snout base cone { <0.00, 1.78, -3.30>, 0.25, <0.00, 1.70, -4.25>, 0.02 texture { Dragon_Red_Scales } } sphere { <0.00, 1.70, -4.26>, 0.03 texture { Dragon_Red_Scales } } // Jaw hint cone { <0.00, 1.66, -3.15>, 0.18, <0.00, 1.55, -3.85>, 0.02 texture { Dragon_Red_Deep } } // Eyes sphere { < 0.20, 1.96, -2.78>, 0.06 texture { Eye_Tex } } sphere { <-0.20, 1.96, -2.78>, 0.06 texture { Eye_Tex } } // Horns cone { < 0.22, 2.18, -2.55>, 0.07, < 0.58, 2.45, -2.95>, 0.01 texture { Horn_Tex } } cone { <-0.22, 2.18, -2.55>, 0.07, <-0.58, 2.45, -2.95>, 0.01 texture { Horn_Tex } } cone { < 0.10, 2.10, -2.35>, 0.05, < 0.22, 2.40, -2.10>, 0.01 texture { Horn_Tex } } cone { <-0.10, 2.10, -2.35>, 0.05, <-0.22, 2.40, -2.10>, 0.01 texture { Horn_Tex } } // Tail cone { <0.00, 0.98, 4.25>, 0.52, <0.30, 0.92, 5.70>, 0.30 texture { Dragon_Red_Scales } } cone { <0.30, 0.92, 5.70>, 0.30, <0.70, 0.84, 6.95>, 0.17 texture { Dragon_Red_Scales } } cone { <0.70, 0.84, 6.95>, 0.17, <1.15, 0.76, 7.90>, 0.08 texture { Dragon_Red_Scales } } sphere{ <1.15, 0.76, 7.90>, 0.08 texture { Dragon_Red_Scales } } // Back spines #local i = 0; #while (i < 11) #local zpos = -1.7 + i*0.55; #local h = 0.30 + 0.06*min(i,6); cone { <0, 2.05, zpos>, 0.08, <0, 2.05+h, zpos-0.06>, 0.0 texture { Horn_Tex } } #local i = i + 1; #end // Legs object { Limb(<0.85, 1.00, 1.10>, <1.10, 0.48, 1.25>, 0.18, Dragon_Red_Scales) } object { Limb(<1.10, 0.48, 1.25>, <0.95, 0.12, 1.55>, 0.15, Dragon_Red_Scales) } sphere { <0.95,0.12,1.55>, 0.16 texture { Dragon_Red_Scales } } object { Claw(<0.98,0.08,1.62>, < 0.30,-0.30, 0.60>, 0.22, 0.05) } object { Claw(<0.92,0.08,1.62>, <-0.10,-0.30, 0.65>, 0.20, 0.05) } object { Claw(<0.95,0.08,1.50>, < 0.10,-0.30, 0.75>, 0.20, 0.05) } object { Limb(<-0.85, 1.00, 1.10>, <-1.10, 0.48, 1.25>, 0.18, Dragon_Red_Scales) } object { Limb(<-1.10, 0.48, 1.25>, <-0.95, 0.12, 1.55>, 0.15, Dragon_Red_Scales) } sphere { <-0.95,0.12,1.55>, 0.16 texture { Dragon_Red_Scales } } object { Claw(<-0.98,0.08,1.62>, <-0.30,-0.30, 0.60>, 0.22, 0.05) } object { Claw(<-0.92,0.08,1.62>, < 0.10,-0.30, 0.65>, 0.20, 0.05) } object { Claw(<-0.95,0.08,1.50>, <-0.10,-0.30, 0.75>, 0.20, 0.05) } object { Limb(<0.75, 0.95, 3.05>, <1.05, 0.45, 3.35>, 0.20, Dragon_Red_Scales) } object { Limb(<1.05, 0.45, 3.35>, <0.85, 0.12, 3.75>, 0.17, Dragon_Red_Scales) } sphere { <0.85,0.12,3.75>, 0.18 texture { Dragon_Red_Scales } } object { Claw(<0.88,0.08,3.86>, < 0.25,-0.30, 0.65>, 0.23, 0.05) } object { Claw(<0.82,0.08,3.86>, <-0.10,-0.30, 0.70>, 0.21, 0.05) } object { Limb(<-0.75, 0.95, 3.05>, <-1.05, 0.45, 3.35>, 0.20, Dragon_Red_Scales) } object { Limb(<-1.05, 0.45, 3.35>, <-0.85, 0.12, 3.75>, 0.17, Dragon_Red_Scales) } sphere { <-0.85,0.12,3.75>, 0.18 texture { Dragon_Red_Scales } } object { Claw(<-0.88,0.08,3.86>, <-0.25,-0.30, 0.65>, 0.23, 0.05) } object { Claw(<-0.82,0.08,3.86>, < 0.10,-0.30, 0.70>, 0.21, 0.05) } // Wings union { sphere { <0.70, 2.00, 1.35>, 0.16 texture { Dragon_Red_Scales } } cylinder { <0.70, 2.00, 1.35>, <3.70, 2.45, 1.15>, 0.09 texture { Dragon_Red_Scales } } sphere { <3.70, 2.45, 1.15>, 0.12 texture { Dragon_Red_Scales } } cylinder { <3.70, 2.45, 1.15>, <4.85, 1.75, 2.15>, 0.06 texture { Dragon_Red_Scales } } sphere { <4.85, 1.75, 2.15>, 0.09 texture { Dragon_Red_Scales } } triangle { <0.65, 1.95, 1.35>, <3.75, 2.40, 1.10>, <2.65, 0.95, 2.65> texture { Wing_Membrane_Tex } } triangle { <0.65, 1.95, 1.35>, <2.65, 0.95, 2.65>, <0.25, 1.10, 2.45> texture { Wing_Membrane_Tex } } } union { sphere { <-0.70, 2.00, 1.35>, 0.16 texture { Dragon_Red_Scales } } cylinder { <-0.70, 2.00, 1.35>, <-3.70, 2.45, 1.15>, 0.09 texture { Dragon_Red_Scales } } sphere { <-3.70, 2.45, 1.15>, 0.12 texture { Dragon_Red_Scales } } cylinder { <-3.70, 2.45, 1.15>, <-4.85, 1.75, 2.15>, 0.06 texture { Dragon_Red_Scales } } sphere { <-4.85, 1.75, 2.15>, 0.09 texture { Dragon_Red_Scales } } triangle { <-0.65, 1.95, 1.35>, <-3.75, 2.40, 1.10>, <-2.65, 0.95, 2.65> texture { Wing_Membrane_Tex } } triangle { <-0.65, 1.95, 1.35>, <-2.65, 0.95, 2.65>, <-0.25, 1.10, 2.45> texture { Wing_Membrane_Tex } } } // Pose tweak rotate <0, -18, 0> } // Place dragon object { Dragon translate <1.2, 0.0, 1.0> } // ---------------- Rock ledge for princess ---------------- union { sphere { <-2.8, 0.45, -0.8>, 0.65 } sphere { <-2.2, 0.35, -0.5>, 0.55 } sphere { <-3.3, 0.30, -0.2>, 0.55 } cylinder { <-3.4,0.25,-1.2>, <-2.0,0.25,-0.1>, 0.55 } texture { Rock_Tex } } // ---------------- Princess ---------------- #declare Princess = union { cone { <0,0.00,0>, 0.35, <0,1.05,0>, 0.18 texture { Princess_Dress } } sphere { <0,1.05,0>, 0.20 texture { Princess_Dress } } sphere { <0,1.38,0>, 0.18 texture { Princess_Skin } } difference { sphere { <0,1.42,0>, 0.185 } sphere { <0,1.50,0>, 0.165 translate <0,0.06,0> } texture { Princess_Hair } } union { torus { 0.11, 0.02 rotate <90,0,0> translate <0,1.56,0> texture { Gold_Tex } } cone { <0.00,1.56,0.11>, 0.015, <0.00,1.64,0.11>, 0.00 texture { Gold_Tex } } cone { <0.09,1.56,0.05>, 0.015, <0.12,1.63,0.06>, 0.00 texture { Gold_Tex } } cone { <-0.09,1.56,0.05>,0.015, <-0.12,1.63,0.06>, 0.00 texture { Gold_Tex } } } object { Limb(< 0.18,1.02,0.00>, < 0.38,0.78,0.10>, 0.05, Princess_Skin) } object { Limb(<-0.18,1.02,0.00>, <-0.36,0.82,0.10>, 0.05, Princess_Skin) } sphere { < 0.40,0.76,0.11>, 0.045 texture { Princess_Skin } } sphere { <-0.38,0.80,0.11>, 0.045 texture { Princess_Skin } } sphere { < 0.10,0.02,0.10>, 0.05 texture { Princess_Skin } } sphere { <-0.10,0.02,0.10>, 0.05 texture { Princess_Skin } } } object { Princess rotate <0, 25, 0> translate <-2.75, 0.95, -0.75> } // ---------------- Simple treasure glint (fast mood prop) ---------------- union { sphere { <2.5, 0.14, 4.2>, 0.12 texture { Gold_Tex } } sphere { <2.7, 0.12, 4.35>, 0.10 texture { Gold_Tex } } sphere { <2.4, 0.10, 4.45>, 0.08 texture { Gold_Tex } } sphere { <2.6, 0.09, 4.55>, 0.06 texture { Gold_Tex } } }