3

我正在使用 Maya 2012,我想做的是渲染相机视图。我发现可以使用 MEL 命令“render”(通过 python 调用它)来执行此操作。但是,据我所知,此命令会渲染图像并将其保存到磁盘,同时仅返回保存图像的路径。

例子:

import maya.cmds as cmds
import cv2 as cv

pathToFile = cmds.render()
renderImage = cv.imread(pathToFile)

由于我对使用图像执行各种计算机视觉算法感兴趣,将其保存到磁盘然后从磁盘读取它会产生不必要的计算开销。

是否可以渲染相机并将图像存储在变量中而无需这样做?这将允许在渲染和分析渲染图像之间更快地循环。


万一将来有人遇到这个问题:不幸的是,我尝试了建议的 ram 磁盘方法(使用 dataram RAMDisk),但它没有产生任何速度提升。

4

1 回答 1

1

如果您正在寻找效率,您可以考虑使用这些OpenMaya包来访问视图的 OpenGL 上下文并将 Viewport 2.0 视图渲染为纹理。然后以编程方式访问该纹理。

或者,您可以编写一个插件来包装另一个渲染插件,如 Mayatomr 或 Hardware 2.0 渲染器,并将渲染图像放入某个共享内存空间。

但这些解决方案涉及的内容非常多,涉及许多未记录的功能。您可能应该将渲染器设置为硬件 2.0,将图像保存为 BMP(无论如何 OpenCV 读取速度非常快),或者像上面建议的那样保存到 RAM 磁盘,然后就可以结束了。

修正案

也许有更简单的方法。创建一个实现MPxHardwareShader此处描述的规范的自定义节点:

http://images.autodesk.com/adsk/files/viewport_2_0_api_gold.pdf

换句话说,覆盖某个节点的 Hardware / Viewport 2.0 渲染。无需实际绘制某些东西,而是使用您对 OpenGL 上下文的访问将视口渲染为纹理。

http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-14-render-to-texture/

然后用它做任何你想做的事情。聪明,嗯?

于 2012-12-13T10:26:26.947 回答