咨询电话:400-810-1418服务与监督电话:400-006-6572

在nuke中利用Python添加FOV参数

发布时间:2019-11-21 14:35:24

现在我们单独来看一下导入“Mayascene.fbx"文件后,Nuke Camera [摄影机节点]的Projection[投影]参数,如图所示。

 在nuke中利用Python添加FOV参数

可以看到focal length [ 焦距]、horiz aperture [水平成像平面]和vert aperture [垂直成像平面] 3个参数值确实和Maya camera里的参数是相同的,但Camera [摄影机]节点却没有FOV [摄角]参数。

我们可以通过下面的python脚本来手工为Nuke Camera [摄影机]添加一个Fov [摄角]参数。

Python参数如下:

import math

#导入math模块

def focalToFov ( focal, aperture ):

return math.degrees( math.atan2(aperture, focal*2) *2 )

#定义一-个focalToFov函数,使用了focal和aperture作为入参,这里的aperure指的就是Camera的horiz

aperture。下面使用的就是求Fov值的公式,返回的是Fov角度值。

def fovToFocal ( fov, aperture ):

return aperture / ( math.tan(math.radians(fov/2))/2)

#定义一个fovToFocal函数, 使用了上面求出的fov值和aperture作为入参,通过Fov和aperture求出了Focal值。

def addFovKnob():

n = nuke.thisNode()

Fov = nuke.Tab Knob(FOV)

fovKnob = nuke.Double_ Knob( 'fov';FOV' )

fovKnob.setRange( 5, 179 )

focal = n['focal'].value()

hap = n['haperture'].value()

fovKnob.setValue( focalToFov( focal, hap ))

n.addKnob( Fov )

n.addknob( fovKnob )

nuke.addOnUserCreate( addFovKnob, nodeClass='Camera2' )

#创建了一一个Fov的Knob [面板],并把上面focalToFov返回的Fov值赋予了这个Knob。

def fovCB():

n = nuke.thisNode()

k = nuke.thisKnob()

hap = n['haperture'].value()

if k.name()== 'fov':

n[focal'].setValue( fovToFocal( k.value(), hap ))

elif k.name() == 'focal':

n['fov'].setValue( focalToFov( k.value(), hap) )

nuke.addKnobChanged( fovCB, nodeClass='Camera2' )

#当调节Fov值时,会自动改变focal的值去进行匹配。

选择想要添加FOV [摄角]的Camera节点,把上面的参数粘贴到Script Edior [脚本编辑器]面板中,按回键车执行参数命令,如图所示。

 在nuke中利用Python添加FOV参数

当前Camera节点并不会马上添加参数,需要删除当前Camera节点,重新创建一个Camera节点,因为Nuke需要刷新参数。这时我们看到新建的Camera节点上多出一个Fov参数栏,如图所示。

 在nuke中利用Python添加FOV参数

当我们调节FOV [摄角]参数时,Foacl [焦距]会跟随改变,反之亦然。