【问题标题】:3D Texture Mapping in The Foundry NukeThe Foundry Nuke 中的 3D 纹理映射
【发布时间】:2016-10-20 19:59:35
【问题描述】:

这是一个 Nuke 的 Python 脚本,用于创建相机的投影矩阵并将笔画用作纹理贴图。其背后的想法是使用绘画笔划通过当前选定的相机将查看器中所有对象的 3D 纹理投影到屏幕空间。

方法.getGeometry() 不起作用。

如何解决?

这是一个代码:

import nuke
import nukescripts

def paintPoints():

    geoNode = nuke.activeViewer().node()       
    camera = nuke.selectedNode()

    if not camera.Class() in ('Camera', 'Camera2'):
        nuke.message('Por favor, seleccione un nodo de la cámara primera')
        return

    geoKnob = geoNode['geo']
    objects = geoKnob.getGeometry()

    if not objects:
        nuke.message('No se han encontrado geometría en %s' % geoNode.name())

    pts = []

    for o in objects:    
        objTransform = o.transform()

        for p in o.points():    
            worldP = objTransform * nuke.math.Vector4(p.x, p.y, p.z, 1)
            pts.append([worldP.x, worldP.y, worldP.z])

    curvesKnob = nuke.createNode('RotoPaint')['curves']
    task  = nuke.ProgressTask('painting points')

    for i, pt in enumerate(pts):
        if task.isCancelled():
            break

        task.setMessage('painting point %s' % i)
        stroke = nuke.rotopaint.Stroke(curvesKnob)
        pos = nukescripts.snap3d.projectPoint(camera, pt)
        ctrlPoint = nuke.rotopaint.AnimControlPoint(pos)
        stroke.append(ctrlPoint)
        curvesKnob.rootLayer.append(stroke)
        task.setProgress(int(float(i)/len(pts)*100))

paintPoints()

【问题讨论】:

    标签: python nuke


    【解决方案1】:

    由于 Foundry 工程师弃用了geo 旋钮以及它的.getGeometry() 方法,我们应该改用.getGeometryNodes() 方法。

    如果您需要有关它的更多详细信息go here 并写下您的问题。

    【讨论】:

      【解决方案2】:

      以下是向节点添加自定义旋钮的方法。更多详情和图片请关注Nuke Developer Guide

      以下示例将控件添加到模糊节点:

      b = nuke.nodes.Blur()
      k = nuke.Array_Knob("myctrl", "My Control")
      b.addKnob(k)
      

      .Array_Knob 可以替换为.WH_Knob 用于滑块或.Boolean_Knob 用于复选框。

      【讨论】:

      • 我自己是 Nuke 的新开发者,所以我不知道你如何连接这些自定义旋钮来影响节点的设置。当我知道更多时会更新。
      • 你能上传那个 nuke 文件给我看吗?调整现有旋钮的值通常很容易。如果你想要一个自定义旋钮来调整其他旋钮的数值,相信你需要用到表达式。
      • 我已经复制了脚本,现在正在检查您的代码。我只完成了 nuke 的编码,所以你必须告诉我投影的纹理设置在哪里。我在相机或 rotopaint 节点的设置中没有看到任何内容。
      猜你喜欢
      • 1970-01-01
      • 2013-06-29
      • 2018-07-13
      • 2019-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多