我想写一个脚本,它使用Nuke的内置性能定时器来“检查”当前的comp。为此,我将清除所有查看器缓存,以重新开始。现在我需要触发缓存。看来,实现这一目标的唯一途径是使用nuke.activeViewer().play(1)。使用这个调用,我得到了我的时间线缓存,但我没有指示时间线是完全缓存的,以便能够停止和重置性能定时器。
我知道我也可以使用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或类似的东西,是否有可用的回调或可写的回调?
任何帮助都是非常感谢的!
发布于 2019-03-18 12:20:42
您想要达到什么样的具体要求?
核子有它内置的特性
"Nuke可以在屏幕上显示准确的性能计时数据,或者将其输出到XML文件中,以帮助您解决慢速脚本中的瓶颈问题。启用性能计时时,节点本身将显示在节点图中,节点本身根据每个节点所花费的总处理时间的比例进行着色,从绿色(快速节点)到红色(慢节点)。“
发布于 2019-03-19 14:55:02
模拟查看器时间线上的回调只能使用线程来实现。只需创建一个线程,检查当前帧是否被缓存,并使用来自该线程的nuke.activeViewer().frameControl()进入下一个帧。
https://stackoverflow.com/questions/55097531
复制相似问题