首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用NUKE缓存脚本

使用NUKE缓存脚本
EN

Stack Overflow用户
提问于 2019-03-11 08:06:18
回答 2查看 265关注 0票数 1

我想写一个脚本,它使用Nuke的内置性能定时器来“检查”当前的comp。为此,我将清除所有查看器缓存,以重新开始。现在我需要触发缓存。看来,实现这一目标的唯一途径是使用nuke.activeViewer().play(1)。使用这个调用,我得到了我的时间线缓存,但我没有指示时间线是完全缓存的,以便能够停止和重置性能定时器。

我知道我也可以使用nuke.activeViewer().frameControl(+1)一次跳过一个帧,直到我跳到最后一个帧为止,但是在我看来,使用这个调用并不会导致comp缓存该帧。实际上,时间线表示帧被缓存,但nuke.activeViewer().node().frameCached(nuke.frame())正在返回false

尽管如此,我还是写了一些行得通的东西,但实际上几乎没有用。

下面是:

代码语言:javascript
复制
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或类似的东西,是否有可用的回调或可写的回调?

任何帮助都是非常感谢的!

EN

回答 2

Stack Overflow用户

发布于 2019-03-18 12:20:42

您想要达到什么样的具体要求?

核子有它内置的特性

"Nuke可以在屏幕上显示准确的性能计时数据,或者将其输出到XML文件中,以帮助您解决慢速脚本中的瓶颈问题。启用性能计时时,节点本身将显示在节点图中,节点本身根据每个节点所花费的总处理时间的比例进行着色,从绿色(快速节点)到红色(慢节点)。“

所指

票数 0
EN

Stack Overflow用户

发布于 2019-03-19 14:55:02

模拟查看器时间线上的回调只能使用线程来实现。只需创建一个线程,检查当前帧是否被缓存,并使用来自该线程的nuke.activeViewer().frameControl()进入下一个帧。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55097531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档