save startup to fix blender opening on 2nd monitor
This commit is contained in:
2026-03-24 14:03:54 -06:00
parent 9fcddeca02
commit e75144efca
28 changed files with 337 additions and 129 deletions
+8 -8
View File
@@ -10,13 +10,13 @@ D:\Work\9 iClone\Amazon\
D:\Amazon\00_external-files\ D:\Amazon\00_external-files\
N:\1. CHARACTERS\remapping\ N:\1. CHARACTERS\remapping\
[Recent] [Recent]
T:\250827_FestivalTurf\Blends\animations\07 Final Touches And Maintenance\blendcache_Visual_new_final\drinkfluid\ P:\260217_Jarvis-Defense\Blends\animations\
A:\1 Amazon_Active_Projects\260206_Dock_Unified\Blends\stills\Waterspider A\ A:\1 Amazon_Active_Projects\260225_Problem-Solve_2026\Blends\animations\
A:\1 Amazon_Active_Projects\260206_Dock_Unified\Deliverable\WSA\ A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\stills\img-BG\
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\stills\
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Deliverable\
A:\1 Amazon_Active_Projects\0 AssetArchive\ A:\1 Amazon_Active_Projects\0 AssetArchive\
A:\1 Amazon_Active_Projects\1 BlenderAssets\ A:\1 Amazon_Active_Projects\0 AssetArchive\Amazon\
C:\Users\Nathan\Desktop\
A:\1 Amazon_Active_Projects\1 BlenderAssets\Amazon\Mat\
A:\1 Amazon_Active_Projects\1 BlenderAssets\Amazon\
P:\260217_Jarvis-Defense\Assets\Blends\Char\
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\animations\ A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\animations\
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Assets\Blends\
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Assets\Graphics\
+108 -65
View File
@@ -1,12 +1,114 @@
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\animations\noncon_OOG_short_animation 1a_part1.blend P:\260217_Jarvis-Defense\Blends\animations\Shot_4.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\animations\noncon_OOG_short_animation 1a_part2.blend A:\1 Amazon_Active_Projects\260225_Problem-Solve_2026\Blends\animations\PS_2026_animation short 1a.blend
T:\250827_FestivalTurf\Blends\animations\07 Final Touches And Maintenance\Visual_new_final.blend C:\Users\Nathan\Downloads\Shot_5c.blend
C:\Users\Nathan\Downloads\Shot_5b.blend
C:\Users\Nathan\Downloads\Shot_4d_f.blend
P:\260217_Jarvis-Defense\Blends\animations\Shot_Q.blend
P:\260217_Jarvis-Defense\Blends\animations\Shot_2.blend
F:\jobs\Shot_4d_f-4pth\Shot_4_redo_fall.flamenco.blend
F:\jobs\Shot_5c\Shot_Q.flamenco.blend
F:\jobs\Shot_5b\Shot_Q.flamenco.blend
C:\Users\Nathan\Downloads\Visual_new_final\Visual_new_final.blend
P:\250827_FestivalTurf\Blends\animations\07 Final Touches And Maintenance\Visual_new_final.blend P:\250827_FestivalTurf\Blends\animations\07 Final Touches And Maintenance\Visual_new_final.blend
C:\Users\Nathan\Downloads\Shot_7.blend
F:\jobs\Shot_7-qlk2\Shot_4.flamenco.blend
C:\Users\Nathan\Downloads\Shot_4.blend
F:\jobs\Shot_7-p1na\Shot_4.flamenco.blend
P:\260217_Jarvis-Defense\Blends\animations\Shot_3_retimed.blend
F:\jobs\Shot_3a-fpm9\Shot_3_retimed.flamenco.blend
F:\jobs\Shot_1c-1rui\Shot_1.flamenco.blend
C:\Users\Nathan\Downloads\Shot_2a.blend
T:\260217_Jarvis-Defense\Blends\animations\Shot_4_redo_fall.blend
C:\Users\Nathan\Downloads\Shot_1c.blend
C:\Users\Nathan\Downloads\Shot_1b.blend
F:\jobs\Shot_1b-qrzg\Shot_1.flamenco.blend
C:\Users\Nathan\Downloads\Shot_1.flamenco.blend
P:\260217_Jarvis-Defense\Assets\Blends\Char\Priest_v3.0.blend
F:\jobs\shot_2a-ja00\Shot_2.flamenco.blend
C:\Users\Nathan\Downloads\Shot_3_retimed.flamenco.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\animations\noncon_OOG_short_animation 1b.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\animations\noncon_OOG_short_animation 1c.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\stills\i_noncon_OOG_9o.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\stills\i_noncon_OOG_9m.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\stills\i_noncon_OOG_9k.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\stills\i_noncon_OOG_9h.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\animations\noncon_OOG_short_animation 13bJ.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\stills\i_noncon_OOG_9e.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\stills\i_noncon_OOG_9b.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\stills\i_noncon_OOG_9d.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\animations\noncon_OOG_short_animation 10bF.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\stills\i_noncon_OOG_9a.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\animations\noncon_OOG_short_animation 13bC.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\animations\noncon_OOG_short_animation 13bD.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\animations\noncon_OOG_short_animation 9bC.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\animations\noncon_OOG_short_animation 9bG.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\animations\noncon_OOG_short_animation 9bB.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\animations\noncon_OOG_short_animation 9bD_2.blend
T:\1 BlenderAssets\Amazon\Char\Cartoon3\Steve_v1.2.blend
T:\1 BlenderAssets\Amazon\Char\Cartoon2\AS\Sarah_v3.3.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\stills\i_noncon_OOG_4b.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\stills\i_noncon_OOG_4a.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\stills\i_noncon_OOG_2j.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\stills\i_noncon_OOG_2i.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\stills\i_noncon_OOG_1b.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\stills\i_noncon_OOG_2a.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\stills\i_noncon_OOG_1a.blend
A:\1 Amazon_Active_Projects\1 BlenderAssets\Amazon\Scenes\AMZ-warehouse_v6.1_small.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\animations\noncon_OOG_short_animation 10bD.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\stills\i_noncon_OOG_10a.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\stills\i_noncon_OOG_9l.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\stills\i_noncon_OOG_9c.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\stills\i_noncon_OOG_8f.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\stills\i_noncon_OOG_8d.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\stills\i_noncon_OOG_8c.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\stills\i_noncon_OOG_8g.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\stills\i_noncon_OOG_5b.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\animations\noncon_OOG_short_animation 9a_v3.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\animations\noncon_OOG_short_animation 9a_v2.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\stills\i_noncon_OOG_7b.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\stills\i_noncon_OOG_7c.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\stills\i_noncon_OOG_7a.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Assets\Blends\AMZ-warehouse_v6.2_small.blend
T:\260317_NONCON_2026\Blends\animations\noncon_OOG_short_animation 9bB.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\stills\i_noncon_OOG_2f.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\stills\i_noncon_OOG_2c.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\stills\i_noncon_OOG_9i.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\animations\noncon_OOG_short_animation 12C.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\animations\noncon_OOG_short_animation 12A.blend
A:\1 Amazon_Active_Projects\1 BlenderAssets\Amazon\Char\Cartoon3\Liam_v1.2.blend
A:\1 Amazon_Active_Projects\1 BlenderAssets\Amazon\Char\Cartoon3\Tony_v1.2.blend
A:\1 Amazon_Active_Projects\260206_Dock_Unified\Blends\stills\Path 3\iDock_Path4_4d_red.blend
A:\1 Amazon_Active_Projects\260206_Dock_Unified\Blends\stills\Path 3\iDock_Path4_4d_yellow.blend
A:\1 Amazon_Active_Projects\260206_Dock_Unified\Blends\stills\Path 3\iDock_Path3_6_yellow.blend
A:\1 Amazon_Active_Projects\260206_Dock_Unified\Blends\stills\Path 3\iDock_Path3_6_red.blend
A:\1 Amazon_Active_Projects\260206_Dock_Unified\Blends\stills\Waterspider A\WS_A_go-cart loading_f.blend
T:\260206_Dock_Unified\Blends\stills\Waterspider A\WS_A_go-cart loading_f.blend
T:\260206_Dock_Unified\Blends\stills\Waterspider A\WS_A_go-cart loading_d.blend
T:\260206_Dock_Unified\Blends\stills\Waterspider A\WS_A_go-cart loading_b.blend
T:\260206_Dock_Unified\Blends\stills\Waterspider A\iWS_A_6.blend
T:\260206_Dock_Unified\Blends\stills\Waterspider B\MISC_WS-B_swapping.blend
T:\260206_Dock_Unified\Blends\animations\go_cart_loading\WS_A_go-cart loading_a.blend
G:\Amazon\2024\240322_Amazon_Dock-Safety\blends\ANIMATIONS\Path 3\path 3 images\iDock_Path3_6.blend
T:\260206_Dock_Unified\Blends\stills\Waterspider B\WS_A_go-cart loading_e.blend
T:\260206_Dock_Unified\Blends\stills\Waterspider B\WS_A_go-cart loading_f.blend
A:\1 Amazon_Active_Projects\260206_Dock_Unified\Blends\stills\Waterspider A\WS_A_go-cart loading_f_red.blend
A:\1 Amazon_Active_Projects\260206_Dock_Unified\Blends\stills\Waterspider A\WS_A_go-cart loading_e.blend
A:\1 Amazon_Active_Projects\260206_Dock_Unified\Blends\stills\Waterspider A\WS_A_go-cart loading_a.blend
A:\1 Amazon_Active_Projects\260206_Dock_Unified\Blends\stills\Path 3\iDock_path3_4c.blend
A:\1 Amazon_Active_Projects\260206_Dock_Unified\Blends\animations\Path 3\Path 3_Animation 3a.blend
A:\1 Amazon_Active_Projects\260206_Dock_Unified\Blends\animations\Path 3\Path 3_Animation 3_Aa.blend
A:\1 Amazon_Active_Projects\260206_Dock_Unified\Blends\stills\Path 3\iDock_Path3_6.blend
T:\250827_FestivalTurf\Blends\animations\07 Final Touches And Maintenance\Visual_new_final.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\animations\noncon_OOG_short_animation 2e.blend
T:\260206_Dock_Unified\Blends\animations\Path 3\Path 3_Animation 3_Aa.blend
A:\1 Amazon_Active_Projects\260206_Dock_Unified\Blends\animations\Path 3\Path 3_Animation 3e.blend
A:\1 Amazon_Active_Projects\260206_Dock_Unified\Blends\animations\Path 3\Path 3_Animation 3d.blend
A:\1 Amazon_Active_Projects\260206_Dock_Unified\Blends\animations\Path 3\Path 3_Animation 3c.blend
A:\1 Amazon_Active_Projects\260206_Dock_Unified\Blends\animations\Path 3\Path 3_Animation 3b.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\animations\noncon_OOG_short_animation 1a_part2.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\animations\noncon_OOG_short_animation 1a_part1.blend
A:\1 Amazon_Active_Projects\260206_Dock_Unified\Blends\animations\Waterspider A\WS_A_move go-cart from trailer A.blend A:\1 Amazon_Active_Projects\260206_Dock_Unified\Blends\animations\Waterspider A\WS_A_move go-cart from trailer A.blend
A:\1 Amazon_Active_Projects\260206_Dock_Unified\Blends\stills\Waterspider A\WS_A_go-cart loading_e_red.blend A:\1 Amazon_Active_Projects\260206_Dock_Unified\Blends\stills\Waterspider A\WS_A_go-cart loading_e_red.blend
A:\1 Amazon_Active_Projects\260206_Dock_Unified\Blends\stills\Waterspider A\WS_A_go-cart loading_f_red.blend
A:\1 Amazon_Active_Projects\260206_Dock_Unified\Blends\stills\Waterspider A\WS_A_go-cart loading_f.blend
A:\1 Amazon_Active_Projects\260206_Dock_Unified\Blends\stills\Waterspider A\WS_A_go-cart loading_e.blend
C:\Users\Nathan\Desktop\Untitled.blend C:\Users\Nathan\Desktop\Untitled.blend
A:\1 Amazon_Active_Projects\1 BlenderAssets\Amazon\Char\Cartoon1\Regina_v4.3.blend A:\1 Amazon_Active_Projects\1 BlenderAssets\Amazon\Char\Cartoon1\Regina_v4.3.blend
T:\1 BlenderAssets\Amazon\Char\Cartoon2\AS\Paul_v3.4.blend T:\1 BlenderAssets\Amazon\Char\Cartoon2\AS\Paul_v3.4.blend
@@ -28,13 +130,9 @@ A:\1 Amazon_Active_Projects\260225_Problem-Solve_2026\Blends\animations\PS_2026_
A:\1 Amazon_Active_Projects\260225_Problem-Solve_2026\Blends\animations\PS_2026_animation 5E.blend A:\1 Amazon_Active_Projects\260225_Problem-Solve_2026\Blends\animations\PS_2026_animation 5E.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\animations\noncon_OOG_short_animation 2f.blend A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\animations\noncon_OOG_short_animation 2f.blend
A:\1 Amazon_Active_Projects\1 BlenderAssets\Amazon\Mat\MATERIALS_BSDF_pallette_v1.0.blend A:\1 Amazon_Active_Projects\1 BlenderAssets\Amazon\Mat\MATERIALS_BSDF_pallette_v1.0.blend
A:\1 Amazon_Active_Projects\1 BlenderAssets\Amazon\Scenes\AMZ-warehouse_v6.1_small.blend
A:\1 Amazon_Active_Projects\1 BlenderAssets\Amazon\Scenes\AMZ-warehouse_v5.1.blend A:\1 Amazon_Active_Projects\1 BlenderAssets\Amazon\Scenes\AMZ-warehouse_v5.1.blend
A:\1 Amazon_Active_Projects\1 BlenderAssets\Amazon\Scenes\AMZ-warehouse_BSDF_v4.0.blend A:\1 Amazon_Active_Projects\1 BlenderAssets\Amazon\Scenes\AMZ-warehouse_BSDF_v4.0.blend
P:\260217_Jarvis-Defense\Assets\Blends\3075 Decade Dr.blend P:\260217_Jarvis-Defense\Assets\Blends\3075 Decade Dr.blend
P:\260217_Jarvis-Defense\Blends\animations\Shot_Q.blend
P:\260217_Jarvis-Defense\Assets\Blends\Char\Priest_v3.0.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\animations\noncon_OOG_short_animation 2e.blend
C:\Users\Nathan\Downloads\noncon_OOG_short_animation 2d.blend C:\Users\Nathan\Downloads\noncon_OOG_short_animation 2d.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\animations\noncon_OOG_short_animation 2d.blend A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\animations\noncon_OOG_short_animation 2d.blend
A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\animations\noncon_OOG_short_animation 9a.blend A:\1 Amazon_Active_Projects\260317_NONCON_2026\Blends\animations\noncon_OOG_short_animation 9a.blend
@@ -96,62 +194,7 @@ A:\1 Amazon_Active_Projects\260311_PnS-Beyond-Day-2\Blends\animations\P&S_BD2_an
A:\1 Amazon_Active_Projects\260311_PnS-Beyond-Day-2\Blends\animations\P&S_BD2_animation 10b_part3.blend A:\1 Amazon_Active_Projects\260311_PnS-Beyond-Day-2\Blends\animations\P&S_BD2_animation 10b_part3.blend
A:\1 Amazon_Active_Projects\260311_PnS-Beyond-Day-2\Blends\animations\P&S_BD2_animation 10b_part2.blend A:\1 Amazon_Active_Projects\260311_PnS-Beyond-Day-2\Blends\animations\P&S_BD2_animation 10b_part2.blend
A:\1 Amazon_Active_Projects\260311_PnS-Beyond-Day-2\Blends\animations\P&S_BD2_animation 10b_part1.blend A:\1 Amazon_Active_Projects\260311_PnS-Beyond-Day-2\Blends\animations\P&S_BD2_animation 10b_part1.blend
P:\260217_Jarvis-Defense\Blends\animations\Shot_4.blend
P:\260217_Jarvis-Defense\Blends\animations\Shot_3_retimed.blend
F:\jobs\Shot_4c\Shot_4.flamenco.blend F:\jobs\Shot_4c\Shot_4.flamenco.blend
F:\jobs\Shot_4e\Shot_4.flamenco.blend F:\jobs\Shot_4e\Shot_4.flamenco.blend
F:\jobs\Shot_4a\Shot_4.flamenco.blend F:\jobs\Shot_4a\Shot_4.flamenco.blend
F:\jobs\Shot_4g\Shot_4.flamenco.blend F:\jobs\Shot_4g\Shot_4.flamenco.blend
F:\jobs\Shot_1a-tqpj\Shot_1.flamenco.blend
F:\jobs\Shot_6-4dkh\closeup.flamenco.blend
F:\jobs\Shot_0_5a\Shot_0_5.flamenco.blend
P:\260217_Jarvis-Defense\Blends\animations\closeup.blend
F:\jobs\Shot5c\Shot_Q.flamenco.blend
F:\jobs\Shot5b\Shot_Q.flamenco.blend
F:\jobs\Shot5a\Shot_Q.flamenco.blend
A:\1 Amazon_Active_Projects\260311_PnS-Beyond-Day-2\Blends\stills\iP&S_BD2_11b.blend
A:\1 Amazon_Active_Projects\260311_PnS-Beyond-Day-2\Blends\animations\P&S_BD2_animation 3a_part1.blend
A:\1 Amazon_Active_Projects\260311_PnS-Beyond-Day-2\Blends\animations\P&S_BD2_animation 3a.blend
P:\260217_Jarvis-Defense\Blends\animations\Shot_2.blend
P:\260217_Jarvis-Defense\Blends\animations\Shot_1.blend
C:\Users\Nathan\Downloads\Shot_1\Shot_1.blend
P:\260217_Jarvis-Defense\Blends\animations\Shot_0_5.blend
T:\260217_Jarvis-Defense\Blends\animations\Shot_1.blend
F:\jobs\iP&S_BD2_5a\P&S_BD2_animation 3a_part2.flamenco.blend
P:\260217_Jarvis-Defense\Assets\Blends\Props\City_bike.blend
C:\Users\Nathan\Downloads\Shot5\Shot5c.blend
C:\Users\Nathan\Downloads\Shot5\Shot5b.blend
C:\Users\Nathan\Downloads\Shot5\Shot5a.blend
C:\Users\Nathan\Downloads\Shot5\Shot_Q.blend
P:\260217_Jarvis-Defense\Assets\Downloads\uploads_files_3527670_Dry+van.blend
P:\260217_Jarvis-Defense\Assets\Blends\Vehicles\Ford 250_v2.0.blend
F:\jobs\Shot_thur_5a\Shot_Q.flamenco.blend
P:\260217_Jarvis-Defense\Assets\Blends\Char\Chase_v3.0.blend
P:\260217_Jarvis-Defense\Assets\Blends\Char\Russell_v4.0.blend
P:\260217_Jarvis-Defense\Blends\animations\Shot_3.blend
T:\260217_Jarvis-Defense\Assets\Blends\Char\Chase_v2.0.blend
P:\260217_Jarvis-Defense\Assets\Blends\Char\Priest_v2.0.blend
D:\Work\9 iClone\Jarvis Defense\Blender\Dec_v5.blend
C:\Users\Nathan\Desktop\Shot5c.blend
C:\Users\Nathan\Downloads\startup.blend
P:\260217_Jarvis-Defense\Blends\animations\Shot_L.blend
C:\Users\Nathan\Downloads\Shot_4_c.blend
C:\Users\Nathan\Downloads\Shot_4.blend
P:\260217_Jarvis-Defense\Blends\animations\shot 3.blend
P:\260217_Jarvis-Defense\Assets\Blends\Vehicles\Ford 250.blend
P:\260217_Jarvis-Defense\Assets\Blends\Vehicles\Ford 250_NL.blend
C:\Users\Nathan\AppData\Local\Temp\2026-03-10_11-52_Ford 250.blend
F:\jobs\Shot_jeds_long_take-uwhb\Shot_4.flamenco.blend
P:\260217_Jarvis-Defense\Assets\Blends\Char\Chase_v2.0.blend
\\NEXUS\proj\260217_Jarvis-Defense\Assets\Blends\Char\Chase_v3.0.blend
P:\260217_Jarvis-Defense\Assets\Blends\Char\Russell_v3.1.blend
P:\260217_Jarvis-Defense\Assets\Blends\Char\Russell_v3.0.blend
D:\Work\9 iClone\Jarvis Defense\Blender\Kayla_Russell_v4.blend
D:\Work\9 iClone\Jarvis Defense\Blender\Kayla_Russell_dress.blend
P:\260217_Jarvis-Defense\Blends\animations\Jarvis-Defense_L.blend
P:\260217_Jarvis-Defense\Blends\animations\shot 2 avoid.blend
P:\260217_Jarvis-Defense\Assets\Blends\Vehicles\Pop Up Camper.blend
C:\Users\Nathan\SynologyDrive\Desktop\260217_Jarvis-Defense\Blends\animations\Shot_4.blend
P:\260217_Jarvis-Defense\Assets\Blends\Char\Russell_v2.0.blend
P:\260217_Jarvis-Defense\Assets\Blends\Char\Russell_v1.0.blend
C:\Users\Nathan\SynologyDrive\Desktop\260217_Jarvis-Defense\Assets\Blends\Char\Russell_v2.0.blend
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -20,7 +20,7 @@
bl_info = { bl_info = {
"name": "Animation Layers", "name": "Animation Layers",
"author": "Tal Hershkovich", "author": "Tal Hershkovich",
"version" : (2, 3, 5), "version" : (2, 3, 7),
"blender" : (3, 2, 0), "blender" : (3, 2, 0),
"location": "View3D - Properties - Animation Panel", "location": "View3D - Properties - Animation Panel",
"description": "Simplifying the NLA editor into an animation layers UI and workflow", "description": "Simplifying the NLA editor into an animation layers UI and workflow",
@@ -84,7 +84,7 @@ def make_annotations(cls):
if bl_props: if bl_props:
if '__annotations__' not in cls.__dict__: if '__annotations__' not in cls.__dict__:
setattr(cls, '__annotations__', {}) setattr(cls, '__annotations__', {})
annotations = cls.__dict__['__annotations__'] annotations = cls.__dict__.get('__annotations__', {})
for k, v in bl_props.items(): for k, v in bl_props.items():
annotations[k] = v annotations[k] = v
delattr(cls, k) delattr(cls, k)
@@ -1376,10 +1376,12 @@ def register(bl_info):
# other considerations and suggestions from a security standpoint # other considerations and suggestions from a security standpoint
# "tokenstring" Need read api and read repo permission # "tokenstring" Need read api and read repo permission
# updater.private_token = "glpat-K6GjFFka_J6o3GTbe3JK" # updater.private_token = "glpat-K6GjFFka_J6o3GTbe3JK"
updater.private_token = "glpat-js__ikigVSQ_tKWgjVn1" # updater.private_token = "glpat-js__ikigVSQ_tKWgjVn1"
updater.private_token = "glpat-5rHfAdBG2Br3ww6H8U4vI286MQp1OjFpcXEK.01.100el42cj"
# choose your own username, must match website (not needed for GitLab) # choose your own username, must match website (not needed for GitLab)
updater.user = "" updater.user = ""
# choose your own repository, must match git name for GitHUb and Bitbucket, # choose your own repository, must match git name for GitHUb and Bitbucket,
# for GitLab use project ID (numbers only) # for GitLab use project ID (numbers only)
updater.repo = "22294607" updater.repo = "22294607"
+136 -17
View File
@@ -2,7 +2,8 @@ import bpy
import os import os
import numpy as np import numpy as np
from bpy_extras import anim_utils from bpy_extras import anim_utils
import sys import bisect
# import sys
from bpy.app.handlers import persistent from bpy.app.handlers import persistent
from . import bake_ops from . import bake_ops
@@ -270,6 +271,7 @@ def register_layers(obj, nla_tracks):
continue continue
strip = track.strips[0] strip = track.strips[0]
use_animated_influence(strip) use_animated_influence(strip)
strip.influence = 1
#updating the ui list with the nla track names #updating the ui list with the nla track names
def visible_layers(obj, nla_tracks): def visible_layers(obj, nla_tracks):
@@ -342,15 +344,20 @@ def use_animated_influence(strip):
return return
fcu_len = len(strip.fcurves) fcu_len = len(strip.fcurves)
strip.use_animated_influence = True strip.use_animated_influence = True
if fcu_len != len(strip.fcurves): if fcu_len != len(strip.fcurves):
if hasattr(strip.fcurves[0].keyframe_points, 'clear'): if len(strip.fcurves[0].keyframe_points):
strip.fcurves[0].keyframe_points.clear() keyframes = strip.fcurves[0].keyframe_points
else: # value = keyframes[0].co.y
keyframe = strip.fcurves[0].keyframe_points[0] # print('influence value ', keyframes[0])
strip.fcurves[0].keyframe_points.remove(keyframe) if hasattr(keyframes, 'clear'):
keyframes.clear()
strip.influence = 1 else:
keyframe = keyframes[0]
keyframes.remove(keyframe)
strip.influence = 1
def check_override_layers(obj): def check_override_layers(obj):
if obj.override_library is None: if obj.override_library is None:
return False return False
@@ -1291,6 +1298,7 @@ def load_action(self, context):
subscriptions.frameend_update_callback() subscriptions.frameend_update_callback()
strip.use_sync_length = False strip.use_sync_length = False
use_animated_influence(strip) use_animated_influence(strip)
strip.influence = 1
return return
subscriptions.subscriptions_remove() subscriptions.subscriptions_remove()
strip = track.strips[0] strip = track.strips[0]
@@ -1941,6 +1949,7 @@ def add_animlayer(layer_name = 'Anim_Layer' , duplicate = False, index = 1, blen
new_strip.blend_type = blend_type new_strip.blend_type = blend_type
new_strip.use_sync_length = False new_strip.use_sync_length = False
use_animated_influence(new_strip) use_animated_influence(new_strip)
new_strip.influence = 1
return new_track return new_track
@@ -2324,12 +2333,13 @@ class ShareLayerKeys(bpy.types.Operator):
#if the group doesn't exist in the current layer then create one and assign it #if the group doesn't exist in the current layer then create one and assign it
if fcu.group is None: if fcu.group is None:
if group.name in anim_data.action.groups: new_group = add_group_to_fcurve(obj, fcu, group.name)
new_group = anim_data.action.groups[group.name] # if group.name in anim_data.action.groups:
else: # new_group = anim_data.action.groups[group.name]
new_group = anim_data.action.groups.new(group.name) # else:
# new_group = anim_data.action.groups.new(group.name)
fcu.group = new_group # fcu.group = new_group
#exclude the frames that already exist in the current layer action fcurve #exclude the frames that already exist in the current layer action fcurve
if len(fcu.keyframe_points): if len(fcu.keyframe_points):
@@ -2771,6 +2781,110 @@ def sync_frame_range(context):
if use_frame_range: if use_frame_range:
action.use_frame_range = True action.use_frame_range = True
class InfluenceNextKeyframe(bpy.types.Operator):
"""Select the influence keyframes of the current layer"""
bl_idname = "anim.influence_next_key"
bl_label = "Move to the next influence keyframe"
bl_options = {'REGISTER', 'UNDO'}
@classmethod
def poll(cls, context):
anim_data = anim_data_type(context.object)
return hasattr(anim_data,"nla_tracks") and len(anim_data.nla_tracks[context.object.als.layer_index].strips)
def execute(self, context):
strips = influence_get_strips(context)
current_frame = context.scene.frame_current
# The next keyframes from all the strips together
next_keyframes = []
#Assign selection to all strips
for strip in strips:
for fcu in strip.fcurves:
if fcu.data_path != 'influence':
continue
if not len(fcu.keyframe_points):
continue
keys_len = len(fcu.keyframe_points)
#Get the selection of the current keys or the next one in the list
keyframes = np.zeros(keys_len*2)
fcu.keyframe_points.foreach_get('co', keyframes)
frames = keyframes[::2]
next_i = bisect.bisect_right(frames, current_frame)
if next_i >= len(frames):
continue
next_frame = frames[next_i]
next_keyframes.append(next_frame)
if not len(next_keyframes):
return {'CANCELLED'}
next_keyframes.sort()
next_i = bisect.bisect_right(next_keyframes, current_frame)
if next_i >= len(next_keyframes):
return {'CANCELLED'}
next_frame = next_keyframes[next_i]
context.scene.frame_set(int(next_frame))
return {'FINISHED'}
class InfluencePrevKeyframe(bpy.types.Operator):
"""Select the influence keyframes of the current layer"""
bl_idname = "anim.influence_prev_key"
bl_label = "Move to the previous influence keyframe"
bl_options = {'REGISTER', 'UNDO'}
@classmethod
def poll(cls, context):
anim_data = anim_data_type(context.object)
return hasattr(anim_data,"nla_tracks") and len(anim_data.nla_tracks[context.object.als.layer_index].strips)
def execute(self, context):
strips = influence_get_strips(context)
current_frame = context.scene.frame_current
# The prev keyframes from all the strips together
prev_keyframes = []
#Assign selection to all strips
for strip in strips:
for fcu in strip.fcurves:
if fcu.data_path != 'influence':
continue
if not len(fcu.keyframe_points):
continue
keys_len = len(fcu.keyframe_points)
#Get the selection of the current keys or the prev one in the list
keyframes = np.zeros(keys_len*2)
fcu.keyframe_points.foreach_get('co', keyframes)
frames = keyframes[::2]
prev_i = bisect.bisect_left(frames, current_frame)
if prev_i:
prev_i -= 1
prev_frame = frames[prev_i]
prev_keyframes.append(prev_frame)
if not len(prev_keyframes):
return {'CANCELLED'}
prev_keyframes.sort()
prev_i = bisect.bisect_left(prev_keyframes, current_frame)
if prev_i:
prev_i -= 1
prev_frame = prev_keyframes[prev_i]
context.scene.frame_set(int(prev_frame))
return {'FINISHED'}
class SelectInfluenceKeys(bpy.types.Operator): class SelectInfluenceKeys(bpy.types.Operator):
"""Select the influence keyframes of the current layer""" """Select the influence keyframes of the current layer"""
bl_idname = "anim.select_influence_keys" bl_idname = "anim.select_influence_keys"
@@ -2921,8 +3035,8 @@ def panelFactory(space_type):
track = anim_data.nla_tracks[obj.als.layer_index] track = anim_data.nla_tracks[obj.als.layer_index]
col=layout.column(align = True) # col=layout.column(align = True)
row = col.row() row = layout.row(align = True)
if not len(track.strips): if not len(track.strips):
return return
@@ -2933,18 +3047,22 @@ def panelFactory(space_type):
#Drawing the influence slider #Drawing the influence slider
if len(strip.fcurves[0].keyframe_points) and not strip.fcurves[0].mute: if len(strip.fcurves[0].keyframe_points) and not strip.fcurves[0].mute:
row.prop(strip, 'influence', slider = True, text = 'Influence') row.prop(strip, 'influence', slider = True, text = 'Influence')
row.operator('anim.influence_prev_key', text = '', icon = 'PREV_KEYFRAME')
row.separator(factor = 0.1)
row.operator('anim.influence_next_key', text = '', icon = 'NEXT_KEYFRAME')
else: else:
row.prop(context.scene.als, 'influence', slider = True, text = 'Influence') row.prop(context.scene.als, 'influence', slider = True, text = 'Influence')
# row.prop(obj.Anim_Layers[obj.als.layer_index], 'influence', slider = True, text = 'Influence') # row.prop(obj.Anim_Layers[obj.als.layer_index], 'influence', slider = True, text = 'Influence')
#Influence SETTINGS #Influence SETTINGS
row.separator(factor = 1.5)
row.prop(context.scene.als, 'influence_settings', text ='', icon = 'SETTINGS') row.prop(context.scene.als, 'influence_settings', text ='', icon = 'SETTINGS')
if context.scene.als.influence_settings: if context.scene.als.influence_settings:
split = layout.split(factor = 0.4) split = layout.split(factor = 0.4)
global_local = 'Global' if context.scene.als.influence_global == True else 'Local' global_local = 'Global' if context.scene.als.influence_global == True else 'Local'
split.prop(context.scene.als, 'influence_global', text = global_local, toggle = True) split.prop(context.scene.als, 'influence_global', text = global_local, toggle = True)
row = split.row() row = split.row(align = True)
row.alignment = 'RIGHT' row.alignment = 'RIGHT'
#Drawing Select influence keys #Drawing Select influence keys
row.operator('anim.select_influence_keys', text="", icon = 'RESTRICT_SELECT_OFF') row.operator('anim.select_influence_keys', text="", icon = 'RESTRICT_SELECT_OFF')
@@ -2957,6 +3075,7 @@ def panelFactory(space_type):
mute_icon = 'MUTE_IPO_OFF' if track.strips[0].fcurves[0].mute else 'MUTE_IPO_ON' mute_icon = 'MUTE_IPO_OFF' if track.strips[0].fcurves[0].mute else 'MUTE_IPO_ON'
row.prop(obj.als, 'influence_mute', icon_only=True, icon = mute_icon) row.prop(obj.als, 'influence_mute', icon_only=True, icon = mute_icon)
row.separator(factor = 1.5)
lock_icon = 'DECORATE_LOCKED' if strip.fcurves[0].lock else 'DECORATE_UNLOCKED' lock_icon = 'DECORATE_LOCKED' if strip.fcurves[0].lock else 'DECORATE_UNLOCKED'
row.prop(obj.als, 'influence_lock', icon_only=True, icon = lock_icon) row.prop(obj.als, 'influence_lock', icon_only=True, icon = lock_icon)
@@ -3289,7 +3408,7 @@ def remove_empty_slots(action):
classes = (AutoCustomFrameRange, ResetLayerKeyframes, LAYERS_UL_list, AddAnimLayer, ExtractSelection, ExtractMarkers, DuplicateAnimLayer, RemoveAnimLayer, CyclicFcurves, RemoveFcurves, MoveAnimLayerUp, classes = (AutoCustomFrameRange, ResetLayerKeyframes, LAYERS_UL_list, AddAnimLayer, ExtractSelection, ExtractMarkers, DuplicateAnimLayer, RemoveAnimLayer, CyclicFcurves, RemoveFcurves, MoveAnimLayerUp,
MoveAnimLayerDown, SelectBonesInLayer, ClearNLA, ClearActiveAction, OverrideError, AddAction, SyncActionLength, RemoveAction, ShareLayerKeys, SelectInfluenceKeys, MoveAnimLayerDown, SelectBonesInLayer, ClearNLA, ClearActiveAction, OverrideError, AddAction, SyncActionLength, RemoveAction, ShareLayerKeys, SelectInfluenceKeys,
AddSlot, RemoveSlot, EditAllLayersOperator) AddSlot, RemoveSlot, EditAllLayersOperator, InfluencePrevKeyframe, InfluenceNextKeyframe)
spaceTypes = ['VIEW_3D', 'GRAPH_EDITOR', 'DOPESHEET_EDITOR', 'NLA_EDITOR'] spaceTypes = ['VIEW_3D', 'GRAPH_EDITOR', 'DOPESHEET_EDITOR', 'NLA_EDITOR']
# panel_classes = (cls for spaceType in spaceTypes for cls in panelFactory(spaceType)) # panel_classes = (cls for spaceType in spaceTypes for cls in panelFactory(spaceType))
@@ -1,6 +1,6 @@
{ {
"last_check": "2026-03-13 10:11:53.265170", "last_check": "2026-03-20 10:19:09.867653",
"backup_date": "December-11-2025", "backup_date": "March-20-2026",
"update_ready": false, "update_ready": false,
"ignore": false, "ignore": false,
"just_restored": false, "just_restored": false,
@@ -20,7 +20,7 @@
bl_info = { bl_info = {
"name": "Animation Layers", "name": "Animation Layers",
"author": "Tal Hershkovich", "author": "Tal Hershkovich",
"version" : (2, 3, 4), "version" : (2, 3, 5),
"blender" : (3, 2, 0), "blender" : (3, 2, 0),
"location": "View3D - Properties - Animation Panel", "location": "View3D - Properties - Animation Panel",
"description": "Simplifying the NLA editor into an animation layers UI and workflow", "description": "Simplifying the NLA editor into an animation layers UI and workflow",
@@ -1049,13 +1049,13 @@ def only_selected_bones(self, context):
def data_type_update(self, context): def data_type_update(self, context):
obj = self.id_data obj = self.id_data
anim_data = anim_data_type(obj) anim_data = anim_data_type(obj)
obj.als['layer_index'] = 0
if anim_data is None: if anim_data is None:
obj.Anim_Layers.clear() obj.Anim_Layers.clear()
return return
if not len(anim_data.nla_tracks): if not len(anim_data.nla_tracks):
obj.Anim_Layers.clear() obj.Anim_Layers.clear()
return return
obj.als.layer_index = 0
register_layers(obj, anim_data.nla_tracks) register_layers(obj, anim_data.nla_tracks)
#change bake method if working with shapekeys #change bake method if working with shapekeys
@@ -1980,12 +1980,14 @@ class AddAnimLayer(bpy.types.Operator):
#starting animation layers and getting the default sync layer names #starting animation layers and getting the default sync layer names
obj.als.auto_rename = context.preferences.addons[__package__].preferences.auto_rename obj.als.auto_rename = context.preferences.addons[__package__].preferences.auto_rename
#Adding base layer #Adding base layer
obj.als['layer_index'] = 0
add_animlayer(base_name, index = 0, blend_type = blend_type) add_animlayer(base_name, index = 0, blend_type = blend_type)
#using a temporary variable instead of calling update_track_list all the time with obj.als.layer_index #using a temporary variable instead of calling update_track_list all the time with obj.als.layer_index
index = 0 index = 0
if anim_data.action: if anim_data.action:
add_animlayer(layer_name, blend_type = blend_type) add_animlayer(layer_name, index, blend_type = blend_type)
index += 1 index += 1
anim_data.action.use_fake_user = True anim_data.action.use_fake_user = True
anim_data.action = None anim_data.action = None
@@ -2705,10 +2707,10 @@ class AddSlot(bpy.types.Operator):
return {'FINISHED'} return {'FINISHED'}
if not hasattr(anim_data, 'action_slot'): if not hasattr(anim_data, 'action_slot'):
return {'FINISHED'} return {'FINISHED'}
index = obj.als.layer_index
if not len(anim_data.nla_tracks[index].strips): if not len(anim_data.nla_tracks[index].strips):
return {'FINISHED'} return {'FINISHED'}
index = obj.als.layer_index
strip = anim_data.nla_tracks[index].strips[0] strip = anim_data.nla_tracks[index].strips[0]
action = strip.action action = strip.action
@@ -2734,10 +2736,10 @@ class RemoveSlot(bpy.types.Operator):
return {'FINISHED'} return {'FINISHED'}
if not hasattr(anim_data, 'action_slot'): if not hasattr(anim_data, 'action_slot'):
return {'FINISHED'} return {'FINISHED'}
index = obj.als.layer_index
if not len(anim_data.nla_tracks[index].strips): if not len(anim_data.nla_tracks[index].strips):
return {'FINISHED'} return {'FINISHED'}
index = obj.als.layer_index
strip = anim_data.nla_tracks[index].strips[0] strip = anim_data.nla_tracks[index].strips[0]
action = strip.action action = strip.action
action_slot = strip.action_slot action_slot = strip.action_slot
@@ -3260,7 +3262,12 @@ def add_action_slot(obj, action):
if action.slots: if action.slots:
for slot in action.slots: for slot in action.slots:
if obj in slot.users(): if obj.als.data_type != slot.target_id_type:
continue
# Shapekey slot users are the shapekey data, object slot users are the objects
item = obj.data.shape_keys if hasattr(obj.data, 'shape_keys') and obj.als.data_type == 'KEY' else obj
if item in slot.users():
return slot return slot
slot = action.slots.new(obj.als.data_type, obj.name) slot = action.slots.new(obj.als.data_type, obj.name)
@@ -1,16 +1,16 @@
{ {
"last_check": "2025-12-11 10:42:47.932340", "last_check": "2026-03-20 10:19:09.867653",
"backup_date": "", "backup_date": "December-11-2025",
"update_ready": true, "update_ready": true,
"ignore": false, "ignore": false,
"just_restored": false, "just_restored": false,
"just_updated": false, "just_updated": false,
"version_text": { "version_text": {
"link": "https://gitlab.com/api/v4/projects/22294607/repository/archive.zip?sha=b3bccbaf23e3171ca198e64cb265eb9bf3810f21", "link": "https://gitlab.com/api/v4/projects/22294607/repository/archive.zip?sha=3868a0c2bd99dde13a2d390a18ffb1db25883f17",
"version": [ "version": [
2, 2,
3, 3,
5 7
] ]
} }
} }
+24 -1
View File
@@ -648,6 +648,14 @@ def AL_bake(frame_start, frame_end, nla_tracks, fcu_keys, additive, step, action
baked_channelbag = anim_layers.get_channelbag(obj, baked_action) baked_channelbag = anim_layers.get_channelbag(obj, baked_action)
baked_fcurves = baked_channelbag.fcurves baked_fcurves = baked_channelbag.fcurves
if not obj.als.smartbake:
interpolation_types = ('CONSTANT', 'LINEAR', 'BEZIER', 'SINE', 'QUAD', 'CUBIC', 'QUART', 'QUINT', 'EXPO', 'CIRC', 'BACK', 'BOUNCE', 'ELASTIC')
handle_types = ('FREE', 'ALIGNED', 'VECTOR', 'AUTO', 'AUTO_CLAMPED')
# Get the index position to assign with foreach_set
interpolation = interpolation_types.index(bpy.context.preferences.edit.keyframe_new_interpolation_type)
handle_type = handle_types.index(bpy.context.preferences.edit.keyframe_new_handle_type)
if obj.als.operator == 'MERGE':# and not additive: # and anim_data.action is not None: #and obj.als.onlyselected if obj.als.operator == 'MERGE':# and not additive: # and anim_data.action is not None: #and obj.als.onlyselected
#overwrite action #overwrite action
anim_data.use_tweak_mode = False anim_data.use_tweak_mode = False
@@ -845,7 +853,7 @@ def AL_bake(frame_start, frame_end, nla_tracks, fcu_keys, additive, step, action
smartkey.value = eval_array[i] smartkey.value = eval_array[i]
if smartkey.inbetween: if smartkey.inbetween:
continue continue
baked_fcu.keyframe_points.add(1) baked_fcu.keyframe_points.add(1)
keyframe = baked_fcu.keyframe_points[-1] keyframe = baked_fcu.keyframe_points[-1]
keyframe.co = (frame, eval_array[i]) keyframe.co = (frame, eval_array[i])
@@ -859,6 +867,10 @@ def AL_bake(frame_start, frame_end, nla_tracks, fcu_keys, additive, step, action
continue continue
if obj.als.smartbake: if obj.als.smartbake:
add_interpolations(baked_fcu, fcu_keys[(fcu_key[0], i)], layers_count) add_interpolations(baked_fcu, fcu_keys[(fcu_key[0], i)], layers_count)
else:
# Add the interpolation and handle types from the preferences defaults
set_all_handles(baked_fcu, interpolation, handle_type)
baked_fcu.update() baked_fcu.update()
#paste the modifiers to the new baked fcurve #paste the modifiers to the new baked fcurve
@@ -874,6 +886,17 @@ def AL_bake(frame_start, frame_end, nla_tracks, fcu_keys, additive, step, action
return baked_action return baked_action
def set_all_handles(baked_fcu, interpolation, handle_type):
'''Set all the handle types and interpolations in an fcurve using foreach_set and numpy
should use numerical value instead of a string'''
keyframes_len = len(baked_fcu.keyframe_points)
interpolations = np.full(keyframes_len, interpolation)
handles = np.full(keyframes_len, handle_type)
kp = baked_fcu.keyframe_points
kp.foreach_set('interpolation', interpolations)
kp.foreach_set('handle_left_type', handles)
kp.foreach_set('handle_right_type', handles)
def ensure_fcurves_bversion(fcurves, data_path, i): def ensure_fcurves_bversion(fcurves, data_path, i):
'''Either use ensure in Blender 5.0 and above or use find and new in older version''' '''Either use ensure in Blender 5.0 and above or use find and new in older version'''
+3 -6
View File
@@ -291,10 +291,6 @@ def evaluate_array(fcurves, fcu_path, frame, array_default = [0, 0, 0]):
continue continue
fcu_array[i] = fcu.evaluate(frame) fcu_array[i] = fcu.evaluate(frame)
# if (fcu_array == array_default).all():
# # print('295 return none')
# return None
return np.array(fcu_array) return np.array(fcu_array)
def evaluate_layers(context, obj, anim_data, fcu, array_default): def evaluate_layers(context, obj, anim_data, fcu, array_default):
@@ -317,7 +313,7 @@ def evaluate_layers(context, obj, anim_data, fcu, array_default):
if not len(track.strips): if not len(track.strips):
continue continue
for strip in track.strips: for strip in track.strips:
if not strip.frame_start < frame < strip.frame_end: if not strip.frame_start <= frame <= strip.frame_end:
continue continue
action = strip.action action = strip.action
if action is None: if action is None:
@@ -332,6 +328,7 @@ def evaluate_layers(context, obj, anim_data, fcu, array_default):
#evaluate the frame according to the strip settings #evaluate the frame according to the strip settings
frame_eval = frame frame_eval = frame
#change the frame if the strip is on hold #change the frame if the strip is on hold
if frame < strip.frame_start: if frame < strip.frame_start:
if strip.extrapolation == 'HOLD': if strip.extrapolation == 'HOLD':
@@ -445,7 +442,7 @@ def evaluate_value(self, context):
fcurves = anim_layers.get_fcurves(obj, action) fcurves = anim_layers.get_fcurves(obj, action)
eval_array = evaluate_array(fcurves, fcu.data_path, context.scene.frame_current, array_default) eval_array = evaluate_array(fcurves, fcu.data_path, context.scene.frame_current, array_default)
#calculate the difference between current value and the fcurve value #calculate the difference between current value and the fcurve value
add_diff(obj, fcurves, fcu.data_path, np.array(current_value), eval_array) add_diff(obj, fcurves, fcu.data_path, np.array(current_value), eval_array)
class MULTIKEY_OT_Multikey(bpy.types.Operator): class MULTIKEY_OT_Multikey(bpy.types.Operator):
@@ -183,7 +183,7 @@ def check_handler(scene):
anim_layers.visible_layers(obj, nla_tracks) anim_layers.visible_layers(obj, nla_tracks)
# Making sure that scene.als.edit_all_layers_op is not somehow turned on # Making sure that scene.als.edit_all_layers_op is not somehow turned on
if not any(item.object.als.edit_all_keyframes for item in scene.AL_objects) and scene.als.edit_all_layers_op: if not any(item.object.als.edit_all_keyframes for item in scene.AL_objects if item.object is not None) and scene.als.edit_all_layers_op:
scene.als.edit_all_layers_op = False scene.als.edit_all_layers_op = False
# check if track and layers are synchronized # check if track and layers are synchronized
@@ -385,24 +385,32 @@ def influence_sync(scene, obj, nla_tracks):
#Tracks that dont have keyframes are locked #Tracks that dont have keyframes are locked
for i, track in enumerate(nla_tracks): for i, track in enumerate(nla_tracks):
if obj.Anim_Layers[i].lock: if obj.Anim_Layers[i].lock:
continue continue
if not len(track.strips): if not len(track.strips):
continue continue
if not len(track.strips[0].fcurves): strip = track.strips[0]
if not len(strip.fcurves):
if not strip.use_animated_influence:
influence = strip.influence
anim_layers.use_animated_influence(strip)
strip.influence = influence
continue continue
if not len(track.strips[0].fcurves[0].keyframe_points):
if not len(strip.fcurves[0].keyframe_points):
#apply the influence property to the temp property when keyframes are removed (but its still locked) #apply the influence property to the temp property when keyframes are removed (but its still locked)
if not track.strips[0].fcurves[0].lock: if not strip.fcurves[0].lock:
# obj.Anim_Layers[i]['influence'] = track.strips[0].influence # obj.Anim_Layers[i]['influence'] = track.strips[0].influence
scene.als['influence'] = track.strips[0].influence scene.als['influence'] = strip.influence
track.strips[0].fcurves[0].lock = True track.strips[0].fcurves[0].lock = True
if scene.animation_data is None: if scene.animation_data is None:
return return
action = scene.animation_data.action action = scene.animation_data.action
if action is None: if action is None:
return return
# strip.use_animated_influence = True
#if a keyframe was found in the temporary property then add it to the #if a keyframe was found in the temporary property then add it to the
# data_path = 'Anim_Layers[' + str(obj.als.layer_index) + '].influence' # data_path = 'Anim_Layers[' + str(obj.als.layer_index) + '].influence'
data_path = 'als.influence' data_path = 'als.influence'