Jump to content

XML:TRAM: Difference between revisions

1,702 bytes added ,  3 September 2020
Added step-by-step guide on how to use the Blender throw script.
(Further documentation of Blender Forward throw adjustment script)
(Added step-by-step guide on how to use the Blender throw script.)
Line 860: Line 860:


What this script does is, for each frame of the range you specify, rotate the selected object by 180 degrees (or however many you want), and translate it by a given Position offset, that's available in the <TargetAdjustment> <Position> tag of the attacker's throw animation XML. It also has a frame checking functionality that's bugged; however, ultimately there is no real reason at the moment to use it - however, it may come in handy in the future, so it should be left in this snippet commented.
What this script does is, for each frame of the range you specify, rotate the selected object by 180 degrees (or however many you want), and translate it by a given Position offset, that's available in the <TargetAdjustment> <Position> tag of the attacker's throw animation XML. It also has a frame checking functionality that's bugged; however, ultimately there is no real reason at the moment to use it - however, it may come in handy in the future, so it should be left in this snippet commented.
Step-by-step guide on using this script:
'''Step 1:''' Import a throw animation and its target animation into Blender.
'''Step 2:''' Open Scripting tab.
'''Step 3:''' Create a new text, and name it however you want with .py extension, e.g. TRAMAdjuster.py
'''Step 4:''' Paste the script.
'''Step 5:''' In the following lines:
<pre>scene.frame_set(start)
for i in range(start, end):</pre>
Set ''start'' and ''end'' to the start frame of the animation (always 0 for vanilla anims, but if you're animating and starting from 1, you'll want it set to 1) and the ''end'' to the end+1 frame of your animation, meaning, if you have a 99 frame animation, set ''end'' to 100.
'''Step 6:''' In the following line:
<pre>add_object_offset_about_cursor_Z(obj,x,-z,-y) #translate object</pre>
Paste the values from the <Position> tag accordingly to the order in the arguments of the function. The minus means the value should be inverted in the function. As an example, assuming you have the following <Position> tag:
<pre><Position>1 2 -3</Position></pre>
The function should be following:
<pre>add_object_offset_about_cursor_Z(obj,1,3,-2) #translate object</pre>
'''Step 7:''' Select the pelvis of the target animation.
'''Step 8:''' Press Shift + C to ensure your 3D cursor is in the center of the animation.
'''Step 9:''' Set the Transform Pivot Point to 3D Cursor.
'''Step 10:''' In the Scripting tab, run the script.
'''Step 11:''' The target should be now adjusted as expected.
'''Step 12:''' If you want to revert the target back to an exportable position and rotation, simply invert the z argument in the add_object_offset_about_cursor_Z function and run the script again.


<pre>import bpy
<pre>import bpy
Line 901: Line 942:
#obj.keyframe_insert(data_path="location", frame = 100)
#obj.keyframe_insert(data_path="location", frame = 100)


scene.frame_set(0) #set start frame
scene.frame_set(start) #set start frame
for i in range(0, 100): #loop for every frame
for i in range(start, end): #loop for every frame
#if obj.is_keyframe(i, obj.path_from_id("location")): Bugged keyframe-check
#if obj.is_keyframe(i, obj.path_from_id("location")): Bugged keyframe-check
scene.frame_set(i)
scene.frame_set(i)
rotate_object_about_cursor_Z(obj, 180) #rotate object
rotate_object_about_cursor_Z(obj, 180) #rotate object
add_object_offset_about_cursor_Z(obj,1,1,1) #translate object
add_object_offset_about_cursor_Z(obj,x,-z,y) #translate object
obj.keyframe_insert(data_path="rotation_euler", frame=i) #keyframe rotation
obj.keyframe_insert(data_path="rotation_euler", frame=i) #keyframe rotation
obj.keyframe_insert(data_path="location", frame=i) #keyframe location
obj.keyframe_insert(data_path="location", frame=i) #keyframe location
191

edits