我想编写一个脚本,使用 Nuke 的内置性能计时器来“健全检查”当前的比较。 为此,我清除了所有查看器缓存以重新开始。现在我需要触发缓存。看来实现这一目标的唯一方法是使用nuke.activeViewer().play(1)。使用此调用,我可以缓存时间线,但没有任何指示何时时间线被完全缓存以便能够停止和重置性能计时器。
我知道我也可以使用 nuke.activeViewer().frameControl(+1)
一次跳过一帧,直到到达最后一帧,但在我看来使用此调用不会导致组件缓存该帧。实际上,时间线表明该帧已被缓存,但 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 或类似内容中的查看器是否有可用或可写的回调?
非常感谢任何帮助!
最佳答案
您希望达到什么具体的性能要求?
Nuke 有其内置功能
“Nuke 可以在屏幕上显示准确的性能计时数据或将其输出到 XML 文件,以帮助您解决缓慢脚本中的瓶颈。启用性能计时后,计时信息会显示在节点图中,并且节点本身会根据每个节点所花费的总处理时间的比例,从绿色(快速节点)到红色(慢速节点)。” -
关于python - 使用 NUKE API 缓存脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55097531/