2016-10-20 15 views
0

Вот сценарий Puke для Nuke для создания матрицы проекции камеры и использования красок в качестве текстурной карты. Идея этого заключается в том, чтобы спроецировать трехмерную текстуру всех объектов в средстве просмотра на экранное пространство через выбранную камеру, используя штрихи краски.Картирование 3D-текстур в Foundry Nuke

мне нужно контролировать проецируется текселя оберточной Width и Height с помощью пользовательского knobs в закладке User свойств Camera узла.

Как это сделать программно?

enter image description here

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)) 

enter image description here

ответ

1

Вот как добавлять пользовательские кнопки на узлы. Подробнее и изображения в Nuke Developer Guide.

Следующий пример добавляет элемент управления к узлу размытия:

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

.Array_Knob может быть заменен .WH_Knob для ползуна или .Boolean_Knob для флажка.

+0

Я новый разработчик для самого Nuke, поэтому я не знаю, как вы подключаете эти пользовательские регуляторы, чтобы влиять на настройки узла. Будет обновляться, когда я узнаю больше. – Matt

+0

Я знаю, как добавить ручки, спасибо. Мне действительно нужно знать, как контролировать обертывание текстуры через эти кнопки. – andy

+0

Можете ли вы загрузить этот файл Nuke для просмотра? Регулировка значений существующих регуляторов обычно довольно проста. Если вы хотите, чтобы пользовательская ручка настраивала значение других регуляторов, я считаю, что вам нужно использовать выражения. – Matt