|
![](/i/fill.gif) |
This probably can't be done, but I want to be sure. Is there a way to assign
some kind of color_map to an object so that the actual color depends on the
vector of the surface normal? For example, if I were using a mountain
surface and I wanted realistic snow fields on it, it would be useful to be
able to have the parts with surface normals pointing mostly up to be
colored white, and parts with the up part of the vector ~ 0 to be colored a
stone-like shade, since snow would mostly collect in the ravines and not on
the sides of the cliffs.
-Justin Smith
Post a reply to this message
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
"Tom Melly" <tom### [at] tomandlu co uk> wrote in message
news:3da54db2$1@news.povray.org...
<snip>
Here's a more complex (but not entirely succesful) example:
#version 3.5;
#include "colors.inc"
#include "functions.inc"
global_settings {
ambient_light 0
assumed_gamma 1.0
radiosity {
pretrace_start 0.08 // start pretrace at this size
pretrace_end 0.04 // end pretrace at this size
count 35 // higher -> higher quality (1..1600) [35]
nearest_count 5 // higher -> higher quality (1..10) [5]
error_bound 1.8 // higher -> smoother, less accurate [1.8]
recursion_limit 3 // how much interreflections are calculated
(1..5+) [3]
low_error_factor .5 // reduce error_bound during last pretrace
step
gray_threshold 0.8 // increase for weakening colors (0..1) [0]
minimum_reuse 0.015 // reuse of old radiosity samples [0.015]
brightness 1 // brightness of radiosity effects (0..1) [1]
adc_bailout 0.01/2
}
}
// ----------------------------------------
camera {
location <0.0, 5, -10.0>
look_at <0.0, 0.0, 0.0>
}
sky_sphere {
pigment {
wrinkles
color_map {
[0.0 rgb <0.6,0.7,1.0>]
[0.7 rgb <0.0,0.1,0.8>]
}
}
}
light_source {
<0, 0, 0> // light's position (translated below)
color rgb <1, 1, 1> // light's color
translate <-30, 30, -30>
}
// ----------------------------------------
#declare BaseRockTex =
texture{
pigment{granite scale 0.25 pigment_map{[0.0 Black][0.5 Gray10][1.0 Gray50]}}
finish{ambient 0 diffuse 0.8}
normal{
average
normal_map{
[dents 15 scale 1 ]
[granite 15 scale 1 turbulence 0.25]
[marble 15 scale 1 turbulence 0.5]
[crackle 15 scale 1 turbulence 0.5]
}
}
}
#declare SnowTex =
texture{
pigment{rgb <0.5,0.5,1>} //<0.9,0.9,1.9>}
finish{ambient 0.10 diffuse 0.85}
normal{
average 2
normal_map{
[dents 2 scale 1/25]
[bozo 1 scale 4 turbulence 0.75]
}
}
}
#declare RockTex =
texture{
marble rotate z*90 scale 10 turbulence 0.5
texture_map{
[0.9 BaseRockTex scale 0.01]
[0.9 bozo scale 10 texture_map{[0.5 BaseRockTex][0.5 SnowTex]}]
}
}
#declare MountTex =
texture{
slope y
texture_map{
[0.60 RockTex] // BaseRockTex scale 0.01] //[0.64 RockTex]
[0.62 SnowTex]
}
}
#declare MountMFFunc = function(x,y,z){f_ridged_mf(x,y,z, 0.9, 5, 10, 0.75, 5,
0)}
#declare MountFunc = function(x,y,z){y + MountMFFunc(x,0,z)*2}
#declare Mount =
isosurface{
function{MountFunc(x,y,z)}
contained_by{box{<-15,-5,-15>,<15,5,15>}}
accuracy 0.001
max_gradient 10 // 1 for ng
//scale 100
texture{MountTex}
scale 10
}
object{Mount}
Post a reply to this message
|
![](/i/fill.gif) |