我正在使用Maya 2012,我想要做的是渲染相机视图。我发现使用MEL命令'render'(通过python调用它)可以做到这一点。但是,据我所知,此命令会渲染图像并将其保存到磁盘,同时只返回保存图像的路径。
示例:
import maya.cmds as cmds
import cv2 as cv
pathToFile = cmds.render()
renderImage = cv.imread(pathToFile)
由于我对使用图像执行各种计算机视觉算法感兴趣,将其保存到磁盘然后从磁盘读取会产生不必要的计算开销。
是否可以渲染相机并将图像存储在变量中而无需执行此操作?这样可以在渲染和分析渲染图像之间实现更快的循环。
如果有人在将来遇到这个问题:我尝试了ram磁盘方法(使用dataram RAMDisk),不幸的是,它没有提高任何速度。
答案 0 :(得分: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/
然后用它做任何你想做的事。聪明,嗯?