This function generates a tree model and transforms it into a ray_mesh
object or an OBJ file.
The tree model consists of two main parts: the crown (leafy part) and the trunk. Both parts can be customized according
to a range of preset types, as well as full control over the tree's colors and dimensions.
The tree model can be positioned, scaled, and rotated in 3D space.
Usage
tree_mesh(
crown_type = "oval",
position = c(0, 0, 0),
angle = 0,
solid = FALSE,
resolution = "medium",
filename = NULL,
tree_height = 1,
trunk_height_ratio = NULL,
crown_width_ratio = 1,
crown_height = NULL,
crown_width = NULL,
trunk_height = NULL,
trunk_width = NULL,
crown_color = NA,
trunk_color = "#8C6F5B",
diffuse_intensity = 1,
ambient_intensity = 0.2
)
Arguments
- crown_type
Default
"oval"
. Crown type (the leafy part of the tree). Full list of options:3D/Flat Name Crown Color Trunk Ratio Both "columnar"
"#A2C683"
1/3 Both "pyramidal1"
"#066038"
1/6 Both "pyramidal2"
"#447765"
1/6 Both "weeping"
"#CBD362"
1/3 Both "spreading1"
"#CCB471"
1/3 Both "oval"
"#7CB262"
1/3 Flat-only "palm"
"#DB8952"
1/2 Flat-only "rounded"
"#E0A854"
1/3 Flat-only "spreading2"
"#75C165"
1/3 Flat-only "vase"
"#AECCB1"
1/3 - position
Default
c(0,0,0)
. A length-3 numeric vector specifying the X, Y, and Z coordinates of the tree mesh in 3D space.- angle
Default
0
. Amount of rotation around the y-axis for the tree.- solid
Default
FALSE
. Whether the crown should be a solid mesh (TRUE
), or a collection of flat 2D planes (FALSE
).- resolution
Default
"medium"
. String indicating the level of detail of the tree mesh. All options:"low"
"medium"
"high
- filename
Default
NULL
. File name of the OBJ file, if saving the mesh to a local file.- tree_height
Default
1
. A numeric value setting the total height of the tree.- trunk_height_ratio
Default
NULL
. A numeric value specifying the ratio of the trunk height to the total height of the tree. If not provided, default values for each tree type will be used.- crown_width_ratio
Default
1
. A numeric value specifying the ratio of the crown width to the crown height.- crown_height
Default
NULL
. A numeric value setting the height of the crown. If not provided, it is calculated based on the tree height and trunk height ratio.- crown_width
Default
NULL
. A numeric value setting the diameter of the crown. If not provided, it is calculated based on the crown height and crown width ratio.- trunk_height
Default
NULL
. A numeric value setting the height of the trunk. If not provided, it is calculated based on the tree height and trunk height ratio.- trunk_width
Default
NULL
. A numeric value setting the diameter of the trunk. If not provided, this is set to 1/10th the crown width.- crown_color
Default
NA
, use default for crown type. A string specifying the hex code of the crown color.- trunk_color
Default
"#8C6F5B"
. A string specifying the hex code of the trunk color.- diffuse_intensity
Default
1.0
. A numeric value controlling the amount of diffuse (shaded) color included in the model.- ambient_intensity
Default
0.2
. A numeric value controlling the amount of ambient (constant) color included in the model.
Examples
#Load a tree and render it
library(rayvertex)
render_tree_example = function(example_tree_mesh) {
example_tree_mesh |>
add_shape(xz_rect_mesh(c(0,0,-9),
material = material_list(diffuse="tan",
ambient = "grey", diffuse_intensity = 0.7,
ambient_intensity = 0.6),
scale=25)) |>
rasterize_scene(lookat=c(0,0.5,0),
light_info = directional_light(c(0.3,1,1), intensity = 0.7),
lookfrom=c(0,3,10),
fov=8,
shadow_map_dims = 2, shadow_map_bias = 0.0005,
width = 800, height = 800,
#fsaa = 4, ssao = TRUE, ssao_intensity = 1,
background = "lightblue")
}
if(run_documentation()) {
#Render a basic 3D crown
tree_mesh("columnar",
solid = TRUE,
ambient_intensity = 0.3) |>
render_tree_example()
}
if(run_documentation()) {
#Render the 2D planar version
tree_mesh("columnar",
solid = FALSE,
ambient_intensity = 0.3) |>
render_tree_example()
}
if(run_documentation()) {
#Adjust the trunk/crown proportions of the overall tree using ratios
tree_mesh("columnar",
tree_height = 1,
trunk_height_ratio = 1/5,
crown_width_ratio = 1.25,
trunk_width = 0.125,
solid = TRUE,
ambient_intensity = 0.3) |>
render_tree_example()
}
if(run_documentation()) {
#The crown width is set proportional to the crown height (not the overall tree)
tree_mesh("columnar",
tree_height = 1,
trunk_height_ratio = 2/3,
crown_width_ratio = 1,
trunk_width = 0.075,
solid = TRUE,
ambient_intensity = 0.3) |>
render_tree_example()
}
if(run_documentation()) {
#Set the trunk and crown dimensions directly
tree_mesh("columnar",
trunk_height = 0.25,
trunk_width = 0.05,
crown_height = 0.75,
crown_width = 0.33,
solid = TRUE,
ambient_intensity = 0.3) |>
render_tree_example()
}
if(run_documentation()) {
#Change the crown and trunk color
tree_mesh("columnar",
solid = TRUE,
crown_color = "orange",
trunk_color = "tan",
ambient_intensity = 0.3) |>
render_tree_example()
}
if(run_documentation()) {
#Render different tree types, both 2D and 3D versions
tree_mesh("columnar",
solid = TRUE,
ambient_intensity = 0.3) |>
render_tree_example()
}
if(run_documentation()) {
tree_mesh("columnar",
solid = FALSE,
ambient_intensity = 0.3) |>
render_tree_example()
}
if(run_documentation()) {
tree_mesh("pyramidal1",
solid = TRUE,
ambient_intensity = 0.3) |>
render_tree_example()
}
if(run_documentation()) {
tree_mesh("pyramidal1",
solid = FALSE,
ambient_intensity = 0.3) |>
render_tree_example()
}
if(run_documentation()) {
tree_mesh("pyramidal2",
solid = TRUE,
ambient_intensity = 0.3) |>
render_tree_example()
}
if(run_documentation()) {
tree_mesh("pyramidal2",
solid = FALSE,
ambient_intensity = 0.3) |>
render_tree_example()
}
if(run_documentation()) {
tree_mesh("weeping",
solid = TRUE,
ambient_intensity = 0.3) |>
render_tree_example()
}
if(run_documentation()) {
tree_mesh("weeping",
solid = FALSE,
ambient_intensity = 0.3) |>
render_tree_example()
}
if(run_documentation()) {
tree_mesh("spreading1",
solid = TRUE,
ambient_intensity = 0.3) |>
render_tree_example()
}
if(run_documentation()) {
tree_mesh("spreading1",
solid = FALSE,
ambient_intensity = 0.3) |>
render_tree_example()
}
if(run_documentation()) {
tree_mesh("oval",
solid = TRUE,
ambient_intensity = 0.3) |>
render_tree_example()
}
if(run_documentation()) {
tree_mesh("oval",
solid = FALSE,
ambient_intensity = 0.3) |>
render_tree_example()
}
if(run_documentation()) {
tree_mesh("palm",
solid = FALSE,
ambient_intensity = 0.3) |>
render_tree_example()
}
if(run_documentation()) {
tree_mesh("rounded",
solid = FALSE,
ambient_intensity = 0.3) |>
render_tree_example()
}
if(run_documentation()) {
tree_mesh("spreading2",
solid = FALSE,
ambient_intensity = 0.3) |>
render_tree_example()
}
if(run_documentation()) {
tree_mesh("vase",
solid = FALSE,
ambient_intensity = 0.3) |>
render_tree_example()
}