raymesh_model {rayrender}R Documentation

'raymesh' model

Description

Load an 'raymesh' object, as specified in the 'rayvertex' package.

Usage

raymesh_model(
  mesh,
  x = 0,
  y = 0,
  z = 0,
  flip_transmittance = TRUE,
  verbose = FALSE,
  importance_sample_lights = FALSE,
  calculate_consistent_normals = TRUE,
  subdivision_levels = 1,
  displacement_texture = NA,
  displacement_intensity = 1,
  displacement_vector = FALSE,
  recalculate_normals = FALSE,
  override_material = TRUE,
  material = diffuse(),
  angle = c(0, 0, 0),
  order_rotation = c(1, 2, 3),
  flipped = FALSE,
  scale = c(1, 1, 1),
  validate_mesh = TRUE
)

Arguments

mesh

A 'raymesh' object. Pulls the vertex, index, texture coordinates, normals, and material information.

x

Default '0'. x-coordinate to offset the model.

y

Default '0'. y-coordinate to offset the model.

z

Default '0'. z-coordinate to offset the model.

flip_transmittance

Default 'TRUE'. Flips '(1-t)' the transmittance values to match the way the colors would be interpreted in a rasterizer (where it specifies the transmitted color). Turn off to specify the attenuation values directly.

verbose

Default 'FALSE'. If 'TRUE', prints information about the mesh to the console.

importance_sample_lights

Default 'TRUE'. Whether to importance sample lights specified in the OBJ material (objects with a non-zero Ke MTL material).

calculate_consistent_normals

Default 'TRUE'. Whether to calculate consistent vertex normals to prevent energy loss at edges.

subdivision_levels

Default '1'. Number of Loop subdivisions to be applied to the mesh.

displacement_texture

Default 'NA'. File path to the displacement texture. This texture is used to displace the vertices of the mesh based on the texture's pixel values.

displacement_intensity

Default '1'. Intensity of the displacement effect. Higher values result in greater displacement.

displacement_vector

Default 'FALSE'. Whether to use vector displacement. If 'TRUE', the displacement texture is interpreted as providing a 3D displacement vector. Otherwise, the texture is interpreted as providing a scalar displacement.

recalculate_normals

Default 'FALSE'. Whether to recalculate vertex normals based on the connecting face orientations. This can be used to compute normals for meshes lacking them or to calculate new normals after a displacement map has been applied to the mesh.

override_material

Default 'TRUE'. If 'TRUE', overrides the material specified in the 'raymesh' object with the one specified in 'material'.

material

Default diffuse, but ignored unless 'override_material = TRUE'. The material, called from one of the material functions diffuse, metal, or dielectric.

angle

Default 'c(0, 0, 0)'. Angle of rotation around the x, y, and z axes, applied in the order specified in 'order_rotation'.

order_rotation

Default 'c(1, 2, 3)'. The order to apply the rotations, referring to "x", "y", and "z".

flipped

Default 'FALSE'. Whether to flip the normals.

scale

Default 'c(1, 1, 1)'. Scale transformation in the x, y, and z directions. If this is a single value, number, the object will be scaled uniformly. Note: emissive objects may not currently function correctly when scaled.

validate_mesh

Default 'TRUE'. Validates the 'raymesh' object using 'rayvertex::validate_mesh()' before parsing to ensure correct parsing. Set to 'FALSE' to speed up scene construction if 'raymesh_model()' is taking a long time (Note: this does not affect rendering time).

Value

Single row of a tibble describing the raymesh model in the scene.

Examples

#Render a simple raymesh object
library(rayvertex)
if(run_documentation()) {
raymesh_model(sphere_mesh(position = c(-1, 0, 0),
              material = material_list(transmittance = "red"))) %>%
  add_object(generate_ground(material = diffuse(checkercolor="grey20"))) %>%
  render_scene(fov = 30, samples=128, sample_method="sobol_blue")
}

# We create a complex rayvertex mesh, using the `rayvertex::add_shape` function which
# creates a new `raymesh` object out of individual `raymesh` objects
rm_scene = sphere_mesh(position = c(-1, 0, 0),
            material = material_list(transmittance = "red")) %>% 
    add_shape(sphere_mesh(position = c(1, 0, 0),
            material = material_list(transmittance = "green", ior = 1.5)))

# Pass the single raymesh object to `raymesh_model()`
# `raymesh_model()`
if(run_documentation()) {
raymesh_model(rm_scene) %>%
  add_object(generate_ground(material = diffuse(checkercolor="grey20"))) %>%
  render_scene(fov = 30, samples=128, sample_method="sobol_blue")
}

# Set `flip_transmittance = FALSE` argument to specify attenuation coefficients directly
# (as specified in the `dielectric()` material). We change the material's numerical attenuation
# constants using `rayvertex::change_material`
rm_scene_new= change_material(rm_scene, transmittance = c(1,2,0.3), id = 1) %>% 
  change_material(transmittance = c(3,1,2), id = 2)
if(run_documentation()) {
raymesh_model(rm_scene_new, flip_transmittance = FALSE) %>%
  add_object(generate_ground(material = diffuse(checkercolor="grey20"))) %>%
  render_scene(fov = 30, samples=128, sample_method="sobol_blue")
}

# Override the material specified in the `raymesh` object and render the scene
if(run_documentation()) {
raymesh_model(rm_scene,
              material = dielectric(attenuation = "dodgerblue2", attenuation_intensity = 4), 
  override_material = TRUE) %>%
  add_object(generate_ground(material = diffuse(checkercolor="grey20"))) %>%
  render_scene(fov = 30, samples=128, sample_method="sobol_blue")
}

# Adjusting the scale, position, and rotation parameters of the `raymesh` model
if(run_documentation()) {
raymesh_model(rm_scene,
              x = 0, y = 0.5, z = -1, angle = c(0, 0, 20)) %>%
  add_object(generate_ground(material = diffuse(checkercolor="grey20"))) %>%
  render_scene(fov = 30,lookat=c(0,0.5,0), samples=128, sample_method="sobol_blue")
}

[Package rayrender version 0.34.2 Index]