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

您所在的位置:网站首页 blender模型尺寸怎么看 Python+Blender(BlenderPython对模型的操作)

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

2024-07-10 01:08| 来源: 网络整理| 查看: 265

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: 红框中就是要清除的多余场景组件. 在这里插入图片描述 图片2: 红框:设置模型的中心点(我这选择的是模型边界) 黄框:创建的材质(包括TextureImage,Background,OutputMaterial节点) 蓝框:当前选择模型的尺寸,以及中心点位置 在这里插入图片描述

图片3: 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3