使用NUKE API缓存脚本

时间:2019-03-11 08:06:19

标签: python caching nuke

我想编写一个脚本,该脚本使用Nuke的内置性能计时器来“检查”当前组件。 为此,我要清除所有查看器缓存以重新开始。现在,我需要触发缓存。看来实现此目标的唯一方法是使用class DottedBackgroundView: UIView { override func draw(_ rect: CGRect) { guard let context = UIGraphicsGetCurrentContext() else { return } UIColor.green.setFill() context.fill(rect) let drawPattern: CGPatternDrawPatternCallback = { _, context in context.addArc( center: CGPoint(x: 5, y: 5), radius: 2.5, startAngle: 0, endAngle: CGFloat(2.0 * .pi), clockwise: false) context.setFillColor(UIColor.white.cgColor) context.fillPath() } var callbacks = CGPatternCallbacks( version: 0, drawPattern: drawPattern, releaseInfo: nil) let pattern = CGPattern( info: nil, bounds: CGRect(x: 0, y: 0, width: 10, height: 10), matrix: .identity, xStep: 10, yStep: 10, tiling: .constantSpacing, isColored: true, callbacks: &callbacks) let patternSpace = CGColorSpace(patternBaseSpace: nil)! context.setFillColorSpace(patternSpace) var alpha: CGFloat = 1.0 context.setFillPattern(pattern!, colorComponents: &alpha) context.fill(rect) context.addArc( center: CGPoint(x: 5, y: 5), radius: 5.0, startAngle: 0, endAngle: CGFloat(2.0 * .pi), clockwise: false) } } 。使用此调用,我可以将时间轴缓存起来,但是没有迹象表明何时完全缓存了时间轴,以便能够停止和重置Performace计时器。

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

尽管如此,我写的东西仍然有效,但几乎没有。

这里是:

false

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

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

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

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

Nuke具有内置功能

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

referred to

答案 1 :(得分:0)

Mimicking callbacks on the viewer timeline is only achievable using Threads. Just create a Thread, check for the current frame to be cached and step to the next frame using nuke.activeViewer().frameControl() from that Thread.