3

I'm working with Maya 2012 and what I want to do is render a camera view. I have found that it's possible to do this using the MEL command 'render' (calling it through python). However, as far as I know, this command renders the image and saves it to disk while only returning the path to the saved image.

Example:

import maya.cmds as cmds
import cv2 as cv

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

Since I'm interested in using the image to perform various computer vision algorithms, saving it to disk and then reading it from disk creates an unnecessary computational overhead.

Is it possible to render a camera and store the image in a variable without the need to do this? This would allow for a quicker loop between rendering and analysing the render image.


In case someone comes upon this question in the future: I tried the ram disk approach (using dataram RAMDisk) which was suggested and it did not yield any speed increase, unfortunately.

4

1 に答える 1

1

効率を求める場合は、OpenMayaパッケージを使用してビューの OpenGL コンテキストにアクセスし、ビューポート 2.0 ビューをテクスチャにレンダリングすることを検討してください。次に、そのテクスチャにプログラムでアクセスします。

または、Mayatomr やハードウェア 2.0 レンダラーなどの別のレンダリング プラグインをラップするプラグインを作成し、レンダリングされたイメージを共有メモリ スペースに配置することもできます。

しかし、これらのソリューションは非常に複雑で、文書化されていない多くの機能に触れています。おそらく、レンダラーをハードウェア 2.0 に設定し、画像を BMP (とにかく OpenCV は非常に高速に読み取ります) として保存し、おそらく上記で提案したように RAM ディスクに保存し、それを 1 日と呼ぶ必要があります。

修正

おそらく、もっと簡単な方法があります。MPxHardwareShaderここで説明する仕様を実装するカスタム ノードを作成します。

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

つまり、一部のノードのハードウェア/ビューポート 2.0 レンダリングをオーバーライドします。実際に何かを描画する代わりに、OpenGL コンテキストへのアクセスを使用して、ビューポートをテクスチャにレンダリングします。

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

その後、あなたがそれでやりたいことは何でもしてください。賢いですね。

于 2012-12-13T10:26:26.947 に答える