isl-org / isl-org/Open3D

How to speed-up rendering?

Open
#4,737 4 comments 0 reactions 0 assignees View on GitHub
headless io question visualization
Dominant language
C++
Stars
14k
Forks
2.6k
Avg merge
5d 18h
Merged PRs (30d)
6

Description

### Checklist

- [X] I have searched for [similar issues](https://github.com/isl-org/Open3D/issues).
- [X] For Python issues, I have tested with the [latest development wheel](http://www.open3d.org/docs/latest/getting_started.html#development-version-pip).
- [X] I have checked the [release documentation](http://www.open3d.org/docs/release/) and the [latest documentation](http://www.open3d.org/docs/latest/) (for `master` branch).

### My Question

I am trying rendering Triangle Mesh object to image with o3d.visualization.rendering.OffscreenRenderer(640, 480)

But 10Hz is maximum frequency for my system (Jetson TX2).

Start code:
```
msg_in = self.color_sub.message

self.fx = msg_in.proto.pinhole.focal.x
self.fy = msg_in.proto.pinhole.focal.y
self.cx = msg_in.proto.pinhole.center.x
self.cy = msg_in.proto.pinhole.center.y

self.height = msg_in.proto.pinhole.rows
self.width = msg_in.proto.pinhole.cols

self.channels = msg_in.proto.image.channels

intr_matrix = np.asarray([self.fx, 0, self.cx,
0, self.fy, self.cy,
0, 0, 1 ], dtype=np.float64)
intr_matrix = intr_matrix.reshape(3,3)
self.render = o3d.visualization.rendering.OffscreenRenderer(self.width, self.height, headless=False)
self.render.scene.show_axes(False)
# Pick a background colour (default is light gray)
self.render.scene.set_background([0, 0, 0, 1.0]) # RGBA
self.render.scene.set_lighting(self.render.scene.LightingProfile.NO_SHADOWS, (0, 5, 0))

extrinsics = np.eye(4,4)
#extrinsics[0:3,0:3] = o3d.geometry.TriangleMesh.get_rotation_matrix_from_xyz((0, 0, 0))
#extrinsics[3,0:3] = (0,0,0)
self.render.setup_camera(intr_matrix, extrinsics, self.width, self.height)

```

In loop for each input image (AR tags detections):

```
self.render.scene.clear_geometry()

fds_msg = self.fiducials_sub.message
for fd in fds_msg.proto.fiducialList:
if fd.id and fd.id in self.objects.keys() and fd.cameraTTag:
quaternion = np.asarray([
fd.cameraTTag.rotation.q.w,
fd.cameraTTag.rotation.q.x,
fd.cameraTTag.rotation.q.y,
fd.cameraTTag.rotation.q.z
])
R = o3d.geometry.TriangleMesh.get_rotation_matrix_from_quaternion(quaternion)

P = np.asarray([
fd.cameraTTag.translation.x,
fd.cameraTTag.translation.y,
fd.cameraTTag.translation.z
])

self.objects[fd.id].obj.rotate(R @ np.linalg.inv(self.objects[fd.id].R))
self.objects[fd.id].R = R
self.objects[fd.id].obj.translate(P, relative=False)

self.render.scene.add_geometry(self.objects[fd.id].name, self.objects[fd.id].obj, self.objects[fd.id].material)

t1 = time()
img = self.render.render_to_image()
t2 = time()
```

Where ` (t2 - t1)` ~ 0.1 sec

How to speedup rendering ?

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.