95 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			95 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C#
		
	
	
	
| 
								 | 
							
								#if TOOLS
							 | 
						||
| 
								 | 
							
								using Godot;
							 | 
						||
| 
								 | 
							
								using Rokojori;
							 | 
						||
| 
								 | 
							
								using System.Diagnostics;
							 | 
						||
| 
								 | 
							
								using System.Collections.Generic;
							 | 
						||
| 
								 | 
							
								using System.Threading.Tasks;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace Rokojori.Tools
							 | 
						||
| 
								 | 
							
								{  
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // https://docs.blender.org/api/current/bpy.ops.export_scene.html#bpy.ops.export_scene.fbx
							 | 
						||
| 
								 | 
							
								  public class BlenderFBXExportSettings
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								    public string path_mode = "AUTO";
							 | 
						||
| 
								 | 
							
								    public string batch_mode = "OFF";
							 | 
						||
| 
								 | 
							
								    public bool embed_textures = true;    
							 | 
						||
| 
								 | 
							
								    public bool use_batch_own_dir = false;
							 | 
						||
| 
								 | 
							
								    public bool use_metadata = true;
							 | 
						||
| 
								 | 
							
								    public bool check_existing = false;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // INCLUDE
							 | 
						||
| 
								 | 
							
								   
							 | 
						||
| 
								 | 
							
								    public bool use_selection = false;
							 | 
						||
| 
								 | 
							
								    public bool use_visible = false;
							 | 
						||
| 
								 | 
							
								    public bool use_active_collection = false;
							 | 
						||
| 
								 | 
							
								    public List<string> object_types = new List<string> { "EMPTY","CAMERA","LIGHT","ARMATURE","MESH","OTHER"  };
							 | 
						||
| 
								 | 
							
								    public bool use_custom_props = false;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // TRANSFORM
							 | 
						||
| 
								 | 
							
								    public float global_scale = 1.0f;
							 | 
						||
| 
								 | 
							
								    public string apply_scale_options = "FBX_SCALE_ALL"; // 'FBX_SCALE_NONE', 'FBX_SCALE_UNITS', 'FBX_SCALE_CUSTOM', 'FBX_SCALE_ALL'
							 | 
						||
| 
								 | 
							
								    public string axis_forward = "-Z";
							 | 
						||
| 
								 | 
							
								    public string axis_up = "Y";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public bool apply_unit_scale = false;
							 | 
						||
| 
								 | 
							
								    public bool use_space_transform = true;
							 | 
						||
| 
								 | 
							
								    public bool bake_space_transform = true;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // GEOMETRY
							 | 
						||
| 
								 | 
							
								    public bool use_mesh_modifiers = true;  // Apply Modifiers
							 | 
						||
| 
								 | 
							
								    public bool use_mesh_modifiers_render = false;
							 | 
						||
| 
								 | 
							
								    public string mesh_smooth_type = "OFF"; // OFF, FACE, EDGES
							 | 
						||
| 
								 | 
							
								    public bool use_subsurf = false;
							 | 
						||
| 
								 | 
							
								    public bool use_mesh_edges = false;
							 | 
						||
| 
								 | 
							
								    public bool use_tspace = false;
							 | 
						||
| 
								 | 
							
								    public bool use_triangles = false;
							 | 
						||
| 
								 | 
							
								    public string colors_type = "SRGB"; // NONE, SRGB, LINEAR
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // ARMATURE
							 | 
						||
| 
								 | 
							
								   
							 | 
						||
| 
								 | 
							
								    public bool add_leaf_bones = false;
							 | 
						||
| 
								 | 
							
								    public string primary_bone_axis = "Y";
							 | 
						||
| 
								 | 
							
								    public string secondary_bone_axis = "X";
							 | 
						||
| 
								 | 
							
								    public string armature_nodetype = "NULL";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // BAKE ANIMATION
							 | 
						||
| 
								 | 
							
								    public bool bake_anim = true;
							 | 
						||
| 
								 | 
							
								    public bool bake_anim_use_all_bones = true;
							 | 
						||
| 
								 | 
							
								    public bool bake_anim_use_nla_strips = true;
							 | 
						||
| 
								 | 
							
								    public bool bake_anim_use_all_actions = true;
							 | 
						||
| 
								 | 
							
								    public bool bake_anim_force_startend_keying = true;
							 | 
						||
| 
								 | 
							
								    public float bake_anim_step = 1.0f;
							 | 
						||
| 
								 | 
							
								    public float bake_anim_simplify_factor = 1.0f;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								   
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  public class BlenderGLTFtoFBX
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    public static async Task<BlenderResponse> Run( string gltfPath, string fbxPath, BlenderFBXExportSettings fbxSettings = null )
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      var pythonPath = RokojoriPlugin.GlobalizedPath( "Tools/blender/gltf_to_fbx.py" );
							 | 
						||
| 
								 | 
							
								      
							 | 
						||
| 
								 | 
							
								      var tempSettings = fbxSettings == null ? new BlenderFBXExportSettings() : fbxSettings;
							 | 
						||
| 
								 | 
							
								      var tempSettingsPath = RokojoriPlugin.SaveTemporaryJSON( tempSettings );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      var conversionArgs = new List<string>();
							 | 
						||
| 
								 | 
							
								      conversionArgs.Add( gltfPath.EscapeAsPathForCommandLine() );
							 | 
						||
| 
								 | 
							
								      conversionArgs.Add( fbxPath.EscapeAsPathForCommandLine() );
							 | 
						||
| 
								 | 
							
								      conversionArgs.Add( tempSettingsPath.EscapeAsPathForCommandLine() );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      var response = await Blender.RunPython( pythonPath, conversionArgs ); 
							 | 
						||
| 
								 | 
							
								      
							 | 
						||
| 
								 | 
							
								      FilesSync.Delete( tempSettingsPath );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      return response;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								#endif
							 |