maya python api-渲染摄影机和存储在变量中

maya python api-渲染摄影机和存储在变量中,python,maya,autodesk,mel,Python,Maya,Autodesk,Mel,我正在使用Maya 2012,我要做的是渲染摄影机视图。我发现可以使用MEL命令“render”(通过python调用)来实现这一点。但是,据我所知,此命令渲染图像并将其保存到磁盘,同时仅返回保存图像的路径 例如: import maya.cmds as cmds import cv2 as cv pathToFile = cmds.render() renderImage = cv.imread(pathToFile) 由于我对使用图像执行各种计算机视觉算法感兴趣,因此将其保存到磁盘,然后

我正在使用Maya 2012,我要做的是渲染摄影机视图。我发现可以使用MEL命令“render”(通过python调用)来实现这一点。但是,据我所知,此命令渲染图像并将其保存到磁盘,同时仅返回保存图像的路径

例如:

import maya.cmds as cmds
import cv2 as cv

pathToFile = cmds.render()
renderImage = cv.imread(pathToFile)
由于我对使用图像执行各种计算机视觉算法感兴趣,因此将其保存到磁盘,然后从磁盘读取会产生不必要的计算开销

是否可以渲染摄影机并将图像存储在变量中而无需执行此操作?这将允许在渲染和分析渲染图像之间进行更快的循环



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

如果你想提高效率,您可以考虑使用<代码> OpenMaya < /Cord>包来访问视图的OpenGL上下文,并将视图2视图呈现为纹理。然后以编程方式访问该纹理

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

但这些解决方案涉及的内容太多了,涉及到太多未记录的特性。您可能只需要将渲染器设置为Hardware 2.0,将图像保存为BMP(OpenCV读取速度非常快),或者像上面建议的那样保存到RAM磁盘,然后结束

修正案

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

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


那就随你的便吧。聪明,是吗?

使用Maya API不一定很难。您需要的代码取决于您使用的渲染引擎,因为您需要为数据实现渲染引擎后端。请参见渲染器实际使用磁盘来保存所需的数据量。甚至Maya内部预览渲染工作也可以形成基于磁盘的解决方案。PS:对于这个棘手的问题,有一个简单的解决方案,制作一个ram磁盘并将图像放在那里。非常感谢您的回答。这就是我想知道的,是否有同样简单的方法将图像存储在变量中!也许将来我会尝试更复杂的解决方案,但现在——正如你所说的——我就到此为止吧!:)我现在已经达到了我实际需要优化的程度,并直接访问渲染信息。我浏览了文档,找到了renderAccessNode.cpp示例()。我尝试创建类似的东西(基本上覆盖了renderCallback()函数),但即使加载了插件,也好像从来没有调用renderCallback();有一个print语句不打印任何内容。你(或其他任何人)知道如何解决这个问题,或者其他一些方法来满足我的需要吗?我给你发了一个新的解决方案。非常感谢!我现在就尝试一下,并报告我的结果!因此,实际上,我将使用MPxShaderOverride函数将drawContext获取到内存中的纹理。每次调用render()函数时,该重写函数是否会生效,或者何时生效?不幸的是,我的代表不够高,不能给你一些声誉!在本例中,我认为不需要调用
render()
。在摄影机周围移动,摄影机将实时渲染为纹理。您可以向节点添加一个开关,告诉它何时保存,何时不保存。或者,您可以
playblast
,这与在OpenGL中逐个渲染每个帧而不使用任何中间帧具有相同的效果。这可能是你想要的。