// blob kit of parts // m.miller 2.20.2023 // skydome stage #version 3.8; // quality 0,1,2 #declare quality = 0; #declare use_area_lights = 1; #declare light_adaptive = 1; #declare Norm = <0,0,0>; //--- GLOBAL SETTINGS #switch (quality) #case (0) global_settings { max_trace_level 5 max_intersections 64 assumed_gamma 2.8 ambient_light <.12,.05,.03> } #break #case (1) global_settings { max_trace_level 10 max_intersections 64 assumed_gamma 2.8 ambient_light <0,0,0> radiosity { pretrace_start 0.08 pretrace_end 0.04 count 200 nearest_count 10 error_bound 0.2 recursion_limit 3 low_error_factor .5 gray_threshold 0.0 minimum_reuse 0.015 brightness .8 adc_bailout 0.01/2 } subsurface { radiosity on samples 50,50 } } #break #case (2) global_settings { max_trace_level 4 max_intersections 16 assumed_gamma 2.8 ambient_light <0,0,0> radiosity { pretrace_start 0.08 pretrace_end 0.04 count 10 nearest_count 5 error_bound 0.2 recursion_limit 3 low_error_factor .5 gray_threshold 0.0 minimum_reuse 0.015 brightness 1 adc_bailout 0.01/2 } subsurface { radiosity on samples 50,50 } } #break #end // based on original Reorient() macro by John VanSickle #macro Reorient_Trans(Axis1, Axis2) #local vX1 = vnormalize(Axis1); #local vX2 = vnormalize(Axis2); #local Y = vcross(vX1, vX2); #if(vlength(Y) > 0) #local vY = vnormalize(Y); #local vZ1 = vnormalize(vcross(vX1, vY)); #local vZ2 = vnormalize(vcross(vX2, vY)); transform { matrix < vX1.x, vY.x,vZ1.x, vX1.y,vY.y,vZ1.y, vX1.z,vY.z, vZ1.z, 0,0,0 > matrix < vX2.x,vX2.y,vX2.z, vY.x,vY.y, vY.z, vZ2.x,vZ2.y,vZ2.z, 0,0,0 > } #else #if (vlength(vX1-vX2)=0) transform {} #else #local vZ = VPerp_To_Vector(vX2); transform { Axis_Rotate_Trans(vZ,180) } #end #end #end #macro Correct_Pigment_Gamma(Orig_Pig, New_G) #local Correct_Pig_fn = function{ pigment {Orig_Pig} } pigment{ average pigment_map{ [function{ pow(Correct_Pig_fn(x,y,z).x, New_G)} color_map{[0 rgb 0][1 rgb<3,0,0>]}] [function{ pow(Correct_Pig_fn(x,y,z).y, New_G)} color_map{[0 rgb 0][1 rgb<0,3,0>]}] [function{ pow(Correct_Pig_fn(x,y,z).z, New_G)} color_map{[0 rgb 0][1 rgb<0,0,3>]}] }} #end //--- COLORS #ifndef (Transparent) #declare Transparent = rgbt 1 ;#end #declare C_white = color rgb<1,1,1> ; #declare C_black = color rgb<0,0,0> ; #declare C_red = color rgb<1,0,0> ; #declare C_red_dark = color rgb<.9,0,0> ; #declare C_green = color rgb<0,1,0> ; #declare C_blue = color rgb<0,.5,.9> ; #declare C_orange = color rgb<1,1,0> ; #declare C_copper = color rgb <0.40, 0.20, 0.15>; #declare C_silver = color rgb <0.85, 0.85, 0.8>; #declare C_gold = color red 0.82 green 0.6 blue 0.196078; #declare C_gold_bright= color <0.90, 0.65, 0.15>; #declare C_light_blue = color red 0.6 green 0.8 blue 1; #declare C_horizon_blue = color red .82 green 1 blue .98; #declare C_light_green = color rgb<.75,1,.9> ; #declare C_gray10 = color red 0.1 green 0.1 blue 0.1; #declare C_gray20 = color red 0.2 green 0.2 blue 0.2; #declare C_gray30 = color red 0.3 green 0.3 blue 0.3; #declare C_gray40 = color red 0.4 green 0.4 blue 0.4; #declare C_gray50 = color red 0.5 green 0.5 blue 0.5; #declare C_gray60 = color red 0.6 green 0.6 blue 0.6; #declare C_gray70 = color red 0.7 green 0.7 blue 0.7; #declare C_gray80 = color red 0.8 green 0.8 blue 0.8; #declare C_gray90 = color red 0.9 green 0.9 blue 0.9; #declare C_tan = color red 0.85 green 0.66 blue 0.5; #declare C_tan_dark = color red 0.66 green 0.5 blue 0.4; #declare RGB_green_olive = rgb <0.4, 0.6, 0.2> ; #declare RGB_green_gray = rgb <0.5, 0.6, 0.4> ; #declare RGB_yellow_gray = rgb <0.7, 0.8, 0.4> ; #declare RGB_brown_gray = rgb <0.879, 0.55, 0.32> ; #declare C_brown_gray = color red 1 green 0.6 blue 0.32 ; #declare C_teal = color rgb<.30,.51,.54> ; #declare C_purple = color red 0.18 green 0 blue 0.26; #declare C_teal = color red 0.0 green 0.64 blue 1.0; #declare C_skylight_blue = color red .10 green .15 blue .2 ; #declare C_skylight_warm = color red .06 green .04 blue .03 ; #declare C_dark_gray_blue = color red .04 green .08 blue .10 ; #declare C_gray_blue = color red .04 green .06 blue .07 ; #declare C_dark_cyan = color red 0 green.07 blue .11 ; #declare C_water = colour red .03 green .04 blue .05 filter 1 ; #declare C_water_fade_A = colour red .05 green .06 blue .07 filter .2 ; #declare C_water_fade_B = colour red .05 green .06 blue .07 filter .2 ; #declare C_water_fade_C = colour red .05 green .06 blue .07 filter .2 ; //--- COLOR MAPS #declare CM_gold = color_map { [0.000 rgb <0.70, 0.60, 0.45>] [0.171 rgb <0.65, 0.55, 0.35>] [0.274 rgb <0.58, 0.35, 0.25>] [0.393 rgb <0.65, 0.65, 0.35>] [0.564 rgb <0.55, 0.45, 0.25>] [0.701 rgb <0.65, 0.55, 0.35>] [1.000 rgb <0.70, 0.60, 0.45>] } #declare CM_cool = color_map { [0.000 rgb <0.50, 0.60, 0.65>] [0.171 rgb <0.35, 0.55, 0.65>] [0.274 rgb <0.48, 0.65, 0.75>] [0.393 rgb <0.45, 0.65, 0.75>] [0.564 rgb <0.35, 0.45, 0.55>] [0.701 rgb <0.45, 0.55, 0.65>] [1.000 rgb <0.30, 0.45, 0.65>] } #declare CM_water_fade = color_map { [0.000 C_water] [0.171 C_water] [0.274 C_water_fade_A] [0.393 C_water_fade_B] [0.564 C_water] [0.701 C_water_fade_C] [1.000 C_water] } #declare CM_black_purple_teal = color_map { [0.00 .1 color C_black color C_purple] [0.1 .4 color C_purple color C_teal] [0.4 .65 color C_teal color C_purple] [0.65 1.01 color C_purple color C_black] } #declare CM_purple_teal = color_map { [0.0 .5 color C_black color C_light_blue] [0.5 1.0 color C_light_blue color C_black] } #declare CM_sky_dome_teal_purple_2 = color_map { [0.0 .5 color C_teal color C_purple] [0.5 1.0 color C_purple color C_teal] } #declare CM_sky_dome_brown_blue = color_map { [0.0 .5 color C_teal color C_brown_gray] [0.5 1.0 color C_brown_gray color C_teal] } #declare CM_sky_dome_blue_violet = color_map { [0.0 .1 color C_teal color C_teal] [0.1 .5 color C_teal color C_horizon_blue] [0.5 .9 color C_horizon_blue color C_teal] [0.9 1.0 color C_teal color C_teal] } #declare CM_sky_dome_teal_purple = color_map { [0.0 .1 color C_teal color C_teal] [0.1 .5 color C_teal color C_purple] [0.5 .9 color C_purple color C_teal] [0.9 1.0 color C_teal color C_teal] } #declare CM_water_blue_mud = color_map { [0.000 rgbf <0.3, 0.5, 0.5, 0>] [0.171 rgbf <0.3, 0.4, 0.4, .7>] [0.274 rgbf <0.1, 0.1, 0.2, .8>] [0.393 rgbf <0.4, 0.4, 0.5, 1>] [0.564 rgbf <0.4, 0.4, 0.5, .3>] [0.701 rgbf <0.2, 0.3, 0.3, 0>] [1.000 rgbf <0.2, 0.4, 0.5, 0>] } #declare CM_enviroment_sunny = color_map { [ 0.0 C_gray60 ] [ 0.40 C_white ] [ 0.50 C_horizon_blue ] [ 0.53 C_light_blue ] [ 1.0 C_blue ] } #declare CM_teal = color_map { [0.0 C_teal] [0.2 C_teal] [0.7 C_dark_cyan] [0.85 C_teal] [1.0 C_teal] } #declare CM_agate_A = color_map { [ 0.0 RGB_green_olive ] [ 0.3 RGB_green_gray ] [ 0.5 RGB_yellow_gray ] [ 0.7 RGB_brown_gray ] [ 1.0 RGB_green_olive ] } #declare CM_mud_A = color_map { [0.000 rgb <0.625, 0.659, 0.455>] [0.171 rgb <0.582, 0.449, 0.320>] [0.274 rgb <0.157, 0.151, 0.122>] [0.393 rgb <0.625, 0.619, 0.455>] [0.564 rgb <0.582, 0.519, 0.420>] [0.701 rgb <0.482, 0.392, 0.278>] [1.000 rgb <0.625, 0.659, 0.455>] } #declare CM_steel = color_map { [0.000 rgb <0.535, 0.525, 0.535>] [0.171 rgb <0.549, 0.549, 0.520>] [0.274 rgb <0.457, 0.451, 0.462>] [0.393 rgb <0.625, 0.625, 0.625>] [0.564 rgb <0.582, 0.540, 0.520>] [0.701 rgb <0.552, 0.532, 0.578>] [1.000 rgb <0.535, 0.525, 0.535>] } #declare CM_gold = color_map { [0.000 rgb <0.70, 0.60, 0.45>] [0.171 rgb <0.65, 0.55, 0.35>] [0.274 rgb <0.58, 0.35, 0.25>] [0.393 rgb <0.65, 0.65, 0.35>] [0.564 rgb <0.55, 0.45, 0.25>] [0.701 rgb <0.65, 0.55, 0.35>] [1.000 rgb <0.70, 0.60, 0.45>] } #declare CM_shroom_grad_A = color_map { [0.0 color C_gold] [0.5 color C_gold] [.7 color C_white] [.9 color C_tan_dark] [1.0 color C_tan_dark] } #declare CM_shroom_grad_B = color_map { [0.0 color C_horizon_blue] [0.2 color C_gold] [.7 color C_gold] [.9 color C_horizon_blue] [1.0 color C_horizon_blue] } //--- PIGMENTS // granite // waves // wrinkles // bozo // leopard // crackle // agate // agate_turb 0.3 #declare P_mud_granite = pigment { granite color_map { CM_mud_A } scale 1 warp { turbulence .5 }} #declare P_mud_leopard = pigment { leopard color_map { CM_mud_A } scale 1 warp { turbulence 3 }} #declare P_mud_bozo = pigment { bozo color_map { CM_mud_A } scale 1 warp { turbulence 3 }} #declare P_mud_wrinkles = pigment { wrinkles color_map { CM_mud_A } scale 1 warp { turbulence 3 }} #declare P_mud_crackle = pigment { crackle color_map { CM_mud_A } scale 1 warp { turbulence 3 }} #declare P_mud_agate = pigment { agate color_map { CM_mud_A } scale 1 warp { turbulence 1 }} #declare P_steel_leopard = pigment { leopard color_map { CM_steel } scale 1 warp { turbulence 2 }} #declare P_steel_bozo = pigment { bozo color_map { CM_steel } scale 1 warp { turbulence 4 }} #declare P_steel_wrinkles = pigment { wrinkles color_map { CM_steel } scale 1 warp { turbulence 6 }} #declare P_steel_agate = pigment { agate color_map { CM_steel } scale 1 warp { turbulence 5 }} #declare P_gold_agate = pigment { agate color_map { CM_gold } scale 1 warp { turbulence 5 }} #declare P_clear_black = pigment { color C_black transmit 1 } #declare P_clear_white = pigment { color C_white transmit 1 } #declare P_gold_agate = pigment { agate color_map { CM_gold } scale 1 warp { turbulence 5 } } #declare P_cool_agate = pigment { agate color_map { CM_cool } scale 1 warp { turbulence 5 } } //--- NORMALS #declare N_frost = normal {bumps 0.3 scale .001} #declare N_ripple_A = normal { bozo 0.2 scale 0.2 } #declare N_ripple_large = normal{N_ripple_A scale 10 bump_size 5} #declare N_small_bumps = normal { leopard bump_size 10 scale 1 warp { turbulence 1 }} #declare N_granite = normal { granite 1 bump_size 1 scale 1 warp { turbulence .5 }} #declare N_leopard = normal { leopard bump_size 9 scale .5 warp { turbulence 6 }} #declare N_mud_bozo = normal { bozo bump_size 5 scale 1 warp { turbulence 3 }} #declare N_mud_wrinkles = normal { wrinkles bump_size 2 scale 1 warp { turbulence 3 }} #declare N_mud_crackle = normal { crackle bump_size 2 scale 1 warp { turbulence 3 }} #declare N_mud_agate = normal { agate bump_size 2 scale 1 warp { turbulence 1 }} #declare N_steel = normal { leopard bump_size 3 scale 1 warp { turbulence 2 }} #declare N_steel_bozo = normal { bozo bump_size 1 scale 1 warp { turbulence 4 }} #declare N_steel_wrinkles = normal { wrinkles bump_size .5 scale 1 warp { turbulence 8 }} #declare N_steel_agate = normal { agate bump_size .05 scale 1 warp { turbulence 5 }} #declare N_gold_agate = normal { agate bump_size .2 scale 1 warp { turbulence 5 }} #declare N_caos_A = normal { gradient x normal_map { [0.3 bumps scale 2] [0.3 dents] [0.6 dents] [0.9 marble turbulence 1] } } #declare N_ripple_A = normal { gradient x slope_map { [0 <0.5, 1>] // start in middle and slope up [0.25 <1.0, 0>] // flat slope at top of wave [0.5 <0.5,-1>] // slope down at mid point [0.75 <0.0, 0>] // flat slope at bottom [1 <0.5, 1>] // finish in middle and slope up } scale .2 } #declare N_gold_agate = normal { agate bump_size .2 scale 1 warp { turbulence 5 } } //--- FINISHES #declare F_plastic_gloss = finish { reflection {.3, .8 fresnel on } conserve_energy brilliance 6 ambient 1 diffuse 1 phong 5 phong_size 20 specular .3 roughness .2 reflection .2 } #declare F_plastic_satin = finish { reflection {.5, 1 fresnel on } conserve_energy brilliance 5 ambient 0 brilliance 2 diffuse 1 phong .2 phong_size 100 //metallic specular .1 roughness .9 reflection .1 } #declare F_soft = finish { reflection {.4,.6 fresnel on } conserve_energy brilliance 5 ambient 1 brilliance 2 diffuse .7 phong .3 phong_size 40 //metallic specular .1 roughness .9 reflection .1 } #declare F_silk = finish { reflection {.5, 1 fresnel on } conserve_energy brilliance 5 ambient 1 brilliance 2 diffuse 1 phong .2 phong_size 20 //metallic specular .01 roughness .75 reflection .2 } #declare F_flat = finish { ambient 0.0 diffuse 1 phong 0 phong_size 0 specular 0 metallic 0 } #declare F_bright = finish { ambient 1 diffuse 1 phong 0 phong_size 0 specular 0 metallic 0 emission rgb .3 } #declare F_dull_glow = finish { ambient 0 //emission .1 //fresnel 1 phong 0 diffuse albedo 1 specular albedo 1 roughness 0.01 reflection .5 } #declare F_glow = finish { ambient 0 emission 1 //fresnel 1 phong 0 diffuse albedo .5 specular albedo 1 roughness 0.001 reflection 1 } //--- FINISHES METAL #declare F_metal_dull = finish { reflection {.3, 1 fresnel on } conserve_energy brilliance 5 ambient 1 diffuse 1 phong .1 phong_size 200 metallic 1 specular .8 roughness .1 reflection .15 } #declare F_metal_hard = finish { reflection {.01, 1 fresnel on } conserve_energy brilliance 5 ambient 0 brilliance 5 diffuse 1 phong 2 phong_size 100 metallic specular 1 roughness 1/100 reflection .2 } #declare F_metal_hard2 = finish { reflection {.01, 1 fresnel on } conserve_energy brilliance 5 ambient .1 brilliance 5 diffuse 1 phong 2 phong_size 100 metallic specular 1 roughness .2 reflection .1 } #declare F_metal_polished = finish { reflection {0, 1 fresnel on } conserve_energy brilliance 5 ambient 0 diffuse .5 phong 5 phong_size 40 metallic specular .4 roughness 1/20 reflection .5 } #declare F_metal_polished = finish { reflection {0, 1 fresnel on } conserve_energy brilliance 5 ambient 0 diffuse .5 phong 5 phong_size 40 metallic specular .4 roughness 1/20 reflection .5 } #declare F_metal_smooth = finish { reflection {.3, .6 fresnel on } conserve_energy brilliance 5 ambient 0 brilliance 2 diffuse 1 phong 1 phong_size 100 metallic specular .5 roughness .15 } #declare F_hard = finish { reflection {.5, 1 fresnel on } conserve_energy brilliance 5 ambient 1 brilliance 10 diffuse 1 phong 1 phong_size 60 metallic specular 1 roughness .1 reflection .1 } #declare F_metal_flat = finish { reflection {0, 1 fresnel on falloff 1.0 exponent 1.0 metallic 0 } conserve_energy phong .5 phong_size 10 diffuse .5 metallic 1 specular .7 roughness .2 } #declare F_stone_smooth = finish { reflection {.1, .3 fresnel on falloff 1 exponent 1.0 metallic 0 } conserve_energy phong .3 phong_size 30 diffuse .75 specular .2 roughness .8 } // glass #declare F_glass = finish { specular 0.7 roughness 0.001 ambient .5 diffuse .5 reflection { .2, 1.0 fresnel on } conserve_energy } #declare F_glass_dark = finish { specular .02 roughness 0.01 phong 1 phong_size 100 ambient .5 diffuse 0 reflection { .2, 1.0 fresnel on } conserve_energy } #declare F_hazy_glass = finish { reflection {0, .85 fresnel on } conserve_energy phong 10 phong_size 60 metallic 1 specular 30 roughness 1/10 } #declare F_hard_glass = finish { reflection {.2, 1 fresnel on } conserve_energy phong 5 phong_size 100 metallic 0 specular .25 roughness 1/10 diffuse 1 } #declare F_milky = finish { reflection {.4, .6 fresnel on } conserve_energy phong 1 phong_size 60 metallic 0 specular .2 roughness 1/10 } //--- I N T E R I O R S #declare I_white = interior { ior 1.5 fade_colour <1,1,1> fade_distance 1.0 fade_power .2 } #declare I_clear = interior { ior 1.5 fade_colour <1,1,1> fade_distance 1.0 fade_power .2 } #declare I_dark = interior { ior 1.5 fade_colour <.5,.5,.5> fade_distance 1.0 fade_power .2 } #declare I_green = interior { ior 1.6 fade_colour <0,.7,.2> fade_distance .5 fade_power 2 } #declare I_green_light = interior { ior 1.6 fade_colour <.75,1,.9> fade_distance .5 fade_power 2 } #declare I_blue = interior { ior 1.6 fade_colour <0,.8,1> fade_distance .5 fade_power 2 } #declare I_red = interior { ior 1.6 fade_colour <1,0,0> fade_distance .5 fade_power 2 } #declare I_gold = interior { ior 1.6 fade_colour <0.90, 0.65, 0.15> fade_distance .5 fade_power 2 } #declare I_solid = interior { ior 1 fade_colour <0,0,0> fade_distance 0 fade_power 0 } //--- TEXTURES #declare T_black = texture{ pigment{ rgb C_black transmit 0 }} #declare T_gray10 = texture{ pigment{ rgb C_gray50 transmit 0 }} #declare T_gray20 = texture{ pigment{ rgb C_gray50 transmit 0 }} #declare T_gray30 = texture{ pigment{ rgb C_gray50 transmit 0 }} #declare T_gray40 = texture{ pigment{ rgb C_gray50 transmit 0 }} #declare T_gray50 = texture{ pigment{ rgb C_gray50 transmit 0 }} #declare T_gray60 = texture{ pigment{ rgb C_gray60 transmit 0 }} #declare T_gray70 = texture{ pigment{ rgb C_gray70 transmit 0 }} #declare T_gray80 = texture{ pigment{ rgb C_gray80 transmit 0 }} #declare T_white = texture{ pigment{ rgb C_white transmit 0 }} #declare T_tan = texture{ pigment{ rgb C_tan transmit 0 }} #declare T_tan_dark = texture{ pigment{ rgb C_tan_dark transmit 0 }} #declare T_red = texture{ pigment{ rgb C_red transmit 0 }} #declare T_gold = texture{ pigment{ rgb C_gold transmit 0 }} #declare T_gold_bright = texture{ pigment{ rgb C_gold_bright transmit 0 }} #declare T_clear_black = texture { pigment { P_clear_black }} #declare T_clear_white = texture { pigment { P_clear_white }} #declare T_dirty_red = texture{ pigment{ bozo scale .7 turbulence 0.15 color_map{ [0.0 color C_red ] [0.3 color C_red] [0.4 color C_red_dark] [0.5 color C_red_dark] [.7 color C_red] [1.0 color C_red ] } } normal { crackle 5 scale .1 turbulence 0.25 } } #declare T_enviroment_sunny = texture { pigment { gradient z color_map { CM_enviroment_sunny } } } #declare T_shroom_texture_A = texture { pigment { gradient y color_map {CM_shroom_grad_A} } finish { specular 1 diffuse 1 roughness 0.0001 phong 0.1 phong_size 45 brilliance 3 reflection {0.03, .3 fresnel on} conserve_energy } normal { crackle 5 scale .1 turbulence 0.25 bump_size .5} } #declare T_shroom_A = texture { T_shroom_texture_A scale .5 translate <0,0,0> } texture{ pigment{ crackle scale .1 turbulence 0.25 color_map{ [0.0 color C_black transmit 0.39] [0.05 color Transparent] [0.9 color C_red] [.95 color Transparent] [1.0 color C_black transmit 0.39] } } normal { crackle 5 scale .1 turbulence 0.25 } } #declare T_shroom_B = texture { pigment { gradient y color_map {CM_shroom_grad_B} } finish { specular 1 diffuse 1 roughness 0.0001 phong 0.1 phong_size 45 brilliance 3 reflection {0.03, .3 fresnel on} conserve_energy } normal { crackle 5 scale .1 turbulence 0.25 bump_size .5} } // LAYERED TEXTURES #declare T_agate_gold_vien = texture { bozo texture_map { [0.30 pigment { color rgb <.3,.5,.5> transmit 1 } ] [0.5 pigment { granite color_map { CM_agate_A } scale 3 warp { turbulence 0.5 } } finish{F_metal_hard} normal { granite .6 scale 20 bump_size 1 } ] } warp { turbulence <2.0, 3.0, 2.0> } } //--- MATERIALS // neutrals #declare M_neutral_floor = material{ texture{ T_gray40 finish{F_metal_hard}} interior{I_solid} } #declare M_tan_gloss = material{ texture{ T_tan finish{F_plastic_gloss}} interior{I_solid} } #declare M_tan_dark_gloss = material{ texture{ T_tan_dark finish{F_metal_hard}} interior{I_solid} } #declare M_tan_dark_satin = material{ texture{ T_tan_dark finish{F_plastic_satin}} interior{I_solid} } #declare M_red_gloss = material{ texture{ T_red finish{F_plastic_gloss}} interior{I_solid} } #declare M_black_gloss = material{ texture{ T_black finish{F_plastic_gloss}} interior{I_solid} } #declare M_gray20_gloss = material{ texture{ T_gray20 finish{F_metal_hard}} interior{I_solid} } #declare M_gray30_gloss = material{ texture{ T_gray30 finish{F_metal_hard}} interior{I_solid} } #declare M_gray50_gloss = material{ texture{ T_gray50 finish{F_plastic_gloss}} interior{I_solid} } #declare M_gray50_mat = material{ texture{ T_gray50 finish{F_flat}} interior{I_solid} } #declare M_gray50_satin = material{ texture{ T_gray50 finish{F_plastic_satin}} interior{I_solid} } #declare M_white_gloss = material{ texture{ T_white finish{F_metal_hard}} interior{I_solid} } // metals #declare M_metal_alum = material{ texture{ T_gray80 finish{F_metal_dull}} interior{I_solid} } #declare M_metal_steel = material{ texture{ T_gray70 finish{F_metal_hard}} interior{I_solid} } #declare M_metal_chrome = material{ texture{ T_gray80 finish{F_metal_polished}} interior{I_solid} } #declare M_metal_gold = material{ texture{ T_gold finish{F_metal_polished}} interior{I_solid} } #declare M_metal_gold_bright = material{ texture{ T_gold_bright finish{F_metal_polished}} interior{I_solid} } // glass #declare M_glass = material{ texture{ T_clear_black finish{F_hard_glass}} interior{I_clear} } #declare M_glass_dark = material{ texture{ T_clear_black finish{F_hard_glass}} interior{I_dark} } #declare M_glass_red = material{ texture{ T_clear_black finish{F_hard_glass}} interior{I_red} } #declare M_glass_gold = material{ texture{ T_clear_black finish{F_hard_glass}} interior{I_gold} } #declare M_glass_green = material{ texture{ T_clear_black finish{F_hard_glass}} interior{I_green} } #declare M_glass_green_light = material{ texture{ T_clear_black finish{F_hard_glass}} interior{I_green_light} } #declare M_glass_blue = material{ texture{ T_clear_black finish{F_hard_glass}} interior{I_blue} } #declare M_glass_milk = material{ texture{ T_clear_white finish{F_milky}} interior{I_white} } #declare M_glass_frosted = material{ texture{ T_clear_black normal{N_ripple_A scale .05} finish{F_milky}} interior{I_white} } #declare M_glass_wripple = material{ texture{ T_clear_black normal{N_ripple_A scale 2} finish{F_milky}} interior{I_white} } #declare M_glass_gold_frost = material{ texture{ T_clear_black normal{N_ripple_A scale .1} finish{F_hard_glass}} interior{I_gold} } #declare M_glass_gold_wripple = material{ texture{ T_clear_black normal{N_ripple_A} finish{F_hard_glass}} interior{I_gold} } #declare M_glass_gold_pillow = material{ texture{ T_clear_black normal{N_ripple_A scale 9} finish{F_hard_glass}} interior{I_gold} } #declare M_gray50_gloss_ripple = material{ texture{ T_gray50 normal{N_ripple_A scale 9} finish{F_metal_hard}} interior{I_solid} } #declare M_metal_chrome_ripple = material{ texture{ T_gray80 normal{N_ripple_A } finish{F_metal_polished}} interior{I_solid} rotate x*90} #declare M_glass_green_light_ripple = material{ texture{ T_clear_black normal{N_ripple_large} finish{F_hard_glass}} interior{I_green_light} } #declare M_metal_gold_ripple = material{ texture{ T_gold_bright normal{N_ripple_A scale .6} finish{F_metal_polished}} interior{I_solid} } #declare M_normal_study = material{ texture{ T_tan finish{F_metal_hard}} interior{I_solid} } #declare M_agate_gold_vien = material{ texture{ T_agate_gold_vien } } #declare M_mud_granite = material{ texture{ P_mud_granite scale 4 normal{N_granite scale 4} finish{F_stone_smooth}} interior{I_solid} } #declare M_mud_leopard = material{ texture{ P_mud_leopard scale .3 normal{N_leopard scale 1} finish{F_metal_smooth}} interior{I_solid} } #declare M_mud_bozo = material{ texture{ P_mud_bozo scale 1 normal{N_mud_bozo scale 1} finish{F_stone_smooth}} interior{I_solid} } #declare M_mud_wrinkles = material{ texture{ P_mud_wrinkles scale 2 normal{N_mud_wrinkles scale 2} finish{F_metal_smooth}} interior{I_solid} } #declare M_mud_crackle = material{ texture{ P_mud_crackle scale 2 normal{N_mud_crackle scale 2} finish{F_stone_smooth}} interior{I_solid} } #declare M_mud_agate = material{ texture{ P_mud_agate scale 2 normal{N_mud_agate scale 2} finish{F_stone_smooth}} interior{I_solid} } #declare M_steel_bozo = material{ texture{ P_steel_bozo scale .6 normal{N_steel_bozo scale .6} finish{F_metal_smooth}} interior{I_solid} } #declare M_steel_wrinkles = material{ texture{ P_steel_wrinkles scale 3 normal{N_steel_wrinkles scale 3} finish{F_metal_smooth}} interior{I_solid} } #declare M_steel_agate = material{ texture{ P_steel_agate scale 3 normal{N_steel_agate scale 3} finish{F_metal_smooth}} interior{I_solid} } #declare M_gold_agate = material{ texture{ P_gold_agate scale 5 normal{N_gold_agate scale 5} finish{F_metal_hard2}} interior{I_solid} } #declare M_test = material{ texture{ P_mud_leopard scale .3 normal{N_leopard scale .3} finish{F_stone_smooth}} interior{I_solid} } #declare M_steel_leopard = material{ texture{ P_steel_leopard scale .3 normal{N_steel scale .3} finish{F_metal_smooth}} interior{I_solid} } #declare M_metal_dirty_chrome = material{ texture{ P_steel_bozo scale 100 normal{N_steel_wrinkles} finish{F_metal_polished}} interior{I_solid} } #declare M_enviroment_sunny = material{ texture{ T_enviroment_sunny finish{F_bright}} interior{I_solid} } #declare M_shroom = material { texture { T_shroom_A scale 11 rotate x*90 finish{F_metal_polished}} } #declare M_shroom_B = material { texture { T_shroom_B scale 25 rotate x*90 finish{F_metal_polished}} } #declare M_dirty_red = material { texture { T_dirty_red finish{F_stone_smooth} }} #declare M_gray50_matt = material { texture { pigment { color C_gray50 }}} #declare M_gray70_matt = material { texture { pigment { color C_gray70 }}} #declare M_gray10_matt = material { texture { pigment { color C_gray10 }}} #declare M_matt_tan = material { texture { pigment { color C_tan }}} #declare M_gold_2_agate_hard = material{ texture{ P_gold_agate scale 5 normal{N_gold_agate scale 5} finish{F_hard} } interior{I_solid} } #declare M_cool_agate_hard = material{ texture{ P_cool_agate scale 4 normal{N_gold_agate scale 4} finish{F_hard} } interior{I_solid} } // merky water #declare M_water_mud = material { texture { pigment { bozo turbulence 0.6 colour_map { CM_cool } } normal { //ripples .5 dents 1 frequency 3 bump_size 1 } finish { //reflection {0.7, 1 fresnel} reflection {.5, 1 fresnel} conserve_energy } } scale 2 } // blue merky water #declare M_water_blue_mud = material { texture { pigment { bozo turbulence 0.4 colour_map { CM_cool } } normal { //ripples .5 bozo turbulence 0.4 bump_size .5 } finish { reflection {0.5, 1 fresnel} //reflection {.5, 1 fresnel} //reflection {.5, 1 fresnel} //brilliance 5 ambient 1 brilliance 10 diffuse .2 phong 1 phong_size 80 //metallic specular 1 roughness .05 //reflection .2 conserve_energy emission 0 } } scale 3 } #declare M_water_A = material { texture { pigment { bozo turbulence 0.4 colour_map { CM_water_fade } } normal { //ripples .5 dents 1 frequency 3 bump_size 1 } finish { reflection {0.35, 1 fresnel} conserve_energy } } } // --- CLOUDS #declare M_bozo_cloud_A = material { texture { pigment { bozo turbulence 1 colour_map { [0.0 0.3 colour red 1.0 green 1.0 blue 1.0 filter 1.0 colour red 1.0 green 1.0 blue 1.0 filter 1.0] [0.3 0.8 colour red 1.0 green 1.0 blue 1.0 filter 1.0 colour red 1.0 green 1.0 blue 1.0 filter .3] [0.8 1.001 colour red 1.0 green 1.0 blue 1.0 filter .3 colour red 1.0 green 1.0 blue 1.0 filter 0] } } finish { ambient 1 diffuse 1 emission .8 } } } #declare M_gray50 = material{ texture{ T_gray50 finish{F_flat} } interior{I_solid} } // --- END MATERIAL // --- WEED SHAPED SPLINES #declare C_spline_a = union { sphere_sweep { cubic_spline 6, <-1,0,4>, 1, <-.5,0,2>, .85, <0,4,0>, .5, <2,10,3>, .2, <1,25,-3>, .5, <3,30,-8>, 1 tolerance 0.000001 } } #declare C_spline_b = union { sphere_sweep { cubic_spline 6, <2,0,4>, 3, <2,0,2>, .85, <0,8,0>, .5, <2,22,3>, .2, <-3,25,-3>, .6, <-3,30,-3>, 1 tolerance 0.000001 } } #declare C_spline_c = union { sphere_sweep { cubic_spline 7, <0,0,3>, 1, <0,0,3>, 1, <0,4,1>, 1, <4,12,0>, .4, <0,22,2>, 1, <0,25,3>, 2, <0,30,3>, 1 tolerance 0.000001 } } #declare weed3 = union { sphere_sweep { cubic_spline 7, <-0.0133141,-0.000790786,0.0>,0.131825, <-0.0133141,-0.000790786,0.0>,0.131825, <0.0852752,0.426277,-0.118113>,0.102224, <-0.0994501,1.01313,0.0504987>,0.0503133, <-0.082195,1.2748,0.0306135>,0.0251861, <-0.0270831,1.38204,-0.0239959>,0.0551861, <-0.0270831,1.38204,-0.0239959>,0.0551861 tolerance 0.000001 } } #declare shroom = lathe { cubic_spline 10 < 0.0 , 0.287761 >, < 0.0 , 0.287761 >, < 0.110804 , 0.270507 >, < 0.210494 , 0.199574 >, < 0.203634 , 0.142057 >, < 0.0925914 , 0.13631 >, < 0.124224 , 0.0251171 >, < 0.180055 , -0.00454055 >, < 0.000391543 , -0.0259348 >, < 0.000391543 , -0.0259348 > } // END OF LIBRARY - DECLARES // ______________________________________________________________________________________ // --- SKY background { C_teal } #declare world_offset = 0; #declare world_scale = <5000,50,5000>; #declare world_color_map = CM_sky_dome_brown_blue; #declare world_emission = .3; #declare world_clouds = true; #declare world_cloud_material = material {M_bozo_cloud_A scale world_scale.y} ; #declare world_texture = texture{ pigment { gradient y color_map {world_color_map} } finish { ambient 1.0 diffuse 1 emission world_emission } } #declare skydome = sphere { <0.0, 0.0, 0.0>, 1 hollow on texture{ world_texture scale 3 translate y-0} scale world_scale translate y+world_offset } #if (world_clouds = true) sphere { <0.0, 0.0, 0.0>, .95 hollow on scale world_scale translate y+world_offset material {world_cloud_material } } #end // --- ADD SKYDOME object { skydome no_shadow } //--- CHROME BALL - environment check #declare chrome_sphere = sphere {<0,0,0> 1 material {M_metal_chrome} scale 1 } object { chrome_sphere scale .5 translate <0,.5,0> } // --- FOG #declare fog_color_tan = rgbft<0.33, 0.3, 0.25, 0.0, 0.0> * 1.3 ; #declare fog_color_gray = rgbft<0.17, 0.17, 0.17, 0.0, 0.0> * 2 ; #declare show_fog = true; #declare fog_color = fog_color_tan*2; #declare fog_distance = 100; #declare fog_turb = 2; #declare fog_depth = 0; #declare fog_octaves = 100; #declare f_offset = 0; #if (show_fog = true) fog { distance fog_distance color fog_color turbulence fog_turb turb_depth fog_depth octaves fog_octaves fog_offset f_offset } #end // --- WATER #declare obj_water = object{ plane{y,0} material{M_gray50_satin scale 2} no_shadow} obj_water // --- SKYLIGHT AREA #macro sky_light () #declare light_color = color red .05 green .06 blue .07 ; light_source { <0,0,0> light_color * 18 area_light <200, 0, 0> <0, 0, 200> 16, 16 adaptive 0 jitter circular orient translate <50, 100, -50> } #end sky_light() // --- UNDERLIGHT AREA #macro under_light () #declare light_color = color red .05 green .055 blue .05 ; light_source { <0,0,0> color light_color * 25 area_light <100, 0, 0> <0, 0, 100> 16, 16 adaptive 0 jitter circular orient rotate x*180 translate <50, -100, -20> } #end under_light() // --- POINT FILL #macro fill_light_A () #declare light_color = color rgb <.15,.22,.3> ; light_source { <0,0,0> color light_color * 10 translate <-15,5,-20> fade_distance 10 fade_power 2 } #end //fill_light_A() //--- CAMERA #declare cam_right = ; #declare current_camera = 2; #switch (current_camera) #case (0) camera { right cam_right location <0,15,-55> look_at <0,5,0> sky <0,1,0> angle 50 } #break #case (2) camera { right cam_right location <50,15,-55> look_at <50,9,0> sky <0,1,0> angle 50 } #break #end // --- BLOB VARS #declare rnd_seed = seed(10); #declare cloud_material = material { M_cool_agate_hard scale 5 }; #declare blob_material = material { M_steel_bozo scale 6}; #declare column_material = material { M_mud_leopard scale 5 }; #declare weed_material = material { M_glass_green scale 4 }; #declare min_size = <0,0,0> ; #declare max_size = <1,1,1> ; #declare blob_size = <1,1,1>; #declare scale_factor = 0; //--- point cloud boxed with taper #macro point_field () #declare point_current = 0; #declare inc_x = (max_size.x-min_size.x)/point_count; #declare inc_y = (max_size.y-min_size.y)/point_count; #declare inc_z = (max_size.z-min_size.z)/point_count; #declare inc_scale = 1/point_count; #while (point_current < point_count) #declare point_current = point_current + 1; #declare new_inc = ; #declare new_size = min_size + new_inc; #declare new_x = new_size.x* rand(rnd_seed) - (new_size.x)/2; #declare new_y = point_current * inc_y; #declare new_z = new_size.z* rand(rnd_seed) - (new_size.z)/2; #declare pos = < new_x, new_y , new_z > ; #declare sz = point_size; #if (scale_increment = true) #debug concat(str(point_current,1,3), " - ", str(point_current*inc_scale,1,3), "\n") #declare sz = point_size + (point_current*inc_scale); #end sphere { <0,0,0>, 1, 1 scale sz translate pos+pos_offset } #end #end //_________________________________________________________________________________________________ // --- B L O B C A V E (clouds) //--- vars for blob cave #declare size_x = 12; #declare size_y = 12; #declare size_z = 12; #declare pos_offset = ; #declare blob_size = <.65,.66,.77>; #declare blob_size_threshold = .8; #declare blob_count = 2100; #declare blob_thold = .8; //#declare blob_cloud = blob { blob_square() } #declare mat_blob = cloud_material; #declare rnd_seed = seed(22); // blob cave // object { blob_cloud no_shadow scale <30,20,20> translate <-250,-158,-200> no_shadow material{mat_blob}} // primitives for blob projection #declare topo_sphere = sphere { <0,0,0> 5 } ; #declare topo = torus { 2.0,0.45 scale <3,2,3> rotate<0,0,0> translate<0,0,0> } // macro blob topo - requires pre declared vars - #macro blob_topo() #declare blob_current = 1 ; //threshold blob_threshold #while (blob_current < blob_count) #declare new_pos = ; #declare ray_pos = new_pos - blob_offset ; #declare ray = trace(topo, ray_pos, -y, Norm); //-- test before raycast >> sphere { <0,0,0>, 1 , 1 scale blob_scale rotate<0,0,0> translate ray_pos } #if (Norm.gray!=0) #declare blob_current = blob_current + 1; #declare new_pos = ; #declare new_scale = blob_scale + blob_scale/2*(rand(blob_seed)) ; sphere { <0,0,0>, 1 , 1 scale blob_scale rotate<0,0,0> translate new_pos } #end #end #if (project_up=true) #declare blob_current = 1; #while (blob_current < blob_count) #declare blob_seed = seed(blob_seed +1); #declare new_pos = ; #declare ray_pos = new_pos - blob_offset ; #declare ray = trace(topo, ray_pos, y, Norm); //-- test before raycast >> sphere { <0,0,0>, 1 , 1 scale blob_scale rotate<0,0,0> translate ray_pos } #if (Norm.gray!=0) #declare blob_current = blob_current + 1; #declare new_pos = ; #declare new_scale = blob_scale + blob_scale/2*(rand(blob_seed)) ; sphere { <0,0,0>, 1 , 1 scale blob_scale rotate<0,0,0> translate new_pos } #end #end #end #end // --- nested blob cone #macro blob_cone_A () object { blob { #declare min_size = <0,0,0> ; #declare max_size = <8,8,8> ; #declare point_size = <2,1.8,2>; #declare scale_increment = 0; #declare pos_offset = <0, 0, 0> ; #declare point_count = 50; #declare scale_increment = false; #declare rnd_seed = seed(45); point_field() } } #end object { blob_cone_A() scale 1 translate <-20,1,0> material{blob_material} } // --- nested blob cone #macro blob_cone_B () object { blob { threshold blob_thold #declare min_size = <.5,0,.5> ; #declare max_size = <8,8,8> ; #declare point_size = <2,2,2>; #declare scale_increment = 0; #declare pos_offset = <0, 0, 0> ; #declare point_count = 20; #declare scale_increment = false; #declare rnd_seed = seed(111); point_field() } } #end object { blob_cone_B() scale 1 translate <-10,1,0> material{blob_material} } // --- nested blob cone #macro blob_cone_C () object { blob { threshold blob_thold #declare min_size = <.5,0,.5> ; #declare max_size = <8,8,8> ; #declare point_size = <2,2,2>; #declare scale_increment = 0; #declare pos_offset = <0, 0, 0> ; #declare point_count = 20; #declare scale_increment = false; #declare rnd_seed = seed(111); point_field() // smaller points #declare blob_thold = .5; #declare min_size = <.5,0,.5> ; #declare max_size = <8,8,8> ; #declare point_size = <1,1.1,1>; #declare scale_increment = false; #declare pos_offset = <0, 0, 0> ; #declare point_count = 150; #declare rnd_seed = seed(111); point_field() } } #end object { blob_cone_C() scale 1 translate <0,1,0> material{blob_material} } // --- nested blob cone #macro blob_cone_D () object { blob { threshold blob_thold #declare min_size = <.5,0,.5> ; #declare max_size = <8,8,8> ; #declare point_size = <1.3,1.8,1.3>; #declare scale_increment = 0; #declare pos_offset = <0, 0, 0> ; #declare point_count = 50; #declare scale_increment = false; #declare rnd_seed = seed(345); point_field() // smaller points #declare blob_thold = .5; #declare min_size = <.5,0,.5> ; #declare max_size = <7.5,8,7.5> ; #declare point_size = <.5,.4,.6>; #declare scale_increment = false; #declare pos_offset = <0, 0, 0> ; #declare point_count = 1000; #declare rnd_seed = seed(111); point_field() } } #end object { blob_cone_D() scale 1 translate <10,1,0> material{blob_material} } // --- nested blob cone - increase scale as it populates in the Y #macro blob_cone_E () object { blob { threshold blob_thold #declare min_size = <0,0,0> ; #declare max_size = <6,12,6> ; #declare point_size = <1,.8,1>; #declare scale_increment = 0; #declare pos_offset = <0, 0, 0> ; #declare point_count = 40; #declare scale_increment = true; #declare rnd_seed = seed(444); point_field() } } #end object { blob_cone_E() scale 1 translate <20,.5,0> material{blob_material} } // --- nested blob cone with cap #macro blob_cone_F () object { intersection { blob { threshold blob_thold #declare min_size = <0,0,0> ; #declare max_size = <6,12,6> ; #declare point_size = <1,.8,1>; #declare scale_increment = 0; #declare pos_offset = <0, 0, 0> ; #declare point_count = 40; #declare scale_increment = true; #declare rnd_seed = seed(444); point_field() // smaller points #declare blob_thold = .5; #declare min_size = <.5,0,.5> ; #declare max_size = <7,13,7> ; #declare point_size = <.7,.9,.7>; #declare scale_increment = false; #declare pos_offset = <0, 0, 0> ; #declare point_count = 200; #declare rnd_seed = seed(66); point_field() // smaller points cap #declare blob_thold = .5; #declare min_size = <.5,0,.5> ; #declare max_size = <8,1,8> ; #declare point_size = <1,.7,1>; #declare scale_increment = true; #declare pos_offset = <1, 12.5, 0> ; #declare point_count = 20; #declare rnd_seed = seed(66); point_field() // big points cap #declare blob_thold = .5; #declare min_size = <.5,0,.5> ; #declare max_size = <6,6,6> ; #declare point_size = <1,.6,1>; #declare scale_increment = true; #declare pos_offset = <1, 13, 0> ; #declare point_count = 30; #declare rnd_seed = seed(66); point_field() } sphere { <0,0,0> 1 rotate y*40 scale <10,20,10> translate <0,0,2> } } } #end object { blob_cone_F() scale y*.8 translate <30,.5,0> material{blob_material} } // --- nested blob cone - #macro blob_cone_G () object { intersection { blob { threshold blob_thold #declare min_size = <0,0,0> ; #declare max_size = <6,12,6> ; #declare point_size = <1,.8,1>; #declare scale_increment = 0; #declare pos_offset = <0, 0, 0> ; #declare point_count = 40; #declare scale_increment = true; #declare rnd_seed = seed(444); point_field() // smaller points #declare blob_thold = .5; #declare min_size = <.5,0,.5> ; #declare max_size = <7,13,7> ; #declare point_size = <.7,.9,.7>; #declare scale_increment = false; #declare pos_offset = <0, 0, 0> ; #declare point_count = 400; #declare rnd_seed = seed(44); point_field() // smaller points cap #declare blob_thold = .5; #declare min_size = <.5,0,.5> ; #declare max_size = <10,3,10> ; #declare point_size = <1,1.5,1>; #declare scale_increment = true; #declare pos_offset = <1, 11, 0> ; #declare point_count = 30; #declare rnd_seed = seed(66); point_field() } sphere { <0,0,0> 1 scale 13.5 translate <0,0,0> } } } #end object { blob_cone_G() scale y*1 rotate y*30 translate <40,.5,0> material{blob_material} } // --- nested blob cone - #macro blob_cone_H () object { intersection { blob { threshold blob_thold #declare min_size = <0,0,0> ; #declare max_size = <6,12,6> ; #declare point_size = <1,.8,1>; #declare scale_increment = 0; #declare pos_offset = <0, 0, 0> ; #declare point_count = 40; #declare scale_increment = true; #declare rnd_seed = seed(444); point_field() // smaller points #declare blob_thold = .5; #declare min_size = <.5,0,.5> ; #declare max_size = <7,13,7> ; #declare point_size = <.7,.9,.7>; #declare scale_increment = false; #declare pos_offset = <0, 0, 0> ; #declare point_count = 400; #declare rnd_seed = seed(55); point_field() // smaller points cap #declare blob_thold = .5; #declare min_size = <.5,0,.5> ; #declare max_size = <10,3,10> ; #declare point_size = <1,1.5,1>; #declare scale_increment = true; #declare pos_offset = <1, 12, 0> ; #declare point_count = 30; #declare rnd_seed = seed(78); point_field() } sphere { <0,0,0> 1 scale 13 translate <0,0,7> } } } #end object { blob_cone_H() scale y*1 rotate y*50 translate <50,.5,0> material{blob_material} } // --- nested blob cone #macro blob_cone_I () object { blob { threshold blob_thold #declare min_size = <0,0,0> ; #declare max_size = <9,12,9> ; #declare point_size = <1,.8,1>; #declare scale_increment = 0; #declare pos_offset = <0, 0, 0> ; #declare point_count = 40; #declare scale_increment = true; #declare rnd_seed = seed(444); point_field() // smaller points #declare blob_thold = .5; #declare min_size = <.5,0,.5> ; #declare max_size = <13,4,11> ; #declare point_size = <.7,1,.7>; #declare scale_increment = false; #declare pos_offset = <0, 10.5, 2> ; #declare point_count = 400; #declare rnd_seed = seed(55); point_field() // smaller points cap #declare blob_thold = .5; #declare min_size = <.5,0,.5> ; #declare max_size = <10,4,10> ; #declare point_size = <1,2,1>; #declare scale_increment = false; #declare pos_offset = <1, 9, 0> ; #declare point_count = 30; #declare rnd_seed = seed(78); point_field() // hand placed cap sphere { <0,0,0>, 1, 1 scale <11,2,14> translate <-2,14,0> } sphere { <0,0,0>, 1, 1 scale <6,3,6> translate <3,15,0> } } } #end #declare blob_cone_topo = object { blob_cone_I() scale y*.8 rotate y*50 translate <65,.5,0> material{blob_material} } blob_cone_topo // --- P L A N T S // --- nested blob plant #macro blob_plant_A () object { blob { threshold blob_thold // plant base sphere { <0,0,0>, 1, 1 scale <2,1.7,2> translate <.5,.2,.5> } sphere { <0,0,0>, 1, 1 scale <1,1.7,1> translate <.5,1,.5> } #declare min_size = <1.5,0,1> ; #declare max_size = <1,8,1> ; #declare point_size = <.7,1,.7>; #declare scale_increment = 0; #declare pos_offset = <0, .5, 0> ; #declare point_count = 10; #declare scale_increment = true; #declare rnd_seed = seed(66); point_field() #declare min_size = <7,0,7> ; #declare max_size = <6,2,6> ; #declare point_size = <2,.8,2>; #declare scale_increment = 0; #declare pos_offset = <1, 10, 1> ; #declare point_count = 15; #declare scale_increment = true; #declare rnd_seed = seed(444); point_field() sphere { <0,0,0>, 1, 1 scale <6,5,6> translate <.5,13,.5> } sphere { <0,0,0>, 1, 1 scale <3,3,3> translate <.5,15,-.6> } } } #end #declare blob_flower = object { blob_plant_A() material{blob_material}} object {blob_flower scale <.6,.6,.6> translate <67,0,-2> } //---re-define flower with different material #declare blob_flower = object { blob_plant_A() material{M_gold_agate scale 5}} //_________________________________________________________________________________________________ //--- macro scatter topo - requires pre declared vars #macro scatter_topo() #declare plant_current = 0 ; #while (plant_current < plant_count) #declare new_pos = ; #declare ray_pos = field_pos + new_pos ; #declare ray = trace(topo, ray_pos, -y, Norm); #if (Norm.gray!=0 & vdot(Norm, y)>maxSlope) #declare new_pos = ; #declare new_scale = plant_scale + plant_scale/4*(rand(plant_seed)) ; object { plant_obj scale new_scale rotate<0,360*rand(plant_seed),0> Reorient_Trans(y, Norm) translate ray + plant_offset #if (cast_shadow = false) no_shadow #end } #declare plant_current = plant_current + 1; #end #end #end #macro make_blob_field () #declare blob_current = 0; #declare blob_shift_x = field_width/2; #declare blob_shift_z = field_depth/2; #while (blob_current, 1, 1 scale blob_size translate } //#debug concat(str(blob_current,1,3),"= <", str(nx,1,3), "," , str(ny,1,3), "," , str(nz,1,3), "> " "\n") #end #end //--- vars for topo projection #declare run_scatter = true ; #declare field_size = 200 ; #declare field_pos = <-100,0,-100> ; #declare count_factor = 1 ; #declare plant_scale = <.05,.04,.05> ; #declare plant_offset = <0,-.2,0>; #declare cast_shadow = true; #declare maxSlope = .30 ; #declare topo = blob_cone_topo ; #declare plant_obj = blob_flower; #declare plant_count = 500 * count_factor ; #declare plant_current = 0 ; #declare plant_seed=seed(22) ; #declare start_hieght = 20; // start pos of ray cast (usually -y in direction) #if (run_scatter=true) scatter_topo() #end #declare field_size = 200 ; #declare field_pos = <-100,0,-100> ; #declare count_factor = 1 ; #declare plant_scale = <.15,.17,.15> ; #declare plant_offset = <0,-.8,0>; #declare cast_shadow = true; #declare maxSlope = .30 ; #declare topo = blob_cone_topo ; #declare plant_obj = blob_flower; #declare plant_count = 10 * count_factor ; #declare plant_current = 0 ; #declare plant_seed=seed(22) ; #declare start_hieght = 20; // start pos of ray cast (usually -y in direction) #if (run_scatter=true) scatter_topo() #end