Calculates Ambient Occlusion Shadow Map

ambient_shade(
  heightmap,
  anglebreaks = 90 * cospi(seq(5, 85, by = 5)/180),
  sunbreaks = 24,
  maxsearch = 30,
  multicore = FALSE,
  zscale = 1,
  cache_mask = NULL,
  shadow_cache = NULL,
  progbar = interactive(),
  ...
)

Arguments

heightmap

A two-dimensional matrix, where each entry in the matrix is the elevation at that point. All points are assumed to be evenly spaced.

anglebreaks

Default 90*cospi(seq(5, 85,by =5)/180). The angle(s), in degrees, as measured from the horizon from which the light originates.

sunbreaks

Default 24. Number of rays to be sent out in a circle, evenly spaced, around the point being tested.

maxsearch

Default 30. The maximum horizontal distance that the system should propogate rays to check for surface intersections.

multicore

Default FALSE. If TRUE, multiple cores will be used to compute the shadow matrix. By default, this uses all cores available, unless the user has set options("cores") in which the multicore option will only use that many cores.

zscale

Default 1. The ratio between the x and y spacing (which are assumed to be equal) and the z axis.

cache_mask

Default NULL. A matrix of 1 and 0s, indicating which points on which the raytracer will operate.

shadow_cache

Default NULL. The shadow matrix to be updated at the points defined by the argument cache_mask.

progbar

Default TRUE if interactive, FALSE otherwise. If FALSE, turns off progress bar.

...

Additional arguments to pass to the makeCluster function when multicore=TRUE.

Value

Shaded texture map.

Examples

#Here we produce a ambient occlusion map of the `montereybay` elevation map.
if(run_documentation()) {
plot_map(ambient_shade(heightmap = montereybay))
}


#We can increase the distance to look for surface intersections `maxsearch`
#and the density of rays sent out around the point `sunbreaks`.
if(run_documentation()) {
plot_map(ambient_shade(montereybay, sunbreaks = 24,maxsearch = 100, multicore=TRUE))
}

#Create the Red Relief Image Map (RRIM) technique using a custom texture and ambient_shade(),
#with an addition lambertian layer added with lamb_shade() to improve topographic clarity.
if(run_documentation()) {
bigmb = resize_matrix(montereybay, scale=2, method="cubic")
bigmb %>%
 sphere_shade(zscale=3, texture = create_texture("red","red","red","red","white")) %>%
 add_shadow(ambient_shade(bigmb, maxsearch = 100, multicore = TRUE,zscale=1),0) %>%
 add_shadow(lamb_shade(bigmb),0.5) %>%
 plot_map()
}