Files
o3de/Tools/maxscript/FBX_Bones_to_Bip.ms
T
2021-03-25 13:57:57 -07:00

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