从Blender批量导出OGRE模型
导出插件设置
从Blender导出OGRE模
Blender 运行 Python 脚本
打开控制台输出
移动鼠标到箭头所指左下角, 当鼠标变为十字时候按住并往上拉
选择文本编辑器
新建文件, 打开代码提示, 就可以写代码了
批量导入FBX 导出 OGRE 资源脚本
import bpy
import sys
import os
import re
from os
.path
import join
, split
in_dir
= "C:\\Users\\Ian\\Desktop\\data"
filters
= ["ss.fbx"]
io_ogre
= "D:\\blender2ogre\\io_ogre"
path
= "C:\\Users\\Ian\\Desktop\\tmp"
except_list
= []
def reset_blend():
candidate_list
= [item
.name
for item
in bpy
.data
.objects
]
for object_name
in candidate_list
:
bpy
.data
.objects
[object_name
].select
= True
bpy
.ops
.object.delete
()
for item
in bpy
.data
.meshes
:
bpy
.data
.meshes
.remove
(item
)
def export(name
):
namestr
= name
if name
.find
('_ogre') != -1:
namestr
= name
[0:name
.find
('_ogre')]
bpy
.ops
.object.mode_set
(mode
='OBJECT', toggle
=False)
for ob
in bpy
.data
.objects
:
if ob
.type != 'MESH':
continue
print(ob
.name
+ 'type:' + ob
.type + ' set mesh scale')
bpy
.ops
.object.select_all
(action
='DESELECT')
ob
.select
= True
bpy
.context
.scene
.objects
.active
= ob
bpy
.ops
.object.transform_apply
(
location
=False, scale
=True, rotation
=False)
ob
.select
= False
bpy
.ops
.object.select_all
(action
='DESELECT')
for ob
in bpy
.data
.objects
:
if ob
.type != 'ARMATURE':
continue
print(ob
.name
+ 'type:' + ob
.type + ' set armature trans')
bpy
.ops
.object.select_all
(action
='DESELECT')
ob
.select
= True
bpy
.context
.scene
.objects
.active
= ob
bpy
.ops
.object.transform_apply
(
location
=True, scale
=False, rotation
=True)
ob
.select
= False
bpy
.ops
.object.select_all
(action
='DESELECT')
for ob
in bpy
.data
.objects
:
if ob
.type != 'MESH':
continue
print(ob
.name
+ 'type:' + ob
.type + ' set armature trans')
bpy
.ops
.object.select_all
(action
='DESELECT')
ob
.select
= True
bpy
.context
.scene
.objects
.active
= ob
bpy
.ops
.object.transform_apply
(
location
=True, scale
=False, rotation
=True)
ob
.select
= False
bpy
.ops
.object.select_all
(action
='DESELECT')
for ob
in bpy
.data
.objects
:
if ob
.type != 'MESH' or len(ob
.material_slots
) == 0:
continue
bpy
.ops
.object.select_all
(action
='DESELECT')
ob
.select
= True
bpy
.context
.scene
.objects
.active
= ob
matslots
= len(ob
.material_slots
)
print("# Object", ob
.name
, "has", matslots
, "material slot(s)")
if namestr
.find
('cloth'):
namestr
= namestr
.replace
('cloth', 'up')
elif ob
.name
.find
('cloth_up') != -1:
tmpstr
= ob
.name
.replace
('cloth_up', namestr
)
ob
.data
.name
= tmpstr
elif ob
.name
.find
('cloth_down') != -1:
tmpstr
= ob
.name
.replace
('cloth_down', namestr
)
ob
.data
.name
= tmpstr
else:
ob
.data
.name
= ob
.name
for i
in range(0, matslots
):
bpy
.context
.object.active_material_index
= i
bpy
.ops
.object.material_slot_remove
()
bpy
.ops
.object.select_all
(action
='DESELECT')
filepath
= path
+"\\"+namestr
os
.makedirs
(filepath
, exist_ok
=True, mode
=0o775)
dot_scene
(filepath
)
reset_blend
()
def convert(path
, filters
):
need_file_items
= []
need_file_names
= []
filterDict
= {}
for item
in filters
:
filterDict
[item
] = True
file_lst
= os
.listdir
(path
)
for item
in file_lst
:
fileName
, fileExtension
= os
.path
.splitext
(item
)
if fileExtension
== ".fbx" or ".FBX" and (not item
in filterDict
):
need_file_items
.append
(item
)
need_file_names
.append
(fileName
)
n
= len(need_file_items
)
for i
in range(n
):
item
= need_file_items
[i
]
itemName
= need_file_names
[i
]
ufilename
= path
+ "\\" + item
try:
bpy
.ops
.import_scene
.fbx
(filepath
=ufilename
, directory
=path
, filter_glob
="*.fbx")
export
(itemName
)
except:
print("import fbx err: " + ufilename
)
except_list
.append
(ufilename
)
sys
.path
.append
(io_ogre
)
from io_ogre
.ogre
.skeleton
import dot_skeleton
from io_ogre
.ogre
.mesh
import dot_mesh
from io_ogre
.ogre
.scene
import dot_scene
from io_ogre
import config
reset_blend
()
convert
(in_dir
, filters
)
print(except_list
)
print('Success!')
Run Script
转载请注明原文地址:https://ipadbbs.8miu.com/read-15292.html