Ejemplo n.º 1
0
def _generate_camera_data(camera, lens, frame0):
    camera_data = {}
    cam_num_frames = tde4.getCameraNoFrames(camera)

    img_width = tde4.getCameraImageWidth(camera)
    img_height = tde4.getCameraImageHeight(camera)
    camera_data['resolution'] = (img_width, img_height)

    film_back_x = tde4.getLensFBackWidth(lens)
    film_back_y = tde4.getLensFBackHeight(lens)
    camera_data['film_back_cm'] = (film_back_x, film_back_y)

    lco_x = tde4.getLensLensCenterX(lens)
    lco_y = tde4.getLensLensCenterY(lens)
    camera_data['lens_center_offset_cm'] = (lco_x, lco_y)

    camera_data['per_frame'] = []
    for frame in range(1, cam_num_frames):
        # Note: In 3DEqualizer, film back and lens center is assumed
        # to be static, only focal length can be dynamic.
        focal_length = tde4.getCameraFocalLength(camera, frame)
        frame_data = {
            'frame': frame + frame0,
            'focal_length_cm': focal_length,
        }
        camera_data['per_frame'].append(frame_data)

    return camera_data
def _convert_2d_to_3d_point_undistort(point_group, camera, fbw, fbh, lcox,
                                      lcoy, camera_fov, frame, pos, depth):
    """
    Convert a 2D point (undistorted) into a 3D point, in world space.

    :param point_group: Camera Point Group for camera.
    :param camera: The camera to use for rolling shutter calculations.
    :param fbw: Camera's film back width value.
    :param fbh: Camera's film back height value.
    :param lcox: Camera lens lens center offset X value.
    :param lcoy: Camera lens lens center offset Y value.
    :param camera_fov: Camera Field of View as list of left, right,
                       bottom and top.
    :param frame: The 2D point's frame number (in internal 3DE frame numbers).
    :param pos: Input 2D data.
    :param depth: The content distance to calculate rolling shutter at.

    :return: Corrected 2D point.
    :rtype: vec2d
    """
    focal = tde4.getCameraFocalLength(camera, frame)
    r3d = vl_sdv.mat3d(tde4.getPGroupRotation3D(point_group, camera, frame))
    p3d = vl_sdv.vec3d(tde4.getPGroupPosition3D(point_group, camera, frame))
    left, right, bottom, top = camera_fov

    p2d = [0, 0]
    p2d[0] = (pos[0] - left) / (right - left)
    p2d[1] = (pos[1] - bottom) / (top - bottom)
    p2d = tde4.removeDistortion2D(camera, frame, p2d)

    p2d_cm = vl_sdv.vec2d((p2d[0] - 0.5) * fbw - lcox,
                          (p2d[1] - 0.5) * fbh - lcoy)
    homogeneous_point = r3d * vl_sdv.vec3d(p2d_cm[0], p2d_cm[1], -focal).unit()
    out_point = homogeneous_point * depth + p3d
    return out_point
Ejemplo n.º 3
0
def cameraHasDistortion(camera):
    if isClassicModel(camera):
        return cameraHasDistortionClassic(camera)
    else:
        lens = tde4.getCameraLens(camera)
        model = getCameraModel(camera)
        for parameterName in getLDmodelParameterList(model):
            defaultValue = tde4.getLDModelParameterDefault(
                model, parameterName)
            # distorsionMode
            dyndistmode = tde4.getLensDynamicDistortionMode(lens)
            if dyndistmode == "DISTORTION_STATIC":
                actualValue = tde4.getLensLDAdjustableParameter(
                    lens, parameterName, 1, 1)
                if defaultValue != actualValue:
                    return True
            else:
                num_frames = tde4.getCameraNoFrames(camera)
                for frame in range(1, num_frames + 1):
                    focal = tde4.getCameraFocalLength(camera, frame)
                    focus = tde4.getCameraFocus(camera, frame)
                    actualValue = tde4.getLensLDAdjustableParameter(
                        lens, parameterName, focal, focus)
                    if defaultValue != actualValue:
                        return True
        return False
Ejemplo n.º 4
0
 def getInfoCam(self):
     cam = self.cam
     index = self.index
     self.offset = tde4.getCameraFrameOffset(cam)
     self.cameraPath = tde4.getCameraPath(cam).replace('\\', '/')
     self.camType = tde4.getCameraType(cam)
     self.noframes = tde4.getCameraNoFrames(cam)
     self.lens = tde4.getCameraLens(cam)
     self.rez_x = tde4.getCameraImageWidth(cam)
     self.rez_y = tde4.getCameraImageHeight(cam)
     self.model = tde4.getLensLDModel(self.lens)
     self.firstFrame = tde4.getCameraSequenceAttr(cam)[0]
     self.name = "%s_%s_1" % (validName(tde4.getCameraName(cam)), index)
     self.lastFrame = '%d' % (self.firstFrame + self.noframes - 1)
     self.firstFrame = '%d' % self.firstFrame
     self.focal_cm = tde4.getCameraFocalLength(cam, 1)
Ejemplo n.º 5
0
def getLensModelParameter(camera=None, lens=None, frame=None):
    lensModelParameter = dict()
    if frame is None and camera is None:
        # get the focusDistance
        focus = tde4.getLensFocus(lens)
        # get the focalLenght
        fotalLenght = tde4.getLensFocalLength(lens)

    else:
        # get the focusDistance
        focus = tde4.getCameraFocus(camera, frame)
        # get the focalLenght
        fotalLenght = tde4.getCameraFocalLength(camera, frame)

    model = tde4.getLensLDModel(lens)

    for parameterName in (getLDmodelParameterList(model)):
        varTemp = tde4.getLensLDAdjustableParameter(lens, parameterName,
                                                    fotalLenght, focus)
        lensModelParameter[parameterName] = varTemp

    lensModelParameter['model'] = model
    return lensModelParameter
def exportNukeDewarpNode(id_cam,offset,nuke_path):
	id_lens 	= tde4.getCameraLens(id_cam)
	model 	= tde4.getLensLDModel(id_lens)
	num_frames 	= tde4.getCameraNoFrames(id_cam)
	w_fb_cm = tde4.getLensFBackWidth(id_lens)
	h_fb_cm = tde4.getLensFBackHeight(id_lens)
	lco_x_cm = tde4.getLensLensCenterX(id_lens)
	lco_y_cm = tde4.getLensLensCenterY(id_lens)
	pxa = tde4.getLensPixelAspect(id_lens)
# xa,xb,ya,yb in unit coordinates, in this order.
	xa_unit,xb_unit,ya_unit,yb_unit = tde4.getCameraFOV(id_cam)
		
	f = open(nuke_path,"w")
	try:
		f.write('# Created by 3DEqualizer4 using Export Nuke Distortion Nodes export script\n')
		f.write("LD" + nukify_name(model) + ' {\n')
		f.write(' direction undistort\n')
################################
# focal length                 #
################################
		if is_focal_length_dynamic(id_cam):
# write focal length curve if dynamic
#			print 'dynamic focal length'
			f.write(' tde4_focal_length_cm {{curve ')	
			for frame in range(num_frames):
# Internally, frames start at 1.
				focal = tde4.getCameraFocalLength(id_cam,frame + 1)
				f.write ('x%i %.7f ' % (frame + offset,focal))
			f.write('}}\n')
		else:
# write static focal length otherwise
#			print 'static focal length'
			f.write(' tde4_focal_length_cm %.7f \n' % tde4.getCameraFocalLength(id_cam,1))
################################
# focus distance               #
################################
# For Release 1 this function return False, so no problem with getCameraFocus.
		if is_focus_distance_dynamic(id_cam):
# write focus distance curve if dynamic
#			print 'dynamic focus distance'
			f.write(' tde4_custom_focus_distance_cm {{curve ')	
			for frame in range(num_frames):
# Internally, frames start at 1.
				focus = tde4.getCameraFocus(id_cam,frame + 1)
				f.write ('x%i %.7f ' % (frame + offset,focus))
			f.write('}}\n')
		else:
			try:
# write static focus distance otherwise
				f.write(' tde4_custom_focus_distance_cm %.7f \n' % tde4.getCameraFocus(id_cam,1))
			except:
# For Release 1 we simply write out the default value to Nuke.
				f.write(' tde4_custom_focus_distance_cm 100.0 \n')
################################
# built-in parameters          #
################################
# the remaining five built-in parameters
		f.write(' tde4_filmback_width_cm %.7f \n' % w_fb_cm)
		f.write(' tde4_filmback_height_cm %.7f \n' % h_fb_cm)
		f.write(' tde4_lens_center_offset_x_cm %.7f \n' % lco_x_cm)
		f.write(' tde4_lens_center_offset_y_cm %.7f \n' % lco_y_cm)
		f.write(' tde4_pixel_aspect %.7f \n' % pxa)
################################
# field-of-view                #
################################
		f.write(' field_of_view_xa_unit %.7f \n' % xa_unit)
		f.write(' field_of_view_xb_unit %.7f \n' % xb_unit)
		f.write(' field_of_view_ya_unit %.7f \n' % ya_unit)
		f.write(' field_of_view_yb_unit %.7f \n' % yb_unit)
		
# write distortion parameters
#
# dynamic distortion
		dyndistmode = get_dynamic_distortion_mode(id_lens)

		old_api = True
		try:
			for para in getLDmodelParameterList(model):
				tde4.getLensLDAdjustableParameter(id_lens, para, 1)
				break
		except:
			old_api = False

		if old_api:
# dynamic focal length (zoom)
			if dyndistmode=="DISTORTION_DYNAMIC_FOCAL_LENGTH":
#				print 'dynamic lens distortion, focal length'
				for para in getLDmodelParameterList(model):
					f.write(' ' + nukify_name(para) + ' {{curve ')	
					for frame in range(num_frames):
# Internally, frames start at 1.
						focal = tde4.getCameraFocalLength(id_cam,frame + 1)
						f.write ('x%i %.7f ' % (frame + offset,tde4.getLensLDAdjustableParameter(id_lens,para,focal)))
					f.write('}}\n')
# dynamic focus distance
			if dyndistmode=="DISTORTION_DYNAMIC_FOCUS_DISTANCE":
#				print 'dynamic lens distortion, focus distance'
				for para in getLDmodelParameterList(model):
					f.write(' ' + nukify_name(para) + ' {{curve ')	
					for frame in range(num_frames):
# Older Releases do not have Focus-methods.
						try:
# Internally, frames start at 1.
							focus = tde4.getCameraFocus(id_cam,frame + 1)
						except:
							focus = 100.0
						f.write('x%i %.7f ' % (frame + offset,tde4.getLensLDAdjustableParameter(id_lens,para,focus)))
					f.write('}}\n')
# static distortion
			if dyndistmode=="DISTORTION_STATIC":
#				print 'static lens distortion'
				for para in getLDmodelParameterList(model):
					f.write(' ' + nukify_name(para) + ' %.7f \n'%tde4.getLensLDAdjustableParameter(id_lens,para,1))
		else:
# new API
			if dyndistmode=="DISTORTION_STATIC":
#				print 'static lens distortion'
				for para in getLDmodelParameterList(model):
					f.write(' ' + nukify_name(para) + ' %.7f \n'%tde4.getLensLDAdjustableParameter(id_lens,para,1,1))
			else:
#				print 'dynamic lens distortion,'
# dynamic
				for para in getLDmodelParameterList(model):
					f.write(' ' + nukify_name(para) + ' {{curve ')	
					for frame in range(num_frames):
# Internally, frames start at 1.
						focal = tde4.getCameraFocalLength(id_cam,frame + 1)
						focus = tde4.getCameraFocus(id_cam,frame + 1)
						f.write('x%i %.7f ' % (frame + offset,tde4.getLensLDAdjustableParameter(id_lens,para,focal,focus)))
#						print "%i[3DE4] -> %i[Nuke]" % (frame + tde4.getCameraFrameOffset(id_cam),frame + offset)
					f.write('}}\n')


		
		f.write(' name LD_3DE4_' + decode_entities(tde4.getCameraName(id_cam)) + '\n')
		f.write('}\n')

	finally:	
		f.close()	
def exportNukeDewarpNode(id_cam,offset,nuke_path):
	id_lens 	= tde4.getCameraLens(id_cam)
	model 	= tde4.getLensLDModel(id_lens)
	num_frames 	= tde4.getCameraNoFrames(id_cam)
	w_fb_cm = tde4.getLensFBackWidth(id_lens)
	h_fb_cm = tde4.getLensFBackHeight(id_lens)
	lco_x_cm = tde4.getLensLensCenterX(id_lens)
	lco_y_cm = tde4.getLensLensCenterY(id_lens)
	pxa = tde4.getLensPixelAspect(id_lens)
# xa,xb,ya,yb in unit coordinates, in this order.
	xa_unit,xb_unit,ya_unit,yb_unit = tde4.getCameraFOV(id_cam)
		
	f = open(nuke_path,"w")
	try:
		f.write('# Created by 3DEqualizer4 using Export Nuke Distortion Nodes export script\n')
		f.write("LD" + nukify_name(model) + ' {\n')
		f.write(' direction undistort\n')
################################
# focal length                 #
################################
		if is_focal_length_dynamic(id_cam):
# write focal length curve if dynamic
#			print 'dynamic focal length'
			f.write(' tde4_focal_length_cm {{curve ')	
			for frame in range(num_frames):
# Internally, frames start at 1.
				focal = tde4.getCameraFocalLength(id_cam,frame + 1)
				f.write ('x%i %.7f ' % (frame + offset,focal))
			f.write('}}\n')
		else:
# write static focal length otherwise
#			print 'static focal length'
			f.write(' tde4_focal_length_cm %.7f \n' % tde4.getCameraFocalLength(id_cam,1))
################################
# focus distance               #
################################
# For Release 1 this function return False, so no problem with getCameraFocus.
		if is_focus_distance_dynamic(id_cam):
# write focus distance curve if dynamic
#			print 'dynamic focus distance'
			f.write(' tde4_custom_focus_distance_cm {{curve ')	
			for frame in range(num_frames):
# Internally, frames start at 1.
				focus = tde4.getCameraFocus(id_cam,frame + 1)
				f.write ('x%i %.7f ' % (frame + offset,focus))
			f.write('}}\n')
		else:
			try:
# write static focus distance otherwise
				f.write(' tde4_custom_focus_distance_cm %.7f \n' % tde4.getCameraFocus(id_cam,1))
			except:
# For Release 1 we simply write out the default value to Nuke.
				f.write(' tde4_custom_focus_distance_cm 100.0 \n')
################################
# built-in parameters          #
################################
# the remaining five built-in parameters
		f.write(' tde4_filmback_width_cm %.7f \n' % w_fb_cm)
		f.write(' tde4_filmback_height_cm %.7f \n' % h_fb_cm)
		f.write(' tde4_lens_center_offset_x_cm %.7f \n' % lco_x_cm)
		f.write(' tde4_lens_center_offset_y_cm %.7f \n' % lco_y_cm)
		f.write(' tde4_pixel_aspect %.7f \n' % pxa)
################################
# field-of-view                #
################################
		f.write(' field_of_view_xa_unit %.7f \n' % xa_unit)
		f.write(' field_of_view_xb_unit %.7f \n' % xb_unit)
		f.write(' field_of_view_ya_unit %.7f \n' % ya_unit)
		f.write(' field_of_view_yb_unit %.7f \n' % yb_unit)
		
# write distortion parameters
#
# dynamic distortion
		dyndistmode = get_dynamic_distortion_mode(id_lens)

		old_api = True
		try:
			for para in getLDmodelParameterList(model):
				tde4.getLensLDAdjustableParameter(id_lens, para, 1)
				break
		except:
			old_api = False

		if old_api:
# dynamic focal length (zoom)
			if dyndistmode=="DISTORTION_DYNAMIC_FOCAL_LENGTH":
#				print 'dynamic lens distortion, focal length'
				for para in getLDmodelParameterList(model):
					f.write(' ' + nukify_name(para) + ' {{curve ')	
					for frame in range(num_frames):
# Internally, frames start at 1.
						focal = tde4.getCameraFocalLength(id_cam,frame + 1)
						f.write ('x%i %.7f ' % (frame + offset,tde4.getLensLDAdjustableParameter(id_lens,para,focal)))
					f.write('}}\n')
# dynamic focus distance
			if dyndistmode=="DISTORTION_DYNAMIC_FOCUS_DISTANCE":
#				print 'dynamic lens distortion, focus distance'
				for para in getLDmodelParameterList(model):
					f.write(' ' + nukify_name(para) + ' {{curve ')	
					for frame in range(num_frames):
# Older Releases do not have Focus-methods.
						try:
# Internally, frames start at 1.
							focus = tde4.getCameraFocus(id_cam,frame + 1)
						except:
							focus = 100.0
						f.write('x%i %.7f ' % (frame + offset,tde4.getLensLDAdjustableParameter(id_lens,para,focus)))
					f.write('}}\n')
# static distortion
			if dyndistmode=="DISTORTION_STATIC":
#				print 'static lens distortion'
				for para in getLDmodelParameterList(model):
					f.write(' ' + nukify_name(para) + ' %.7f \n'%tde4.getLensLDAdjustableParameter(id_lens,para,1))
		else:
# new API
			if dyndistmode=="DISTORTION_STATIC":
#				print 'static lens distortion'
				for para in getLDmodelParameterList(model):
					f.write(' ' + nukify_name(para) + ' %.7f \n'%tde4.getLensLDAdjustableParameter(id_lens,para,1,1))
			else:
#				print 'dynamic lens distortion,'
# dynamic
				for para in getLDmodelParameterList(model):
					f.write(' ' + nukify_name(para) + ' {{curve ')	
					for frame in range(num_frames):
# Internally, frames start at 1.
						focal = tde4.getCameraFocalLength(id_cam,frame + 1)
						focus = tde4.getCameraFocus(id_cam,frame + 1)
						f.write('x%i %.7f ' % (frame + offset,tde4.getLensLDAdjustableParameter(id_lens,para,focal,focus)))
#						print "%i[3DE4] -> %i[Nuke]" % (frame + tde4.getCameraFrameOffset(id_cam),frame + offset)
					f.write('}}\n')


		
		f.write(' name LD_3DE4_' + decode_entities(tde4.getCameraName(id_cam)) + '\n')
		f.write('}\n')

	finally:	
		f.close()	
                            cam) == 'STEREO_LEFT' and tde4.getCameraStereoMode(
                                cam) != 'STEREO_OFF':
                        name = ShotName + '_trk_camLeft'
                    elif tde4.getCameraStereoOrientation(
                            cam
                    ) == 'STEREO_RIGHT' and tde4.getCameraStereoMode(
                            cam) != 'STEREO_OFF':
                        name = ShotName + '_trk_camRight'
                    else:
                        name = ShotName + '_trk_cam'
                    #name       = "%s_%s_1"%(name,index)
                    index += 1
                    fback_w = tde4.getLensFBackWidth(lens)
                    fback_h = tde4.getLensFBackHeight(lens)
                    p_aspect = tde4.getLensPixelAspect(lens)
                    focal = tde4.getCameraFocalLength(cam, 1)
                    lco_x = tde4.getLensLensCenterX(lens)
                    lco_y = tde4.getLensLensCenterY(lens)

                    # convert filmback to inch...
                    fback_w = fback_w / 2.54
                    fback_h = fback_h / 2.54
                    lco_x = -lco_x / 2.54
                    lco_y = -lco_y / 2.54

                    # convert focal length to mm...
                    focal = focal * 10.0

                    # create camera...
                    f.write("\n")
                    f.write("// create camera %s...\n" % name)
Ejemplo n.º 9
0
def exportCameras(f, cameras, camFrameStart, exportPath, campg, outSize, date):

    for cameraIndex, cam in enumerate(cameras):

        frameStart = int(camFrameStart[cameraIndex])
        frame0 = frameStart - 1

        camInfo = tools.TDECamInfo(cam, cameraIndex)
        cameraName = camInfo.name
        cameraPath = camInfo.cameraPath
        projectName = camInfo.projectName
        projectPath = camInfo.projectPath

        rez_x = camInfo.rez_x
        rez_y = camInfo.rez_y

        firstFrame = camInfo.firstFrame
        lastFrame = camInfo.lastFrame
        offset = camInfo.offset

        noframes = camInfo.noframes

        offset = int(firstFrame) - int(frameStart)

        model = camInfo.model

        camType = camInfo.camType

        model_maya = tools.getLDmodelNukeNodeName(model)

        lens = camInfo.lens

        if lens is not None:
            fback_w = tde4.getLensFBackWidth(lens)
            fback_h = tde4.getLensFBackHeight(lens)
            p_aspect = tde4.getLensPixelAspect(lens)
            focal = tde4.getCameraFocalLength(cam, 1)
            lco_x = tde4.getLensLensCenterX(lens)
            lco_y = tde4.getLensLensCenterY(lens)

            # convert filmback to inch...
            fback_w = fback_w / 2.54
            fback_h = fback_h / 2.54
            lco_x_in = -lco_x / 2.54
            lco_y_in = -lco_y / 2.54

            # convert focal length to mm...
            focal = focal * 10.0

            # get the focalLenght
            # fotalLenght = tde4.getLensFocalLength(lens) # UNUSED

            # get the focusDistance
            # focus = tde4.getLensFocus(lens) # UNUSED

            # create camera
            f.write("\n")
            f.write("// create camera %s...\n" % cameraName)
            f.write(
                "string $cameraNodes[] = `camera -name \"camera_%s\" -hfa %.15f  -vfa %.15f -fl %.15f -ncp 0.01 -fcp 10000 -shutterAngle 180 -ff \"overscan\"`;\n"
                % (cameraName, fback_w, fback_h, focal))
            f.write("string $cameraTransform = $cameraNodes[0];\n")
            f.write("string $cameraShape = $cameraNodes[1];\n")
            f.write(
                "xform -zeroTransformPivots -rotateOrder zxy $cameraTransform;\n"
            )
            f.write(
                "setAttr ($cameraShape+\".horizontalFilmOffset\") %.15f;\n" %
                lco_x_in)
            f.write("setAttr ($cameraShape+\".verticalFilmOffset\") %.15f;\n" %
                    lco_y_in)
            f.write(
                'addAttr -ln "distortion_model" -dt "string" $cameraShape;\n')
            f.write(
                'setAttr -type "string" ($cameraShape + ".distortion_model") %s;\n'
                % model_maya)
            '''
            for para in (tools.getLDmodelParameterList(model)):
                f.write('addAttr -ln %s -dt "string" $cameraShape;\n'%tools.getLDmodelMayaParameterName(para));
                f.write('setAttr -type "string" ($cameraShape + ".%s") %s;\n'%(tools.getLDmodelMayaParameterName(para),tde4.getLensLDAdjustableParameter(lens, para, fotalLenght, focus)))
            '''
            f.write(
                'addAttr -ln "pixel_aspect_ratio" -at "float" $cameraShape;\n')
            f.write('setAttr ($cameraShape + ".pixel_aspect_ratio") %s;\n' %
                    p_aspect)
            '''
            'f.write('addAttr -ln "plate_resolution_x" -at "long" $cameraShape;\n');
            f.write('setAttr ($cameraShape + ".plate_resolution_x") %s;\n'%rez_x)
            f.write('addAttr -ln "plate_resolution_y" -at "long" $cameraShape;\n');
            f.write('setAttr ($cameraShape + ".plate_resolution_y") %s;\n'%rez_y)
            '''
            f.write('addAttr -ln "frameOffset" -at "long" $cameraShape;\n')
            f.write("setAttr ($cameraShape + \".frameOffset\") %s;\n" % offset)
            f.write('addAttr -ln "lcoX" -at "double" $cameraShape;\n')
            f.write("setAttr ($cameraShape + \".lcoX\") %s;\n" % lco_x)
            f.write('addAttr -ln "lcoY" -at "double" $cameraShape;\n')
            f.write("setAttr ($cameraShape + \".lcoY\") %s;\n" % lco_y)
            f.write('addAttr -ln "lcoXin" -at "double" $cameraShape;\n')
            f.write("setAttr ($cameraShape + \".lcoXin\") %s;\n" % lco_x_in)
            f.write('addAttr -ln "lcoYin" -at "double" $cameraShape;\n')
            f.write("setAttr ($cameraShape + \".lcoYin\") %s;\n" % lco_y_in)
            p3d = tde4.getPGroupPosition3D(campg, cam, 1)
            p3d = convertZup(p3d, yup)
            f.write(
                "xform -translation %.15f %.15f %.15f $cameraTransform;\n" %
                (p3d[0], p3d[1], p3d[2]))
            r3d = tde4.getPGroupRotation3D(campg, cam, 1)
            rot = convertToAngles(r3d)
            f.write("xform -rotation %.15f %.15f %.15f $cameraTransform;\n" %
                    rot)
            f.write("xform -scale 1 1 1 $cameraTransform;\n")

            # image plane...
            f.write("\n")
            f.write("// create image plane...\n")
            f.write("string $imagePlanes[] = `imagePlane`;\n")
            f.write("string $imagePlane = $imagePlanes[1];\n")
            f.write("select $imagePlane;\n")
            f.write("string $imagePlaneTransfo[] = `pickWalk -d up`;\n")
            f.write("select -cl;\n")
            f.write("cameraImagePlaneUpdate ($cameraShape, $imagePlane);\n")
            f.write("setAttr ($imagePlane + \".frameOffset\") %s;\n" % offset)
            f.write("setAttr ($imagePlane + \".offsetX\") %.15f;\n" % lco_x)
            f.write("setAttr ($imagePlane + \".offsetY\") %.15f;\n" % lco_y)
            f.write("setAttr ($imagePlane + \".type\") 1;\n")
            f.write("parent $imagePlaneTransfo[0] $cameraTransform;\n")

            path = tde4.getCameraPath(cam)
            sattr = tde4.getCameraSequenceAttr(cam)
            if camType == "SEQUENCE":
                f.write("setAttr ($imagePlane+\".useFrameExtension\") 1;\n")
                f.write(
                    "expression -n \"frame_ext_expression\" -s($imagePlane+\".frameExtension=frame\");\n"
                )
                pathPrepared = prepareImagePath(path, sattr[0])
            else:
                f.write("setAttr ($imagePlane+\".useFrameExtension\") 0;\n")
                pathPrepared = path.replace("\\", "/")

            f.write(
                "setAttr ($imagePlane + \".imageName\") -type \"string\" \"%s\";\n"
                % (pathPrepared))

            f.write("setAttr ($imagePlane + \".fit\") 4;\n")
            f.write("setAttr ($imagePlane + \".displayOnlyIfCurrent\") 1;\n")
            f.write("setAttr ($imagePlane  + \".depth\") (9000/2);\n")

            # parent camera to scene group...
            f.write("\n")
            f.write("// parent camera to scene group...\n")
            f.write("parent $cameraTransform $sceneGroupName;\n")

            if camType == "REF_FRAME":  # and hide_ref:
                f.write("setAttr ($cameraTransform +\".visibility\") 0;\n")

            # animate camera...
            if camType != "REF_FRAME":
                f.write("\n")
                f.write("// animating camera %s...\n" % cameraName)
                f.write("playbackOptions -min %d -max %d;\n" %
                        (1 + frame0, noframes + frame0))
                f.write("\n")

            frame = 1
            rot0 = None

            while frame <= noframes:
                # rot/pos...
                p3d = tde4.getPGroupPosition3D(campg, cam, frame)
                p3d = convertZup(p3d, yup)
                r3d = tde4.getPGroupRotation3D(campg, cam, frame)
                rot = convertToAngles(r3d)

                if frame > 1:
                    rot = [
                        angleMod360(rot0[0], rot[0]),
                        angleMod360(rot0[1], rot[1]),
                        angleMod360(rot0[2], rot[2])
                    ]
                rot0 = rot

                f.write(
                    "setKeyframe -at translateX -t %d -v %.15f $cameraTransform; "
                    % (frame + frame0, p3d[0]))
                f.write(
                    "setKeyframe -at translateY -t %d -v %.15f $cameraTransform; "
                    % (frame + frame0, p3d[1]))
                f.write(
                    "setKeyframe -at translateZ -t %d -v %.15f $cameraTransform; "
                    % (frame + frame0, p3d[2]))
                f.write(
                    "setKeyframe -at rotateX -t %d -v %.15f $cameraTransform;    "
                    % (frame + frame0, rot[0]))
                f.write(
                    "setKeyframe -at rotateY -t %d -v %.15f $cameraTransform;    "
                    % (frame + frame0, rot[1]))
                f.write(
                    "setKeyframe -at rotateZ -t %d -v %.15f $cameraTransform;    "
                    % (frame + frame0, rot[2]))

                # focal length...
                focal = tde4.getCameraFocalLength(cam, frame)
                focal = focal * 10.0
                f.write(
                    "setKeyframe -at focalLength -t %d -v %.15f $cameraShape;\n"
                    % (frame + frame0, focal))

                frame += 1

            # set Distortion
            f.write('addAttr -ln "distortion" -at "bool" $cameraShape;\n')

            if tools.cameraHasDistortion(cam):
                f.write('setAttr ($cameraShape + ".distortion") 1;\n')
            else:
                f.write('setAttr ($cameraShape + ".distortion") 0;\n')

        # change params as in old export to nuke

        # create new ones
        f.write(
            'addAttr -ln "first_tracked_frame" -at long -dv 0 $cameraShape;\n')
        f.write(
            'addAttr -ln "last_tracked_frame" -at long -dv 0 $cameraShape;\n')
        f.write('addAttr -ln "colorspace"  -dt "string" $cameraShape;\n')
        f.write('addAttr -ln "RenderRez_X" -at long -dv 0 $cameraShape;\n')
        f.write('addAttr -ln "RenderRez_Y" -at long -dv 0 $cameraShape;\n')
        f.write('addAttr -ln "disto_comp" -dt "string" $cameraShape;\n')

        # set values
        minFrame = firstFrame
        f.write('int $minFrame = ' + str(minFrame) + ';  \n')
        f.write('setAttr ($cameraShape + ".first_tracked_frame") $minFrame;\n')
        maxFrame = lastFrame
        f.write('int $maxFrame = ' + str(maxFrame) + '; \n')
        f.write('setAttr ($cameraShape + ".last_tracked_frame") $maxFrame;\n')

        # if firstFrame == lastFrame:
        if 'labo/log' in cameraPath:
            colorspace = getdata.getRootColorSpace(projectName)
        else:
            colorspace = 'sRGB'

        f.write('string $colorspace = "' + colorspace + '"; \n')
        f.write(
            'setAttr -type "string" ($cameraShape + ".colorspace") $colorspace;\n'
        )

        renderOutX = str(max(int(rez_x), int(outSize[cameraIndex].width)))
        renderOutY = str(max(int(rez_y), int(outSize[cameraIndex].height)))

        f.write('int $renderOutX = ' + str(renderOutX) + '; \n')

        # TODO if positive disto is other value
        f.write('setAttr ($cameraShape + ".RenderRez_X") $renderOutX; \n')

        # TODO if positive disto is other value
        f.write('int $renderOutY = ' + str(renderOutY) + '; \n')
        f.write('setAttr ($cameraShape + ".RenderRez_Y") $renderOutY; \n')

        f.write('string $exportFileName = "' + exportPath.replace("\\", "/") +
                '_undisto/' + cameraName + '_undisto.nk";\n')
        f.write(
            'setAttr -type "string"($cameraShape + ".disto_comp") $exportFileName; \n'
        )

        # other values

        coefX = 1.0 * int(renderOutX) / rez_x
        coefY = 1.0 * int(renderOutY) / rez_y

        oldhfa = fback_w
        oldvfa = fback_h

        newHfa = str(coefX * oldhfa)
        newVfa = str(coefY * oldvfa)

        f.write('setAttr ($cameraShape + ".hfa") ' + newHfa + '; \n')
        f.write('setAttr ($cameraShape + ".vfa") ' + newVfa + '; \n')

        f.write(
            'string $initIplane[] = `listConnections -type "imagePlane" $cameraShape`; \n'
        )
        f.write('string $camIplaneShape = $initIplane[0]; \n')
        f.write('setAttr ($camIplaneShape + ".sizeX") ' + newHfa + '; \n')
        f.write('setAttr ($camIplaneShape + ".sizeY") ' + newVfa + '; \n')

        undistoFilePath = camInfo.getUndistoImagePath(app='maya', date=date)

        f.write('setAttr -type "string" ($camIplaneShape + ".imageName") "' +
                undistoFilePath + '";  \n')

        f.write('setAttr ($camIplaneShape + ".type") 0;  \n')

        # camera rendeable
        f.write('setAttr ($cameraShape + ".renderable") 1;  \n')

        # keys in some params
        touchParam(f, '$cameraShape + ".hfa"', insertKey=True, lock=False)
        touchParam(f, '$cameraShape + ".vfa"', insertKey=True, lock=False)
        pixelAspectRatioParamName = '$cameraShape + ".pixel_aspect_ratio"'
        touchParam(f, pixelAspectRatioParamName, insertKey=True, lock=True)
        renderRezXparamName = '$cameraShape + ".RenderRez_X"'
        touchParam(f, renderRezXparamName, insertKey=True, lock=True)
        renderRezTparamName = '$cameraShape + ".RenderRez_Y"'
        touchParam(f, renderRezTparamName, insertKey=True, lock=True)
        touchParam(f, '$cameraShape + ".distortion"')

        touchParam(f, '$cameraShape + ".first_tracked_frame"', insertKey=False)
        touchParam(f, '$cameraShape + ".last_tracked_frame"', insertKey=False)
        touchParam(f, '$cameraShape + ".colorspace"', insertKey=False)
        touchParam(f, '$cameraShape + ".frameOffset"', insertKey=False)

        # set render globals
        f.write('setAttr "defaultResolution.width"  ' + renderOutX + '; \n')
        f.write('setAttr "defaultResolution.height" ' + renderOutY + '; \n')

        # delete old params
        f.write('deleteAttr ($cameraShape + ".distortion_model");     \n')
        f.write('deleteAttr ($cameraShape + ".lcoX");                 \n')
        f.write('deleteAttr ($cameraShape + ".lcoY");                 \n')
        f.write('deleteAttr ($cameraShape + ".lcoXin");               \n')
        f.write('deleteAttr ($cameraShape + ".lcoYin");               \n')
Ejemplo n.º 10
0
def _remove_rs_from_2d_point(point_group, camera, frame, input_2d, depth):
    """
    Correct Rolling Shutter for the given input_2d point data, on frame.

    :param point_group: Camera Point Group for camera.
    :param camera: The camera to use for rolling shutter calculations.
    :param frame: The 2D point's frame number (in internal 3DE frame numbers).
    :param input_2d: Input 2D data.
    :param depth: The content distance to calculate rolling shutter at.

    :return: 2D point with corrected position.
    :rtype: [float, float]
    """
    assert isinstance(input_2d, vl_sdv.vec2d)
    num_frames = tde4.getCameraNoFrames(camera)
    if num_frames == 1:
        return input_2d

    # Static camera and lens values.
    camera_fps = tde4.getCameraFPS(camera)
    camera_fov = tde4.getCameraFOV(camera)
    lens = tde4.getCameraLens(camera)
    fbw = tde4.getLensFBackWidth(lens)
    fbh = tde4.getLensFBackHeight(lens)
    lcox = tde4.getLensLensCenterX(lens)
    lcoy = tde4.getLensLensCenterY(lens)
    rs_time_shift = tde4.getCameraRollingShutterTimeShift(camera)
    rs_value = rs_time_shift * camera_fps

    # Sample at previous frame
    prev_pos = vl_sdv.vec3d(0, 0, 0)
    prev_frame = frame - 1
    if frame > 1:
        prev_pos = _convert_2d_to_3d_point_undistort(
            point_group, camera,
            fbw, fbh, lcox, lcoy,
            camera_fov,
            prev_frame, input_2d, depth)

    # Sample at next frame
    next_pos = vl_sdv.vec3d(0, 0, 0)
    next_frame = frame + 1
    if frame < num_frames:
        next_pos = _convert_2d_to_3d_point_undistort(
            point_group, camera,
            fbw, fbh, lcox, lcoy,
            camera_fov,
            next_frame, input_2d, depth)

    # Sample at current frame
    curr_pos = _convert_2d_to_3d_point_undistort(
        point_group, camera,
        fbw, fbh, lcox, lcoy,
        camera_fov,
        frame, input_2d, depth)

    # Blend previous, next and current frame values based on the
    # position of the 2D point vertical position and the rolling
    # shutter value.
    if frame == 1:
        prev_pos = curr_pos + (curr_pos - next_pos)
    if frame == num_frames:
        next_pos = curr_pos + (curr_pos - prev_pos)
    t = rs_value * (1.0 - input_2d[1])
    curr_pos = _apply_rs_correction(-t, prev_pos, curr_pos, next_pos)

    # Back-projection
    focal = tde4.getCameraFocalLength(camera, frame)
    r3d = vl_sdv.mat3d(tde4.getPGroupRotation3D(point_group, camera, frame))
    p3d = vl_sdv.vec3d(tde4.getPGroupPosition3D(point_group, camera, frame))
    d = r3d.trans() * (curr_pos - p3d)
    p2d = [0, 0]
    p2d[0] = (d[0] * focal / (-d[2] * fbw)) + (lcox / fbw) + 0.5
    p2d[1] = (d[1] * focal / (-d[2] * fbh)) + (lcoy / fbh) + 0.5
    p = tde4.applyDistortion2D(camera, frame, p2d)
    left, right, bottom, top = camera_fov
    p = vl_sdv.vec2d((p[0] * (right - left)) + left,
                     (p[1] * (top - bottom)) + bottom)
    v = (input_2d + (input_2d - p)).list()
    return v
Ejemplo n.º 11
0
def generateNukeNode(cam, direction, offset=0, index=0):
    lens = tde4.getCameraLens(cam)
    model = tde4.getLensLDModel(lens)
    num_frames = tde4.getCameraNoFrames(cam)
    w_fb_cm = tde4.getLensFBackWidth(lens)
    h_fb_cm = tde4.getLensFBackHeight(lens)
    lco_x_cm = tde4.getLensLensCenterX(lens)
    lco_y_cm = tde4.getLensLensCenterY(lens)
    pxa = tde4.getLensPixelAspect(lens)
    # xa,xb,ya,yb in unit coordinates, in this order.
    fov = tde4.getCameraFOV(cam)

    print 'camera: ', tde4.getCameraName(cam)
    print 'offset:', offset
    print 'lens:', tde4.getLensName(lens)
    print 'model: ', model

    nukeNode = []

    nukeNode.append('# Created by 3DEqualizer4 ')
    nukeNode.append('# using Export Nuke Distortion Nodes export script')
    nukeNode.append("LD" + tools.nukify_name(model) + ' {')
    nukeNode.append(' direction ' + direction)

    # write focal length curve if dynamic
    if tde4.getCameraZoomingFlag(cam):
        print 'dynamic focal length'
        dynFocalLength = []

        for frame in range(1, num_frames + 1):
            dynFocalLength.append('x%i' % (frame + offset))
            dynFocalLength.append(' %.7f ' %
                                  tde4.getCameraFocalLength(cam, frame))
        focalLenghtStr = "".join(dynFocalLength)
        nukeNode.append(' tde4_focal_length_cm {{curve ' + focalLenghtStr +
                        ' }}')

# write static focal length else
    else:
        print 'static focal length'
        focalLenghtStr = ' tde4_focal_length_cm %.7f '
        focalLenghtStr = focalLenghtStr % tde4.getCameraFocalLength(cam, 1)
        nukeNode.append(focalLenghtStr)

# write focus distance curve if dynamic
    try:
        if tde4.getCameraFocusMode(cam) == "FOCUS_DYNAMIC":
            print 'dynamic focus distance'
            dynFocusDistance = []
            for frame in range(1, num_frames + 1):
                dynFocusDistance.append('x%i' % (frame + offset))
                dynFocusDistance.append(' %.7f ' %
                                        tde4.getCameraFocus(cam, frame))
            focusDStr = "".join(dynFocusDistance)
            toWrite = ' tde4_custom_focus_distance_cm {{curve ' + focusDStr + '}}'
            nukeNode.append(toWrite)
    except:
        # For 3DE4 Release 1:
        pass
# write static focus distance else
    else:
        print 'static focus distance'
        try:
            cameraFocus = ' tde4_custom_focus_distance_cm %.7f '
            cameraFocus = cameraFocus % tde4.getCameraFocus(cam, 1)
            nukeNode.append(cameraFocus)
        except:
            # For 3DE4 Release 1:
            nukeNode.append(' tde4_custom_focus_distance_cm 100.0 ')


# write camera
    nukeNode.append(' tde4_filmback_width_cm %.7f ' % w_fb_cm)
    nukeNode.append(' tde4_filmback_height_cm %.7f ' % h_fb_cm)
    nukeNode.append(' tde4_lens_center_offset_x_cm %.7f ' % lco_x_cm)
    nukeNode.append(' tde4_lens_center_offset_y_cm %.7f ' % lco_y_cm)
    nukeNode.append(' tde4_pixel_aspect %.7f ' % pxa)
    nukeNode.append(' field_of_view_xa_unit %.7f ' % fov[0])
    nukeNode.append(' field_of_view_ya_unit %.7f ' % fov[2])
    nukeNode.append(' field_of_view_xb_unit %.7f ' % fov[1])
    nukeNode.append(' field_of_view_yb_unit %.7f ' % fov[3])
    nukeNode.append(' filter Simon')

    # dynamic distortion
    try:
        dyndistmode = tde4.getLensDynamicDistortionMode(lens)
    except:
        # For 3DE4 Release 1:
        if tde4.getLensDynamicDistortionFlag(lens) == 1:
            dyndistmode = "DISTORTION_DYNAMIC_FOCAL_LENGTH"
        else:
            dyndistmode = "DISTORTION_STATIC"

    if dyndistmode == "DISTORTION_STATIC":
        print 'static lens distortion'
        for para in (tools.getLDmodelParameterList(model)):
            distStr = ' %.7f ' % tde4.getLensLDAdjustableParameter(
                lens, para, 1, 1)
            nukeNode.append(' ' + tools.nukify_name(para) + distStr)
    else:
        print 'dynamic lens distortion,'
        # dynamic
        for para in (tools.getLDmodelParameterList(model)):

            lensCurve = []
            for frame in range(1, num_frames + 1):
                focal = tde4.getCameraFocalLength(cam, frame)
                focus = tde4.getCameraFocus(cam, frame)
                lensCurve.append('x%i' % (frame + offset))
                frameParam = tde4.getLensLDAdjustableParameter(
                    lens, para, focal, focus)
                lensCurve.append(' %.7f ' % frameParam)
            lensCurveStr = ' {{curve ' + "".join(lensCurve) + ' }}'
            nukeNode.append(' ' + tools.nukify_name(para) + lensCurveStr)

    nameNode = 'name ' + getLDNodeName(cam, direction, offset, index)
    nukeNode.append(nameNode)
    nukeNode.append('}')

    return nukeNode
def exportNukeDewarpNode(cam, offset, nuke_path):
    lens = tde4.getCameraLens(cam)
    model = tde4.getLensLDModel(lens)
    num_frames = tde4.getCameraNoFrames(cam)
    w_fb_cm = tde4.getLensFBackWidth(lens)
    h_fb_cm = tde4.getLensFBackHeight(lens)
    lco_x_cm = tde4.getLensLensCenterX(lens)
    lco_y_cm = tde4.getLensLensCenterY(lens)
    pxa = tde4.getLensPixelAspect(lens)
    # xa,xb,ya,yb in unit coordinates, in this order.
    fov = tde4.getCameraFOV(cam)

    print 'camera: ', tde4.getCameraName(cam)
    print 'offset:', offset
    print 'lens:', tde4.getLensName(lens)
    print 'model: ', model

    f = open(nuke_path, "w")
    try:
        f.write(
            '# Created by 3DEqualizer4 using Export Nuke Distortion Nodes export script\n'
        )
        f.write("LD" + nukify_name(model) + ' {\n')
        f.write(' direction undistort\n')

        # write focal length curve if dynamic
        if tde4.getCameraZoomingFlag(cam):
            print 'dynamic focal length'
            f.write(' tde4_focal_length_cm {{curve ')
            for frame in range(1, num_frames + 1):
                f.write('x%i' % (frame + offset))
                f.write(' %.7f ' % tde4.getCameraFocalLength(cam, frame))
            f.write('}}\n')
# write static focal length else
        else:
            print 'static focal length'
            f.write(' tde4_focal_length_cm %.7f \n' %
                    tde4.getCameraFocalLength(cam, 1))
# write focus distance curve if dynamic
        try:
            if tde4.getCameraFocusMode(cam) == "FOCUS_DYNAMIC":
                print 'dynamic focus distance'
                f.write(' tde4_custom_focus_distance_cm {{curve ')
                for frame in range(1, num_frames + 1):
                    f.write('x%i' % (frame + offset))
                    f.write(' %.7f ' % tde4.getCameraFocus(cam, frame))
                f.write('}}\n')
        except:
            # For 3DE4 Release 1:
            pass
# write static focus distance else
        else:
            print 'static focus distance'
            try:
                f.write(' tde4_custom_focus_distance_cm %.7f \n' %
                        tde4.getCameraFocus(cam, 1))
            except:
                # For 3DE4 Release 1:
                f.write(' tde4_custom_focus_distance_cm 100.0 \n')
# write camera
        f.write(' tde4_filmback_width_cm %.7f \n' % w_fb_cm)
        f.write(' tde4_filmback_height_cm %.7f \n' % h_fb_cm)
        f.write(' tde4_lens_center_offset_x_cm %.7f \n' % lco_x_cm)
        f.write(' tde4_lens_center_offset_y_cm %.7f \n' % lco_y_cm)
        f.write(' tde4_pixel_aspect %.7f \n' % pxa)
        f.write(' field_of_view_xa_unit %.7f \n' % fov[0])
        f.write(' field_of_view_ya_unit %.7f \n' % fov[2])
        f.write(' field_of_view_xb_unit %.7f \n' % fov[1])
        f.write(' field_of_view_yb_unit %.7f \n' % fov[3])

        # write distortion parameters
        #
        # dynamic distortion
        try:
            dyndistmode = tde4.getLensDynamicDistortionMode(lens)
        except:
            # For 3DE4 Release 1:
            if tde4.getLensDynamicDistortionFlag(lens) == 1:
                dyndistmode = "DISTORTION_DYNAMIC_FOCAL_LENGTH"
            else:
                dyndistmode = "DISTORTION_STATIC"

        old_api = True
        try:
            tde4.getLensLDAdjustableParameter(lens, para, 1)
        except:
            old_api = False

        if old_api:
            if dyndistmode == "DISTORTION_DYNAMIC_FOCAL_LENGTH":
                print 'dynamic lens distortion, focal length'
                # dynamic focal length (zoom)
                for para in (getLDmodelParameterList(model)):
                    f.write(' ' + nukify_name(para) + ' {{curve ')
                    for frame in range(1, num_frames + 1):
                        focal = tde4.getCameraFocalLength(cam, frame)
                        f.write('x%i' % (frame + offset))
                        f.write(' %.7f ' % tde4.getLensLDAdjustableParameter(
                            lens, para, focal))
                    f.write('}}\n')

            if dyndistmode == "DISTORTION_DYNAMIC_FOCUS_DISTANCE":
                print 'dynamic lens distortion, focus distance'
                # dynamic focus distance
                for para in (getLDmodelParameterList(model)):
                    f.write(' ' + nukify_name(para) + ' {{curve ')
                    for frame in range(1, num_frames + 1):
                        # Older Releases do not have Focus-methods.
                        try:
                            focus = tde4.getCameraFocus(cam, frame)
                        except:
                            focus = 100.0
                        f.write('x%i' % (frame + offset))
                        f.write(' %.7f ' % tde4.getLensLDAdjustableParameter(
                            lens, para, focus))
                    f.write('}}\n')

# static distortion
            if dyndistmode == "DISTORTION_STATIC":
                print 'static lens distortion'
                for para in (getLDmodelParameterList(model)):
                    f.write(' ' + nukify_name(para) + ' %.7f \n' %
                            tde4.getLensLDAdjustableParameter(lens, para, 1))
        else:
            # new API
            if dyndistmode == "DISTORTION_STATIC":
                print 'static lens distortion'
                for para in (getLDmodelParameterList(model)):
                    f.write(
                        ' ' + nukify_name(para) + ' %.7f \n' %
                        tde4.getLensLDAdjustableParameter(lens, para, 1, 1))
            else:
                print 'dynamic lens distortion,'
                # dynamic
                for para in (getLDmodelParameterList(model)):
                    f.write(' ' + nukify_name(para) + ' {{curve ')
                    for frame in range(1, num_frames + 1):
                        focal = tde4.getCameraFocalLength(cam, frame)
                        focus = tde4.getCameraFocus(cam, frame)
                        f.write('x%i' % (frame + offset))
                        f.write(' %.7f ' % tde4.getLensLDAdjustableParameter(
                            lens, para, focal, focus))
                    f.write('}}\n')

        f.write(' name LD_3DE4_' + decode_entities(tde4.getCameraName(cam)) +
                '\n')
        f.write('}\n')

    finally:
        f.close()
Ejemplo n.º 13
0
def main():
    campg = None
    pgl = tde4.getPGroupList()
    for pg in pgl:
        if tde4.getPGroupType(pg) == "CAMERA": campg = pg
    if campg == None:
        tde4.postQuestionRequester("Export Maya...",
                                   "Error, there is no camera point group.",
                                   "Ok")

    #
    # open requester...

    try:
        req = _export_requester_maya
    except (ValueError, NameError, TypeError):
        _export_requester_maya = tde4.createCustomRequester()
        req = _export_requester_maya
        tde4.addFileWidget(req, "file_browser", "Exportfile...", "*.mel")
        tde4.addTextFieldWidget(req, "startframe_field", "Startframe", "1")
        # tde4.addOptionMenuWidget(req,"mode_menu","Orientation","Y-Up", "Z-Up")
        tde4.addToggleWidget(req, "hide_ref_frames", "Hide Reference Frames",
                             0)

    cam = tde4.getCurrentCamera()
    offset = tde4.getCameraFrameOffset(cam)
    tde4.setWidgetValue(req, "startframe_field", str(offset))

    # ret	= tde4.postCustomRequester(req,"Export Maya (MEL-Script)...",600,0,"Ok","Cancel")
    ret = 1

    if ret == 1:
        # yup	= tde4.getWidgetValue(req,"mode_menu")
        # if yup==2: yup = 0
        yup = 1
        # path	= tde4.getWidgetValue(req,"file_browser")
        path = get_mel_filename()['path']
        # frame0	= float(tde4.getWidgetValue(req,"startframe_field"))
        # frame0	-= 1
        framerange = get_frame_range()
        playbackoptions = 'playbackOptions -min {0} -max {1};'
        playbackoptions = playbackoptions.format(framerange['first'],
                                                 framerange['last'])
        frame0 = framerange['first'] - 1

        hide_ref = tde4.getWidgetValue(req, "hide_ref_frames")
        if path != None:
            if not path.endswith('.mel'): path = path + '.mel'
            f = open(path, "w")
            if not f.closed:

                #
                # write some comments...

                f.write("//\n")
                f.write("// Maya/MEL export data written by %s\n" %
                        tde4.get3DEVersion())
                f.write("//\n")
                f.write(
                    "// All lengths are in centimeter, all angles are in degree.\n"
                )
                f.write("//\n\n")

                #
                # write scene group...
                groupname = """// create scene group...
string $sceneGroupName = `group -em -name "mm_{name}"`;
"""

                # f.write("// create scene group...\n")
                # f.write("string $sceneGroupName = `group -em -name \"Scene\"`;\n")
                groupname = groupname.format(
                    name=get_mel_filename()['filename'][:-4])
                f.write(groupname)

                #
                # write cameras...

                cl = tde4.getCameraList()
                index = 1
                for cam in cl:
                    camType = tde4.getCameraType(cam)
                    noframes = tde4.getCameraNoFrames(cam)
                    lens = tde4.getCameraLens(cam)
                    if lens != None:
                        name = validName(tde4.getCameraName(cam))
                        cam_name = 'cam_mm_' + name
                        # name		= "%s_%s_1"%(name,index)
                        # name		= "%s_%s"%(name,index)
                        name = cam_name
                        index += 1
                        fback_w = tde4.getLensFBackWidth(lens)
                        fback_h = tde4.getLensFBackHeight(lens)
                        p_aspect = tde4.getLensPixelAspect(lens)
                        focal = tde4.getCameraFocalLength(cam, 1)
                        lco_x = tde4.getLensLensCenterX(lens)
                        lco_y = tde4.getLensLensCenterY(lens)

                        # convert filmback to inch...
                        fback_w = fback_w / 2.54
                        fback_h = fback_h / 2.54
                        lco_x = -lco_x / 2.54
                        lco_y = -lco_y / 2.54

                        # convert focal length to mm...
                        focal = focal * 10.0

                        # create camera...
                        f.write("\n")
                        f.write("// create camera %s...\n" % name)
                        f.write(
                            "string $cameraNodes[] = `camera -name \"%s\" -hfa %.15f  -vfa %.15f -fl %.15f -ncp 0.01 -fcp 10000 -shutterAngle 180 -ff \"overscan\"`;\n"
                            % (name, fback_w, fback_h, focal))
                        f.write("string $cameraTransform = $cameraNodes[0];\n")
                        f.write("string $cameraShape = $cameraNodes[1];\n")
                        f.write(
                            "xform -zeroTransformPivots -rotateOrder zxy $cameraTransform;\n"
                        )
                        f.write(
                            "setAttr ($cameraShape+\".horizontalFilmOffset\") %.15f;\n"
                            % lco_x)
                        f.write(
                            "setAttr ($cameraShape+\".verticalFilmOffset\") %.15f;\n"
                            % lco_y)
                        f.write("setAttr ($cameraShape+\".renderable\") 1;\n")
                        p3d = tde4.getPGroupPosition3D(campg, cam, 1)
                        p3d = convertZup(p3d, yup)
                        f.write(
                            "xform -translation %.15f %.15f %.15f $cameraTransform;\n"
                            % (p3d[0], p3d[1], p3d[2]))
                        r3d = tde4.getPGroupRotation3D(campg, cam, 1)
                        rot = convertToAngles(r3d)
                        f.write(
                            "xform -rotation %.15f %.15f %.15f $cameraTransform;\n"
                            % rot)
                        f.write("xform -scale 1 1 1 $cameraTransform;\n")
                        """add pipeline attributes to camerashape"""
                        # attribs = add_pipeline_attribs() ### OBSOLETE WAY
                        attribs = add_pipeline_parms()
                        f.write(attribs)

                        # image plane...
                        f.write("\n\n\n\n// create image plane...\n")
                        f.write(
                            "string $imagePlane = `createNode imagePlane`;\n")
                        f.write(
                            "cameraImagePlaneUpdate ($cameraShape, $imagePlane);\n"
                        )
                        f.write(
                            "setAttr ($imagePlane + \".offsetX\") %.15f;\n" %
                            lco_x)
                        f.write(
                            "setAttr ($imagePlane + \".offsetY\") %.15f;\n" %
                            lco_y)

                        if camType == "SEQUENCE":
                            f.write(
                                "setAttr ($imagePlane+\".useFrameExtension\") 1;\n"
                            )
                        else:
                            f.write(
                                "setAttr ($imagePlane+\".useFrameExtension\") 0;\n"
                            )

                        f.write(
                            "expression -n \"frame_ext_expression\" -s ($imagePlane+\".frameExtension=frame\");\n"
                        )
                        path = tde4.getCameraPath(cam)
                        sattr = tde4.getCameraSequenceAttr(cam)
                        path = prepareImagePath(path, sattr[0])
                        f.write(
                            "setAttr ($imagePlane + \".imageName\") -type \"string\" \"%s\";\n"
                            % (path))
                        f.write("setAttr ($imagePlane + \".fit\") 4;\n")
                        f.write(
                            "setAttr ($imagePlane + \".displayOnlyIfCurrent\") 1;\n"
                        )
                        f.write(
                            "setAttr ($imagePlane  + \".depth\") (9000/2);\n")

                        # parent camera to scene group...
                        f.write("\n")
                        f.write("// parent camera to scene group...\n")
                        f.write("parent $cameraTransform $sceneGroupName;\n")

                        if camType == "REF_FRAME" and hide_ref:
                            f.write(
                                "setAttr ($cameraTransform +\".visibility\") 0;\n"
                            )

                        # animate camera...
                        if camType != "REF_FRAME":
                            f.write("\n")
                            f.write("// animating camera %s...\n" % name)
                            f.write(playbackoptions)
                            # f.write("playbackOptions -min %d -max %d;\n"%(1+frame0,noframes+frame0))
                            f.write("\n\n")

                        frame = 1
                        while frame <= noframes:
                            # rot/pos...
                            p3d = tde4.getPGroupPosition3D(campg, cam, frame)
                            p3d = convertZup(p3d, yup)
                            r3d = tde4.getPGroupRotation3D(campg, cam, frame)
                            rot = convertToAngles(r3d)
                            if frame > 1:
                                rot = [
                                    angleMod360(rot0[0], rot[0]),
                                    angleMod360(rot0[1], rot[1]),
                                    angleMod360(rot0[2], rot[2])
                                ]
                            rot0 = rot
                            f.write(
                                "setKeyframe -at translateX -t %d -v %.15f $cameraTransform; "
                                % (frame + frame0, p3d[0]))
                            f.write(
                                "setKeyframe -at translateY -t %d -v %.15f $cameraTransform; "
                                % (frame + frame0, p3d[1]))
                            f.write(
                                "setKeyframe -at translateZ -t %d -v %.15f $cameraTransform; "
                                % (frame + frame0, p3d[2]))
                            f.write(
                                "setKeyframe -at rotateX -t %d -v %.15f $cameraTransform; "
                                % (frame + frame0, rot[0]))
                            f.write(
                                "setKeyframe -at rotateY -t %d -v %.15f $cameraTransform; "
                                % (frame + frame0, rot[1]))
                            f.write(
                                "setKeyframe -at rotateZ -t %d -v %.15f $cameraTransform; "
                                % (frame + frame0, rot[2]))

                            # focal length...
                            focal = tde4.getCameraFocalLength(cam, frame)
                            focal = focal * 10.0
                            f.write(
                                "setKeyframe -at focalLength -t %d -v %.15f $cameraShape;\n"
                                % (frame + frame0, focal))

                            frame += 1

                #
                # write camera point group...

                f.write("\n")
                f.write("// create camera point group...\n")
                name = "cameraPGroup_%s_1" % validName(
                    tde4.getPGroupName(campg))
                f.write(
                    "string $pointGroupName = `group -em -name  \"%s\" -parent $sceneGroupName`;\n"
                    % name)
                # f.write("$pointGroupName = ($sceneGroupName + \"|\" + $pointGroupName);\n")
                f.write("\n")

                # write points...
                l = tde4.getPointList(campg)
                for p in l:
                    if tde4.isPointCalculated3D(campg, p):
                        name = tde4.getPointName(campg, p)
                        name = "p%s" % validName(name)
                        p3d = tde4.getPointCalcPosition3D(campg, p)
                        p3d = convertZup(p3d, yup)
                        f.write("\n")
                        f.write("// create point %s...\n" % name)
                        f.write(
                            "string $locator = stringArrayToString(`spaceLocator -name %s`, \"\");\n"
                            % name)
                        f.write("$locator = (\"|\" + $locator);\n")
                        f.write("xform -t %.15f %.15f %.15f $locator;\n" %
                                (p3d[0], p3d[1], p3d[2]))
                        f.write("parent $locator $pointGroupName;\n")

                f.write("\n")
                f.write(
                    "xform -zeroTransformPivots -rotateOrder zxy -scale 1.000000 1.000000 1.000000 $pointGroupName;\n"
                )
                f.write("\n")

                #
                # write object/mocap point groups...

                camera = tde4.getCurrentCamera()
                noframes = tde4.getCameraNoFrames(camera)
                pgl = tde4.getPGroupList()
                index = 1
                for pg in pgl:
                    if tde4.getPGroupType(pg) == "OBJECT" and camera != None:
                        f.write("\n")
                        f.write("// create object point group...\n")
                        pgname = "objectPGroup_%s_%d_1" % (validName(
                            tde4.getPGroupName(pg)), index)
                        index += 1
                        f.write(
                            "string $pointGroupName = `group -em -name  \"%s\" -parent $sceneGroupName`;\n"
                            % pgname)
                        f.write(
                            "$pointGroupName = ($sceneGroupName + \"|\" + $pointGroupName);\n"
                        )

                        # write points...
                        l = tde4.getPointList(pg)
                        for p in l:
                            if tde4.isPointCalculated3D(pg, p):
                                name = tde4.getPointName(pg, p)
                                name = "p%s" % validName(name)
                                p3d = tde4.getPointCalcPosition3D(pg, p)
                                p3d = convertZup(p3d, yup)
                                f.write("\n")
                                f.write("// create point %s...\n" % name)
                                f.write(
                                    "string $locator = stringArrayToString(`spaceLocator -name %s`, \"\");\n"
                                    % name)
                                f.write("$locator = (\"|\" + $locator);\n")
                                f.write(
                                    "xform -t %.15f %.15f %.15f $locator;\n" %
                                    (p3d[0], p3d[1], p3d[2]))
                                f.write("parent $locator $pointGroupName;\n")

                        f.write("\n")
                        scale = tde4.getPGroupScale3D(pg)
                        f.write(
                            "xform -zeroTransformPivots -rotateOrder zxy -scale %.15f %.15f %.15f $pointGroupName;\n"
                            % (scale, scale, scale))

                        # animate object point group...
                        f.write("\n")
                        f.write("// animating point group %s...\n" % pgname)
                        frame = 1
                        while frame <= noframes:
                            # rot/pos...
                            p3d = tde4.getPGroupPosition3D(pg, camera, frame)
                            p3d = convertZup(p3d, yup)
                            r3d = tde4.getPGroupRotation3D(pg, camera, frame)
                            rot = convertToAngles(r3d)
                            if frame > 1:
                                rot = [
                                    angleMod360(rot0[0], rot[0]),
                                    angleMod360(rot0[1], rot[1]),
                                    angleMod360(rot0[2], rot[2])
                                ]
                            rot0 = rot
                            f.write(
                                "setKeyframe -at translateX -t %d -v %.15f $pointGroupName; "
                                % (frame + frame0, p3d[0]))
                            f.write(
                                "setKeyframe -at translateY -t %d -v %.15f $pointGroupName; "
                                % (frame + frame0, p3d[1]))
                            f.write(
                                "setKeyframe -at translateZ -t %d -v %.15f $pointGroupName; "
                                % (frame + frame0, p3d[2]))
                            f.write(
                                "setKeyframe -at rotateX -t %d -v %.15f $pointGroupName; "
                                % (frame + frame0, rot[0]))
                            f.write(
                                "setKeyframe -at rotateY -t %d -v %.15f $pointGroupName; "
                                % (frame + frame0, rot[1]))
                            f.write(
                                "setKeyframe -at rotateZ -t %d -v %.15f $pointGroupName;\n"
                                % (frame + frame0, rot[2]))

                            frame += 1

                    # mocap point groups...
                    if tde4.getPGroupType(pg) == "MOCAP" and camera != None:
                        f.write("\n")
                        f.write("// create mocap point group...\n")
                        pgname = "objectPGroup_%s_%d_1" % (validName(
                            tde4.getPGroupName(pg)), index)
                        index += 1
                        f.write(
                            "string $pointGroupName = `group -em -name  \"%s\" -parent $sceneGroupName`;\n"
                            % pgname)
                        f.write(
                            "$pointGroupName = ($sceneGroupName + \"|\" + $pointGroupName);\n"
                        )

                        # write points...
                        l = tde4.getPointList(pg)
                        for p in l:
                            if tde4.isPointCalculated3D(pg, p):
                                name = tde4.getPointName(pg, p)
                                name = "p%s" % validName(name)
                                p3d = tde4.getPointMoCapCalcPosition3D(
                                    pg, p, camera, 1)
                                p3d = convertZup(p3d, yup)
                                f.write("\n")
                                f.write("// create point %s...\n" % name)
                                f.write(
                                    "string $locator = stringArrayToString(`spaceLocator -name %s`, \"\");\n"
                                    % name)
                                f.write("$locator = (\"|\" + $locator);\n")
                                f.write(
                                    "xform -t %.15f %.15f %.15f $locator;\n" %
                                    (p3d[0], p3d[1], p3d[2]))
                                for frame in range(1, noframes + 1):
                                    p3d = tde4.getPointMoCapCalcPosition3D(
                                        pg, p, camera, frame)
                                    p3d = convertZup(p3d, yup)
                                    f.write(
                                        "setKeyframe -at translateX -t %d -v %.15f $locator; "
                                        % (frame + frame0, p3d[0]))
                                    f.write(
                                        "setKeyframe -at translateY -t %d -v %.15f $locator; "
                                        % (frame + frame0, p3d[1]))
                                    f.write(
                                        "setKeyframe -at translateZ -t %d -v %.15f $locator; "
                                        % (frame + frame0, p3d[2]))
                                f.write("parent $locator $pointGroupName;\n")

                        f.write("\n")
                        scale = tde4.getPGroupScale3D(pg)
                        f.write(
                            "xform -zeroTransformPivots -rotateOrder zxy -scale %.15f %.15f %.15f $pointGroupName;\n"
                            % (scale, scale, scale))

                        # animate mocap point group...
                        f.write("\n")
                        f.write("// animating point group %s...\n" % pgname)
                        frame = 1
                        while frame <= noframes:
                            # rot/pos...
                            p3d = tde4.getPGroupPosition3D(pg, camera, frame)
                            p3d = convertZup(p3d, yup)
                            r3d = tde4.getPGroupRotation3D(pg, camera, frame)
                            rot = convertToAngles(r3d)
                            if frame > 1:
                                rot = [
                                    angleMod360(rot0[0], rot[0]),
                                    angleMod360(rot0[1], rot[1]),
                                    angleMod360(rot0[2], rot[2])
                                ]
                            rot0 = rot
                            f.write(
                                "setKeyframe -at translateX -t %d -v %.15f $pointGroupName; "
                                % (frame + frame0, p3d[0]))
                            f.write(
                                "setKeyframe -at translateY -t %d -v %.15f $pointGroupName; "
                                % (frame + frame0, p3d[1]))
                            f.write(
                                "setKeyframe -at translateZ -t %d -v %.15f $pointGroupName; "
                                % (frame + frame0, p3d[2]))
                            f.write(
                                "setKeyframe -at rotateX -t %d -v %.15f $pointGroupName; "
                                % (frame + frame0, rot[0]))
                            f.write(
                                "setKeyframe -at rotateY -t %d -v %.15f $pointGroupName; "
                                % (frame + frame0, rot[1]))
                            f.write(
                                "setKeyframe -at rotateZ -t %d -v %.15f $pointGroupName;\n"
                                % (frame + frame0, rot[2]))

                            frame += 1

                #
                # global (scene node) transformation...

                p3d = tde4.getScenePosition3D()
                p3d = convertZup(p3d, yup)
                r3d = tde4.getSceneRotation3D()
                rot = convertToAngles(r3d)
                s = tde4.getSceneScale3D()
                f.write(
                    "xform -zeroTransformPivots -rotateOrder zxy -translation %.15f %.15f %.15f -scale %.15f %.15f %.15f -rotation %.15f %.15f %.15f $sceneGroupName;\n\n"
                    %
                    (p3d[0], p3d[1], p3d[2], s, s, s, rot[0], rot[1], rot[2]))

                f.write("\n")
                f.close()
                # tde4.postQuestionRequester("Export Maya...","Project successfully exported.","Ok")
                print '--> successfully exported Maya Mel'
            else:
                tde4.postQuestionRequester("Export Maya...",
                                           "Error, couldn't open file.", "Ok")

    return get_mel_filename()['path']
Ejemplo n.º 14
0
 def get_focal_length(self, frame):
     return tde4.getCameraFocalLength(self._cam_id, frame)
Ejemplo n.º 15
0
def exportDistortionParameters(tde4, cam, lens, f, offset):
    """Add undistort attributes to the Maya camera"""

    model   = tde4.getLensLDModel(lens)

    f.write('addAttr -longName "tde4_lens_model" -dataType "string" -storable 1 -readable 1 -writable 1 $cameraShape;\n')
    f.write('addAttr -longName "tde4_focal_length_cm" -attributeType "double" -storable 1 -readable 1 -writable 1 $cameraShape;\n')
    f.write('addAttr -longName "tde4_filmback_width_cm" -attributeType "double" -storable 1 -readable 1 -writable 1 $cameraShape;\n')
    f.write('addAttr -longName "tde4_filmback_height_cm" -attributeType "double" -storable 1 -readable 1 -writable 1 $cameraShape;\n')
    f.write('addAttr -longName "tde4_lens_center_offset_x_cm" -attributeType "double" -storable 1 -readable 1 -writable 1 $cameraShape;\n')
    f.write('addAttr -longName "tde4_lens_center_offset_y_cm" -attributeType "double" -storable 1 -readable 1 -writable 1 $cameraShape;\n')
    f.write('addAttr -longName "tde4_pixel_aspect" -attributeType "double" -storable 1 -readable 1 -writable 1 $cameraShape;\n')
    f.write('addAttr -longName "tde4_bbox_scale_factor" -attributeType "double" -storable 1 -readable 1 -writable 1 $cameraShape;\n')
    f.write('addAttr -longName "tde4_animated_distortion" -attributeType "short" -storable 1 -readable 1 -writable 1 $cameraShape;\n')

    for para in (getLDmodelParameterList(model)):
        f.write('addAttr -longName "'+ getLDmodelNukeParameterName(para) + '" -attributeType "double" -storable 1 -readable 1 -writable 1 $cameraShape;\n')

    lensModel = getLDmodelNukeNodeName(model)
    f.write('setAttr ($cameraShape+".tde4_lens_model") -type "string" "%s";\n' % lensModel)

    numberFrames = tde4.getCameraNoFrames(cam)
    if tde4.getCameraZoomingFlag(cam):
        # dynamic focal length
        for frame in range(1,numberFrames+1):
            f.write('setKeyframe -at "tde4_focal_length_cm" -t %d -v %.7f $cameraTransform; '%(frame+offset,tde4.getCameraFocalLength(cam,frame)))
    else:
        # static focal length
        f.write("setAttr ($cameraShape+\".tde4_focal_length_cm\") %7f;\n" % tde4.getCameraFocalLength(cam,1))

    fbw = tde4.getLensFBackWidth(lens)
    fbh = tde4.getLensFBackHeight(lens)
    lcx = tde4.getLensLensCenterX(lens)
    lcy = tde4.getLensLensCenterY(lens)
    pxa = tde4.getLensPixelAspect(lens)

    f.write('setAttr ($cameraShape+\".tde4_filmback_width_cm\") %.7f;\n'%fbw)
    f.write('setAttr ($cameraShape+\".tde4_filmback_height_cm\") %.7f;\n'%fbh)
    f.write('setAttr ($cameraShape+\".tde4_lens_center_offset_x_cm\") %.7f;\n'%lcx)
    f.write('setAttr ($cameraShape+\".tde4_lens_center_offset_y_cm\") %.7f;\n'%lcy)
    f.write('setAttr ($cameraShape+\".tde4_pixel_aspect\") %.7f;\n'%pxa)

    # compute the bounding box scale factor (animation taken into account)
    bbox_x, bbox_y, bbox_w, bbox_h = getDistortionBoundingBox(cam, lcx, lcy)
    w_px = tde4.getCameraImageWidth(cam)
    h_px = tde4.getCameraImageHeight(cam)
    # print "%dx%d => %dx%d" % (w_px, h_px, bbox_w, bbox_h)
    distortion_scale_x = float(bbox_w+2) / float(w_px)
    distortion_scale_y = float(bbox_h+2) / float(h_px)
    # print "distortion scale factor x: %f" % distortion_scale_x
    # print "distortion scale factor y: %f" % distortion_scale_y
    distortion_scale = max(distortion_scale_x, distortion_scale_y)
    f.write('setAttr ($cameraShape+\".tde4_bbox_scale_factor\") %.7f;\n' % distortion_scale)

    if tde4.getLensDynamicDistortionFlag(lens):
        # dynamic distortion
        for para in (getLDmodelParameterList(model)):
            for frame in range(1,numberFrames):
                focal = tde4.getCameraFocalLength(cam,frame)
                f.write('setKeyframe -at "%s" -t %d -v %.7f $cameraTransform; '%(getLDmodelNukeParameterName(para),frame+offset,tde4.getLensLDAdjustableParameter(lens, para, focal)))
        f.write('setAttr ($cameraShape+\".tde4_animated_distortion\") 1;\n')
    else:
        # static distortion
        for para in (getLDmodelParameterList(model)):
            f.write('setAttr ($cameraShape+\".'+getLDmodelNukeParameterName(para)+'\") %.7f;\n' % tde4.getLensLDAdjustableParameter(lens, para, 1))
        f.write('setAttr ($cameraShape+\".tde4_animated_distortion\") 0;\n')