228 lines
11 KiB
Plaintext
228 lines
11 KiB
Plaintext
/*
|
|
[DESCRIPTION]
|
|
FBX to Bip conversion script.
|
|
|
|
[USAGE]
|
|
With a merged in FBX bone structure and a matching biped in the scene run this script.
|
|
|
|
It will go frame by frame and align the Bip structure to the Bone structure.
|
|
|
|
One limitation, the script is hardcoded to work with the Bone structure names with "_Bip01" as a prefix and the matching bip being named "Bip01"
|
|
|
|
This will be adressed in the future.
|
|
|
|
[CREATION INFO]
|
|
Author:Paul Hormis
|
|
Last Updated: July 17, 2006
|
|
|
|
[VERSION HISTORY]
|
|
v1.00 Created
|
|
|
|
Copyright (C) 2006 Paul Hormis
|
|
*/
|
|
|
|
|
|
|
|
Global FBXtoBipXFer, AnimXferProgress
|
|
|
|
Struct FBXtoBipXFerStruct
|
|
(
|
|
PelvisRef = undefined,
|
|
PelvisRot = undefined,
|
|
PelvisRotFinal = undefined,
|
|
LThighRef = undefined,
|
|
RThighRef = undefined,
|
|
BipPartStep = 100.0 / 51.0,
|
|
|
|
function DoCreatePointAtPivot ObjectForNull: =
|
|
(
|
|
try
|
|
(
|
|
tempRet = undefined
|
|
for MSobj in ObjectForNull do
|
|
with animate off
|
|
(
|
|
PivotPointHelper = Point pos:(MSobj.transform.pos) isSelected:off size:3 centermarker:off axistripod:off cross:on Box:off constantscreensize:off drawontop:off wirecolor:yellow
|
|
PivotPointHelper.name = ((MSobj.name as string) + "_PivotPoint")
|
|
|
|
in coordsys world PivotPointHelper.rotation = inverse(MSobj.transform.rotationPart)
|
|
in coordsys world PivotPointHelper.pos = MSobj.transform.pos
|
|
tempRet = PivotPointHelper
|
|
)
|
|
|
|
return tempRet
|
|
)catch()
|
|
),
|
|
|
|
function DoPosRotConst SelectedObj PARENTOBJ =
|
|
(
|
|
SelectedObj.position.controller = position_constraint()
|
|
SelectedObj.rotation.controller = orientation_constraint()
|
|
|
|
SelectedObj.position.controller.appendTarget PARENTOBJ 100
|
|
SelectedObj.rotation.controller.appendTarget PARENTOBJ 100
|
|
|
|
SelectedObj.position.controller.relative = false
|
|
SelectedObj.rotation.controller.relative = false
|
|
),
|
|
|
|
fn DoRotConst SelectedObj PARENTOBJ =
|
|
(
|
|
SelectedObj.rotation.controller = orientation_constraint()
|
|
SelectedObj.rotation.controller.appendTarget PARENTOBJ 100
|
|
SelectedObj.rotation.controller.relative = false
|
|
),
|
|
|
|
function SetBipPosAndRot BipTarget: BoneSource: step: =
|
|
(
|
|
biped.setTransform BipTarget #pos BoneSource.pos true
|
|
biped.setTransform BipTarget #rotation BoneSource.transform.rotation true
|
|
),
|
|
|
|
function SetBipRot BipTarget: BoneSource: step: =
|
|
(
|
|
biped.setTransform BipTarget #rotation BoneSource.transform.rotation true
|
|
),
|
|
|
|
function SetBipPos BipTarget: BoneSource: step: =
|
|
(
|
|
biped.setTransform BipTarget #pos BoneSource.pos true
|
|
),
|
|
|
|
|
|
function DoFBXtoBipXFer =
|
|
(
|
|
|
|
FBXtoBipXFer.LThighRef = (FBXtoBipXFerStruct.DoCreatePointAtPivot ObjectForNull:#($'_Bip01 L Thigh'))
|
|
FBXtoBipXFer.RThighRef = (FBXtoBipXFerStruct.DoCreatePointAtPivot ObjectForNull:#($'_Bip01 R Thigh'))
|
|
|
|
FBXtoBipXFer.LThighRef.parent = $'_Bip01 L Thigh'
|
|
FBXtoBipXFer.RThighRef.parent = $'_Bip01 R Thigh'
|
|
|
|
FBXtoBipXFer.PelvisRef = point name:"PelvisReferenceLocation" size:3
|
|
|
|
FBXtoBipXFerStruct.DoPosRotConst FBXtoBipXFer.PelvisRef FBXtoBipXFer.LThighRef
|
|
FBXtoBipXFerStruct.DoPosRotConst FBXtoBipXFer.PelvisRef FBXtoBipXFer.RThighRef
|
|
|
|
FBXtoBipXFer.PelvisRot = point pos:(FBXtoBipXFer.PelvisRef.transform.pos) name:"PelvisReferenceRotation" size:3 isSlected:off cross:off box:on
|
|
FBXtoBipXFer.PelvisRot.parent = FBXtoBipXFer.PelvisRef
|
|
|
|
FBXtoBipXFerStruct.DoRotConst FBXtoBipXFer.PelvisRot $'_Bip01 Pelvis'
|
|
|
|
FBXtoBipXFer.PelvisRotFinal = (FBXtoBipXFerStruct.DoCreatePointAtPivot ObjectForNull:FBXtoBipXFer.PelvisRot)
|
|
|
|
in coordsys local rotate FBXtoBipXFer.PelvisRotFinal (angleaxis 90 [0,1,0])
|
|
in coordsys local rotate FBXtoBipXFer.PelvisRotFinal (angleaxis 90 [0,0,1])
|
|
|
|
FBXtoBipXFer.PelvisRotFinal.parent = FBXtoBipXFer.PelvisRot
|
|
|
|
setCommandPanelTaskMode mode:#create -- Sets the command panel to create. Motion panel slows down processing.
|
|
cui.commandPanelOpen = false -- hides the command panel
|
|
clearSelection() -- clears the selection
|
|
|
|
if (viewport.getlayout()) != #layout_1 do (max tool maximize) -- If the viewport is not maximized then it will do so.
|
|
|
|
StartFrame = animationRange.start.frame as integer
|
|
EndFrame = animationRange.end.frame as integer
|
|
|
|
frameCount = EndFrame - StartFrame
|
|
|
|
progressFrameSteps = undefined
|
|
progressFrameSteps = 100.0 / frameCount
|
|
|
|
|
|
|
|
rollout AnimXferProgress "AnimationTransfer Progress" width:525 height:32
|
|
(
|
|
label ProgressInfo "Processing Animation Transfer" pos:[10,2] width:300 height:15
|
|
label CurrentFrameLabel "Frame:" pos:[400,2] width:35 height:15
|
|
label CurrentFrame "" pos:[440,2] width:80 height:15
|
|
progressBar SubProgress "" pos:[10,17] width:505 height:7 color:blue
|
|
progressBar MainProgress "" pos:[10,23] width:505 height:7 color:green
|
|
)
|
|
createdialog AnimXferProgress
|
|
|
|
animButtonState = true
|
|
|
|
for x = 0 to frameCount do
|
|
with redraw off
|
|
(
|
|
slidertime = (StartFrame + x)
|
|
|
|
AnimXferProgress.CurrentFrame.text = (slidertime.frame as integer) as string
|
|
AnimXferProgress.MainProgress.value = (progressFrameSteps * x + 1) -- I commented this out for speed
|
|
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01' BoneSource:FBXtoBipXFer.PelvisRotFinal
|
|
|
|
biped.setTransform $'Bip01 Pelvis' #rotation $'Bip01 Pelvis'.transform.rotation true
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 Spine' BoneSource:$'_Bip01 Spine' step:2
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 Spine1' BoneSource:$'_Bip01 Spine1' step:3
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 Spine2' BoneSource:$'_Bip01 Spine2' step:3
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 Spine3' BoneSource:$'_Bip01 Spine3' step:3
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 Neck' BoneSource:$'_Bip01 Neck' step:4
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 Head' BoneSource:$'_Bip01 Head' step:5
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 L Clavicle' BoneSource:$'_Bip01 L Clavicle' step:6
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 L UpperArm' BoneSource:$'_Bip01 L UpperArm' step:7
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 L Forearm' BoneSource:$'_Bip01 L Forearm' step:8
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 L Hand' BoneSource:$'_Bip01 L Hand' step:9
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 L Finger0' BoneSource:$'_Bip01 L Finger0' step:10
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 L Finger01' BoneSource:$'_Bip01 L Finger01' step:11
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 L Finger02' BoneSource:$'_Bip01 L Finger02' step:12
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 L Finger1' BoneSource:$'_Bip01 L Finger1' step:13
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 L Finger11' BoneSource:$'_Bip01 L Finger11' step:14
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 L Finger12' BoneSource:$'_Bip01 L Finger12' step:15
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 L Finger2' BoneSource:$'_Bip01 L Finger2' step:16
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 L Finger21' BoneSource:$'_Bip01 L Finger21' step:17
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 L Finger22' BoneSource:$'_Bip01 L Finger22' step:18
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 L Finger3' BoneSource:$'_Bip01 L Finger3' step:19
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 L Finger31' BoneSource:$'_Bip01 L Finger31' step:20
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 L Finger32' BoneSource:$'_Bip01 L Finger32' step:21
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 L Finger4' BoneSource:$'_Bip01 L Finger4' step:22
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 L Finger41' BoneSource:$'_Bip01 L Finger41' step:23
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 L Finger42' BoneSource:$'_Bip01 L Finger42' step:24
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 R Clavicle' BoneSource:$'_Bip01 R Clavicle' step:25
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 R UpperArm' BoneSource:$'_Bip01 R UpperArm' step:26
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 R Forearm' BoneSource:$'_Bip01 R Forearm' step:27
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 R Hand' BoneSource:$'_Bip01 R Hand' step:28
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 R Finger0' BoneSource:$'_Bip01 R Finger0' step:29
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 R Finger01' BoneSource:$'_Bip01 R Finger01' step:30
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 R Finger02' BoneSource:$'_Bip01 R Finger02' step:31
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 R Finger1' BoneSource:$'_Bip01 R Finger1' step:31
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 R Finger11' BoneSource:$'_Bip01 R Finger11' step:33
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 R Finger12' BoneSource:$'_Bip01 R Finger12' step:34
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 R Finger2' BoneSource:$'_Bip01 R Finger2' step:35
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 R Finger21' BoneSource:$'_Bip01 R Finger21' step:36
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 R Finger22' BoneSource:$'_Bip01 R Finger22' step:37
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 R Finger3' BoneSource:$'_Bip01 R Finger3' step:38
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 R Finger31' BoneSource:$'_Bip01 R Finger31' step:39
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 R Finger32' BoneSource:$'_Bip01 R Finger32' step:40
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 R Finger4' BoneSource:$'_Bip01 R Finger4' step:41
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 R Finger41' BoneSource:$'_Bip01 R Finger41' step:42
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 R Finger42' BoneSource:$'_Bip01 R Finger42' step:43
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 L Thigh' BoneSource:$'_Bip01 L Thigh' step:44
|
|
--FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 L Calf' BoneSource:$'_Bip01 L Calf' step:45
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 L Foot' BoneSource:$'_Bip01 L Foot' step:46
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 L Toe0' BoneSource:$'_Bip01 L Toe0' step:47
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 R Thigh' BoneSource:$'_Bip01 R Thigh' step:48
|
|
--FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 R Calf' BoneSource:$'_Bip01 R Calf' step:49
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 R Foot' BoneSource:$'_Bip01 R Foot' step:50
|
|
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 R Toe0' BoneSource:$'_Bip01 R Toe0' step:51
|
|
gc() -- I added this garbage collection to try to speed up the script.
|
|
)
|
|
|
|
delete FBXtoBipXFer.PelvisRef
|
|
delete FBXtoBipXFer.PelvisRot
|
|
delete FBXtoBipXFer.PelvisRotFinal
|
|
delete FBXtoBipXFer.LThighRef
|
|
delete FBXtoBipXFer.RThighRef
|
|
animButtonState = false
|
|
destroyDialog AnimXferProgress
|
|
cui.commandPanelOpen = true
|
|
)
|
|
)
|
|
|
|
FBXtoBipXFer = FBXtoBipXFerStruct()
|
|
|
|
|
|
FBXtoBipXFer.DoFBXtoBipXFer()
|