The Foundry Nuke 中的 3D 纹理贴图
3D Texture Mapping in The Foundry Nuke
这是一个 Nuke 的 Python 脚本,用于创建相机的投影矩阵并将笔画用作纹理贴图。其背后的想法是使用绘画笔划通过当前选定的摄像机将查看器中所有对象的 3D 纹理投影到屏幕 space。
方法 .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()
以下是向节点添加自定义旋钮的方法。 Nuke Developer Guide.
中有更多详细信息和图片
以下示例将控件添加到模糊节点:
b = nuke.nodes.Blur()
k = nuke.Array_Knob("myctrl", "My Control")
b.addKnob(k)
对于滑块,.Array_Knob
可以替换为 .WH_Knob
,对于复选框,可以替换为 .Boolean_Knob
。
由于 Foundry 工程师弃用了 geo
旋钮及其 .getGeometry()
方法,我们应该改用 .getGeometryNodes()
方法。
如果您需要更详细的信息go here并写下您的问题。
这是一个 Nuke 的 Python 脚本,用于创建相机的投影矩阵并将笔画用作纹理贴图。其背后的想法是使用绘画笔划通过当前选定的摄像机将查看器中所有对象的 3D 纹理投影到屏幕 space。
方法 .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()
以下是向节点添加自定义旋钮的方法。 Nuke Developer Guide.
中有更多详细信息和图片以下示例将控件添加到模糊节点:
b = nuke.nodes.Blur()
k = nuke.Array_Knob("myctrl", "My Control")
b.addKnob(k)
对于滑块,.Array_Knob
可以替换为 .WH_Knob
,对于复选框,可以替换为 .Boolean_Knob
。
由于 Foundry 工程师弃用了 geo
旋钮及其 .getGeometry()
方法,我们应该改用 .getGeometryNodes()
方法。
如果您需要更详细的信息go here并写下您的问题。