我想编写一个脚本,该脚本使用Nuke的内置性能计时器来“检查”当前组件。
为此,我清除了所有查看器缓存以重新开始。现在,我需要触发缓存。看来实现此目标的唯一方法是使用nuke.activeViewer().play(1)。使用此调用,我可以将时间轴缓存起来,但是无法指示时间轴何时完全缓存起来,以便能够停止和重置Performace计时器。

我知道我也可以使用nuke.activeViewer().frameControl(+1)一次跳过一帧,直到我到达最后一帧,但在我看来,使用此调用不会导致comp缓存该帧。实际上,时间轴指示帧已缓存,但nuke.activeViewer().node().frameCached(nuke.frame())返回false

不过,我写的东西行得通,但几乎没有。

这里是:

import nuke

nuke.clearRAMCache()

vc = nuke.activeViewer()
v = vc.node()
fr = v.playbackRange()

vc.frameControl(-6)

print fr.maxFrame()

cached_frames = 0
while cached_frames < fr.maxFrame():
    print "Current Frame: {}".format(nuke.frame())

    if not v.frameCached(nuke.frame()):
        print "Frame: {} not cached".format(nuke.frame())

        while not v.frameCached(nuke.frame()):
             print "caching..."
             vc.play(1)
        print "Frame: {} cached".format(nuke.frame())
        print "Incrementing from caching"
        cached_frames += 1
    else:
        vc.frameControl(1)
        print "incrementing from skipping"
        #cached_frames += 1
    print "Cached Frames: {}".format(cached_frames)

print "DONE"
vc.stop()


我知道这不是一段很好的代码,但有时这些行执行得很好,而在其他时候,它只是挂了一段随机(至少看起来如此)的时间。

那么Nuke中的Viewer是否有可用或可写的回调或类似的东西?

任何帮助深表感谢!

最佳答案

您要达到什么特定的性能要求?

Nuke具有内置功能

“ Nuke可以在屏幕上显示准确的性能计时数据或将其输出到XML文件,以帮助您解决速度较慢的脚本中的瓶颈。启用性能计时后,计时信息会显示在“节点图”中,并且节点本身会根据从绿色(快速节点)到红色(慢速节点),每个过程花费的总处理时间。” --

referred to

08-17 00:13