记录一下使用pyRender在没有显示器的服务器端做场景渲染时遇到的一些报错和解决。
写在前面,pyrender真是个大坑,渲染还很慢, realrender用cpu渲染也很快,问题没这么多,如果还没有绑定pyrender可以早些转投realreader,调试时候也需要灵活些,发现egl后端问题解不了,可以先用osmega后端,两个可以切换着来。
1. pyrender.OffscreenRenderer pyglet.canvas.xlib.NoSuchDisplayException
这个错误的原因是没有设置显示后端,我们需要通过修改环境变量修改显示后端,我们添加后端即可,一般我们使用egl后端
使用osmesa后端或者egl后端:
PYOPENGL_PLATFORM=osmesa
or at the top of your Python script:
import os
os.environ['PYOPENGL_PLATFORM'] = 'egl'
#os.environ['PYOPENGL_PLATFORM'] = 'osmesa'
#os.environ["MUJOCO_GL"]='osmesa'
如果egl后端或者osmesa后端未安装,需要进行安装,参见下一个问题参考链接
参考链接:
https://pyrender.readthedocs.io/en/latest/examples/offscreen.html#choosing-a-backend
2. Unable to load EGL
apt install libegl1-mesa libglfw3-dev libgles2-mesa-dev
EGL安装 https://www.volcengine.com/theme/1993407-U-7-1
如果使用osmesa后端,提示没有osmesa,则安装osmesa
apt install -y libosmesa6
3. GLError.eglInitialize Failed
报错全文如下
OpenGL.error.GLError: GLError(
err = 12289,
baseOperation = eglInitialize,
cArguments = (
,
c_long(0),
c_long(0),
),
result = 0
)
文末的参考链接给了两种解决方式,一种是更新nvidia显卡驱动,另一种是设置环境变量我们添加如下环境便来给你
export EGL_DEVICE_ID=1
参考链接:
https://github.com/mkocabas/VIBE/issues/47
4. ImportError: Library “GLU” not found.
需要安装python-opengl
在ubuntu20以下,使用 apt install python-opengl安装
在ubuntu20以上,使用 apt install python3-opengl安装
5. pyglet.gl.ContextException: Could not create GL context
import os
os.environ['PYOPENGL_PLATFORM'] = 'egl'
参考链接:https://github.com/huggingface/deep-rl-class/issues/275
6. cannot import name ‘OSMesaCreateContextAttribs’ from ‘OpenGL.osmesa’
更新pyopengl到3.1.4即可忽略对pyrender对opengl版本要求
pip install –upgrade pyopengl==3.1.4,
======