Skip to content

CPU(软件)渲染

Open3D 的新版可视化功能(O3DVisualizer 类、draw() 函数以及 open3d.visualization.gui 和 open3d.visualization.rendering 模块)需要一块支持 OpenGL 4.1 或更高版本的较新 GPU。在某些情况下,这一条件无法满足:

  • GPU 太旧,不支持 OpenGL 4.1。
  • 没有 GPU 可用,例如在未安装任何 GPU(集显或独显)的云服务器上,或者在没有主机 GPU 访问权限的 docker 容器中。许多基于云的 Jupyter notebook(如 Google Colab、Kaggle 等)都属于这种情况。
  • 有 GPU,但它只支持计算,不支持图形渲染。这是部署在 docker 容器中的基于云的 Jupyter notebook 常见的一种场景。

在这些情况下,Open3D 支持 CPU 或软件渲染。请注意,这种方式通常渲染更慢、响应更迟钝,因此仍然推荐使用 GPU。目前,该功能仅适用于 Linux。根据需要的是交互式渲染还是无头渲染,有两种不同的方式来使用 CPU 渲染。下面分别介绍这两种方法。

对于 Python 代码,在使用 OffscreenRenderer 进行无头渲染时,可以通过在导入 Open3D 之前设置环境变量来为整个进程启用 CPU 渲染:

  • EGL_PLATFORM=surfaceless(适用于 Ubuntu 20.04+,即 Mesa v20.2 或更高版本)

设置该环境变量有以下几种方式:

Terminal window
# from the command line (Ubuntu 20.04+)
EGL_PLATFORM=surfaceless python examples/python/visualization/render_to_image.py
# In Python code
import os
os.environ['EGL_PLATFORM'] = 'surfaceless' # Ubuntu 20.04+
import open3d as o3d
# In a Jupyter notebook
%env EGL_PLATFORM surfaceless # Ubuntu 20.04+
import open3d as o3d

启用交互式 CPU 渲染的方法取决于你的系统配置:

  • 你使用的是 Mesa 驱动 v20.2 或更高版本。所有 Intel GPU 以及部分 AMD、Nvidia GPU 都属于这种情况。你应当运行较新的 Linux 系统,例如 Ubuntu 20.04。可以通过包管理器查看 Mesa 版本(例如在 Debian 或 Ubuntu 上运行 dpkg -s libglx-mesa0 | grep Version)。在这种情况下,只需在启动应用程序之前设置一个环境变量即可切换到 CPU 渲染。例如,以 CPU 渲染模式启动 Open3D 可视化应用:
Terminal window
LIBGL_ALWAYS_SOFTWARE=true Open3D

或者对于 Python 代码:

Terminal window
LIBGL_ALWAYS_SOFTWARE=true python examples/python/visualization/draw.py
  • 你使用的是 Nvidia 或 AMD 驱动,但操作系统自带较新的 Mesa 驱动(>= v20.2)。如果系统中尚未安装 Mesa 驱动,请先安装(例如在 Ubuntu 上执行 sudo apt install libglx0-mesa)。在运行任何需要 CPU 渲染的 Open3D 应用之前,预先加载 Mesa 驱动库。例如:
Terminal window
export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libGLX_mesa.so.0
Open3D

或者对于 Python 代码:

Terminal window
export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libGLX_mesa.so.0
python examples/python/visualization/draw.py