pyRender离线渲染的一些问题

记录一下使用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

https://stackoverflow.com/questions/60922076/pyglet-canvas-xlib-nosuchdisplayexception-cannot-connect-to-none-only-happens

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,

======

发表评论