MeshRenderer

MeshRenderer

class gibson2.core.render.mesh_renderer.mesh_renderer_cpu.MeshRenderer(width=512, height=512, vertical_fov=90, device_idx=0, use_fisheye=False, msaa=False)

MeshRenderer is a lightweight OpenGL renderer. It manages a set of visual objects, and instances of those objects. It also manage a device to create OpenGL context on, and create buffers to store rendering results.

__init__(width=512, height=512, vertical_fov=90, device_idx=0, use_fisheye=False, msaa=False)
Parameters
  • width – width of the renderer output

  • height – width of the renderer output

  • vertical_fov – vertical field of view for the renderer

  • device_idx – which GPU to run the renderer on

  • use_fisheye – use fisheye shader or not

setup_framebuffer()

Set up RGB, surface normal, depth and segmentation framebuffers for the renderer

load_object(obj_path, scale=array([1, 1, 1]), transform_orn=None, transform_pos=None, input_kd=None, texture_scale=1.0, load_texture=True)

Load a wavefront obj file into the renderer and create a VisualObject to manage it.

Parameters
  • obj_path – path of obj file

  • scale – scale, default 1

  • transform_orn – rotation quaternion, convention xyzw

  • transform_pos – translation for loading, it is a list of length 3

  • input_kd – if loading material fails, use this default material. input_kd should be a list of length 3

  • texture_scale – texture scale for the object, downsample to save memory.

  • load_texture – load texture or not

Returns

VAO_ids

add_instance(object_id, pybullet_uuid=None, class_id=0, pose_rot=array([[1., 0., 0., 0.], [0., 1., 0., 0.], [0., 0., 1., 0.], [0., 0., 0., 1.]]), pose_trans=array([[1., 0., 0., 0.], [0., 1., 0., 0.], [0., 0., 1., 0.], [0., 0., 0., 1.]]), dynamic=False, softbody=False)

Create instance for a visual object and link it to pybullet

add_instance_group(object_ids, link_ids, poses_rot, poses_trans, class_id=0, pybullet_uuid=None, dynamic=False, robot=None)

Create an instance group for a list of visual objects and link it to pybullet

add_robot(object_ids, link_ids, class_id, poses_rot, poses_trans, pybullet_uuid=None, dynamic=False, robot=None)

Create an instance group (a robot) for a list of visual objects and link it to pybullet

set_camera(camera, target, up)
set_fov(fov)
get_intrinsics()
readbuffer(modes=('rgb', 'normal', 'seg', '3d'))

Read framebuffer of rendering.

Parameters

modes – it should be a tuple consisting of a subset of (‘rgb’, ‘normal’, ‘seg’, ‘3d’).

Returns

a list of numpy arrays corresponding to modes

render(modes=('rgb', 'normal', 'seg', '3d'), hidden=())

A function to render all the instances in the renderer and read the output from framebuffer.

Parameters
  • modes – it should be a tuple consisting of a subset of (‘rgb’, ‘normal’, ‘seg’, ‘3d’).

  • hidden – Hidden instances to skip. When rendering from a robot’s perspective, it’s own body can be hidden

Returns

a list of float32 numpy arrays of shape (H, W, 4) corresponding to modes, where last channel is alpha

clean()

Clean all the framebuffers, objects and instances

release()

Clean everything, and release the openGL context.

MeshRendererG2G

class gibson2.core.render.mesh_renderer.mesh_renderer_tensor.MeshRendererG2G(width=512, height=512, vertical_fov=90, device_idx=0, use_fisheye=False, msaa=False)

Similar to MeshRenderer, but allows rendering to pytorch tensor, note that pytorch installation is required.

__init__(width=512, height=512, vertical_fov=90, device_idx=0, use_fisheye=False, msaa=False)
Parameters
  • width – width of the renderer output

  • height – width of the renderer output

  • vertical_fov – vertical field of view for the renderer

  • device_idx – which GPU to run the renderer on

  • use_fisheye – use fisheye shader or not

render(modes=('rgb', 'normal', 'seg', '3d'), hidden=())

A function to render all the instances in the renderer and read the output from framebuffer into pytorch tensor.

Parameters
  • modes – it should be a tuple consisting of a subset of (‘rgb’, ‘normal’, ‘seg’, ‘3d’).

  • hidden – Hidden instances to skip. When rendering from a robot’s perspective, it’s own body can be hidden

VisualObject

class gibson2.core.render.mesh_renderer.mesh_renderer_cpu.VisualObject(filename, VAO_ids, id, renderer)

A visual object manages a set of VAOs and textures, one wavefront obj file loads into openGL, and managed by a VisualObject

__init__(filename, VAO_ids, id, renderer)
Parameters
  • filename – filename of the obj file

  • VAO_ids – VAO_ids in OpenGL

  • id – renderer maintains a list of visual objects, id is the handle of a visual object

  • renderer – pointer to the renderer

InstanceGroup

class gibson2.core.render.mesh_renderer.mesh_renderer_cpu.InstanceGroup(objects, id, link_ids, pybullet_uuid, class_id, poses_trans, poses_rot, dynamic, robot=None)

InstanceGroup is a set of visual objects, it is grouped together because they are kinematically connected. Robots and articulated objects are represented as instance groups.

__init__(objects, id, link_ids, pybullet_uuid, class_id, poses_trans, poses_rot, dynamic, robot=None)
Parameters
  • objects – visual objects

  • id – id this instance_group

  • link_ids – link_ids in pybullet

  • pybullet_uuid – body id in pybullet

  • class_id – class_id to render semantics

  • poses_trans – initial translations for each visual object

  • poses_rot – initial rotation matrix for each visual object

  • dynamic – is the instance group dynamic or not

  • robot – The robot associated with this InstanceGroup

render()

Render this instance group

Instance

class gibson2.core.render.mesh_renderer.mesh_renderer_cpu.Instance(object, id, class_id, pybullet_uuid, pose_trans, pose_rot, dynamic, softbody)

Instance is one instance of a visual object. One visual object can have multiple instances to save memory.

__init__(object, id, class_id, pybullet_uuid, pose_trans, pose_rot, dynamic, softbody)

Initialize self. See help(type(self)) for accurate signature.

render()

Render this instance