1

作为一个练习,我最近开始编写一个在 2 个几何图形之间生成闪电的小工具。到目前为止,我成功地使用通过 python 脚本创建的动态表达式创建了与地理相关的随机数量的闪电。

我想在每个闪电的接触处添加一些分支,我发现最快的方法是使用粒子系统在目标地理上传播点。使用图像处理和位置传递,我能够快速提取靠近闪电接触点的点。

现在除了在每个帧上运行一个小脚本以将隔离点位置和索引放在每个帧的列表中之外,我没有其他解决方案。

在 python 脚本中循环采样像素时,我经常遇到同样的问题。使用nuke.frame()时框架不会更新。

这是我正在处理的脚本:

sn = nuke.thisNode()
snc = nuke.toNode('PosCP')

AllcontactAllFrame = []
AllcontactAllFrame[:] = []

AllcontactOnFrame = []
AllcontactOnFrame[:] = []

EachContactOnFrame = []
EachContactOnFrame[:] = []


def AppendContactLists( FirstFrame , LastFrame , wdth , hght):

  for fra in range (FirstFrame, LastFrame+1) :

    nuke.frame(fra)

    for h in range (0, hght) :
      for w in range (0, wdth) :

        Vpix = snc.sample('alpha', w, h)

        if Vpix == 1 :

          Contx = snc.sample('red', w , h)
          Conty = snc.sample('green', w, h)
          Contz = snc.sample('blue', w, h)

          PosC = [Contx,Conty,Contz]

          EachContactOnFrame.append(h)
          EachContactOnFrame.append(PosC)


width = snc.width()
height = snc.height()

ff = int(sn.knob('FirstFrameTmp').getValue())
lf = int(sn.knob('LastFrameTmp').getValue())

AppendContactLists(ff,lf,width,height)

nuke.message(str(EachContactOnFrame))

PosC 应该为每个帧存储不同的值,但它只存储每个帧的第一帧的值。

有没有人有解决方法或这个?

或者有没有人知道使用 python 以外的东西来存储非零像素(例如在线)的方法?

谢谢

4

0 回答 0