我想编写一个脚本,该脚本使用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