0
カメラの投影行列を作成し、ペイント・ストロークをテクスチャ・マップとして使用するための、NukeのPythonスクリプトです。その背後にあるアイデアは、ビューア内のすべてのオブジェクトの3Dテクスチャを、現在選択されているカメラのペイントストロークを使ってスクリーンスペースに投影することです。ファウンドリー・ヌークの3Dテクスチャ・マッピング
私はCamera
ノードのユーザー]タブのプロパティでカスタムknobs
を経由して投影テクスチャのラッピングWidth
とHeight
を制御する必要があります。
どのようにプログラムで行うのですか?ここで
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))
私はNuke自身の新しい開発者です。したがって、これらのカスタムノブをどのように接続してノードの設定に影響を与えるのか分かりません。私がもっと知っていると更新されます。 – Matt
私はノブを追加する方法を知っています、ありがとう。私が本当に知る必要があるのは、これらのノブを使ってテクスチャのラッピングをコントロールする方法です。 – andy
私に見せるためにその核ファイルをアップロードできますか?既存のノブの値を調整するのは簡単です。カスタムノブで他のノブの値を調整したい場合は、式を使用する必要があります。 – Matt