Python+Blender(BlenderPython对模型的操作)

Python:2.7版本
Blender: 2.9版本

设想:一个目录文件夹下面有一个FBX文件和一张PNG或者JPEG的图片,通过Python脚本将FBX文件导入Blender,然后创建一个贴图节点的材质,修改模型的尺寸,中心点,最后导出为glb文件,也可以是gltf文件。

https://blog.csdn.net/zhangmei126/article/details/115119841
上面链接的帖子有外部Python通过cmd调用这个脚本,并传递参数的解释。

blender_export_glb.py

import os
import sys
import bpy
import json
import shutil

# 获取cmd参数.
data_path = str(sys.argv[-2])    # data_path为文件夹的路径.
asset_name = str(sys.argv[-1])   # asset_name为模型的名字.
scale_x = 1.0
scale_y = 1.0
scale_z = 1.0

# 获取目录下的png文件.
file_list = os.listdir(data_path)
png_list = [item for item in file_list if item.endswith('.png')]
png_name = png_list[0]

# 获取目录下的fbx文件.
fbx_list = [item for item in file_list if item.endswith('.FBX') or item.endswith('.fbx')]
for item in fbx_list:
    fbx_path = os.path.join(data_path, item)
    png_path = os.path.join(data_path, png_name)
	
	# 导入fbx到Blender场景.
    bpy.ops.import_scene.fbx(filepath=fbx_path)

	# 清除场景中多余的组件.
    bpy.data.objects.remove(bpy.data.objects['Camera'])
    bpy.data.objects.remove(bpy.data.objects['Cube'])
    bpy.data.objects.remove(bpy.data.objects['Light'])

	# 修改Blender引擎设置.
    bpy.context.scene.render.engine = 'CYCLES'
    
	# 新建材质.
    bpy.data.materials.new('mat')
    mat=bpy.data.materials['mat']
    
	# 设置材质.
    mat.use_nodes = True
    matnodes = mat.node_tree.nodes
    matnodes.clear()

	# 新建TextureImage节点,并绑定图片.
    tex = matnodes.new(type='ShaderNodeTexImage')
    tex.image = bpy.data.images.load(filepath=png_path)  
    
    # 设置Backgournd节点.
    back = matnodes.new(type='ShaderNodeBackground')

	# 设置材质输出节点.
    out = matnodes.new(type='ShaderNodeOutputMaterial')

	# 将各节点链接.
    mat.node_tree.links.new(back.outputs['Background'], out.inputs['Surface'])
    mat.node_tree.links.new(tex.outputs[0], back.inputs['Color'])

	# 设置场景模型使用当前材质.
    bpy.data.objects[asset_name].active_material = bpy.data.materials['mat']
	
	# 设置场景模型尺寸,中心点,以及缩放等.
    bpy.ops.object.origin_set(type='ORIGIN_GEOMETRY',center='BOUNDS')
    
    bpy.data.objects[asset_name].location[0] = 0
    bpy.data.objects[asset_name].location[1] = 0
    bpy.data.objects[asset_name].location[2] = 0

    bpy.data.objects[asset_name].scale[0] = scale_x
    bpy.data.objects[asset_name].scale[1] = scale_y
    bpy.data.objects[asset_name].scale[2] = scale_z
    
    bpy.ops.object.transform_apply(location=True, rotation=True, scale=True)

	# 设置导出glb的路径,以及其他设置.
    out_gltf_path = os.path.join(data_path, item.replace(".fbx",'_low.glb'))
    bpy.ops.export_scene.gltf(export_format='GLB',filepath=out_gltf_path,export_image_format='JPEG',export_colors=False)

图片1:
红框中就是要清除的多余场景组件.
Python+Blender(BlenderPython对模型的操作)_第1张图片
图片2:
红框:设置模型的中心点(我这选择的是模型边界)
黄框:创建的材质(包括TextureImage,Background,OutputMaterial节点)
蓝框:当前选择模型的尺寸,以及中心点位置
Python+Blender(BlenderPython对模型的操作)_第2张图片

图片3:
Python+Blender(BlenderPython对模型的操作)_第3张图片

你可能感兴趣的:(Blender,Python,python,blender)