资讯专栏INFORMATION COLUMN

Blender下用Python实现模型文件导入、渲染和动画生成

villainhr / 3359人阅读

摘要:为了让数值计算的结果能够有更好的渲染效果,这段时间一直在用这个开源软件来处理计算结果。

为了让数值计算的结果能够有更好的渲染效果,这段时间一直在用Blender这个开源软件来处理计算结果。

因为是处理大量数据的计算结果,所以不得不考虑用Python编写脚本来实现批量处理,编写过程中,Google帮我解决了大部分实现过程中的障碍,下面是完整的实现过程:

将计算结果的mesh文件导入到Blender中;

import bpy 
import os 

# folder path to save rendered image
in_dir = "E:SPHPaper 01D18"
lst = os.listdir(in_dir)

# folder path for importing data files
in_dir_ply = "E:SPHPaper 01D18Ply_batch"
lst_ply = os.listdir(in_dir_ply)

# folder path to save rendered animation
out_dir = "E:SPHPaper 01D18	est.avi"

# Filter file list by valid file types.
candidates = []
candidates_name = []
c = 0
for item in lst_ply:
    fileName, fileExtension = os.path.splitext(lst_ply[c])
    if fileExtension == ".ply":
        candidates.append(item)
        candidates_name.append(fileName)
    c = c + 1

file = [{"name":i} for i in candidates]   
n = len(file)
print(n) 

# To import mesh.ply in batches
for i in range (0,n):
    bpy.ops.import_mesh.ply(filepath=candidates[n], files=[file[n]], directory=in_dir_ply, filter_glob="*.ply")
    bpy.data.objects[candidates_name[i]].hide = True
    bpy.data.objects[candidates_name[i]].hide_render = True

在Blender中进行批量渲染并保存成图片文件;(这里用到了提前制作好的材质文件“Material.001”)

# Set file_format for render images
bpy.data.scenes["Scene"].render.image_settings.file_format = "PNG"

# To render and save rendered images
for i in range (0,n):
    bpy.data.objects[candidates_name[i]].hide = False    #objects must be visible to use modifier
    bpy.data.objects[candidates_name[i]].hide_render = False    #objects must be renderable to export render image
    bpy.context.scene.objects.active = bpy.data.objects[candidates_name[i]] #get object
    bpy.ops.object.modifier_add(type="PARTICLE_SYSTEM")    #add modifier as particle_system
    bpy.data.objects[candidates_name[i]].particle_systems["ParticleSystem"].settings = bpy.data.particles["ParticleSettings"] #assign particle settings to object"s particle system
    bpy.data.objects[candidates_name[i]].data.materials.append(bpy.data.materials["Material.001"])    #assign existed material to active object.
    bpy.data.scenes["Scene"].render.filepath = "//%02d"%(i)    #set save filepath
    bpy.ops.render.render( write_still=True )    #render and save
    bpy.data.objects[candidates_name[i]].hide = True    #hide again for next image rendering
    bpy.data.objects[candidates_name[i]].hide_render = True    #hide again for next image rendering

在Blender的Video Sequence Editor (VSE)中插入上一步生成的渲染后的图片文件;

# Active VSE to generate rendering animation
bpy.data.scenes["Scene"].render.use_sequencer = True

# Filter file list by valid file types.
re_image = []
re_image_name = []
c = 0
for item in lst:
    fileName, fileExtension = os.path.splitext(lst[c])
    if fileExtension == ".png":
        re_image.append(item)
        re_image_name.append(fileName)
    c = c + 1

# Create the sequencer data
bpy.context.scene.sequence_editor_create()

# Add strip into VSE by importing new image
for i in range (0,n):
    bpy.context.scene.sequence_editor.sequences.new_image(
        name=re_image[i],
        filepath=os.path.join(in_dir, re_image[i]),
        channel=1, frame_start=i)

在Blender中生成并保存动画文件。

# Resolution settings for animation
resx = 720; #1920 
resy = 480; #1080 
bpy.data.scenes["Scene"].render.resolution_x = resx 
bpy.data.scenes["Scene"].render.resolution_y = resy 
bpy.data.scenes["Scene"].render.resolution_percentage = 100 

bpy.data.scenes["Scene"].frame_end = n 
bpy.data.scenes["Scene"].render.image_settings.file_format = "AVI_JPEG" 
bpy.data.scenes["Scene"].render.filepath = out_dir
bpy.ops.render.render( animation=True )

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/37944.html

相关文章

  • 【Three.js】Three.js学习记录

    摘要:上帝觉得缺少了些生气,便用泥巴捏了一个小人儿,不叫亚当,她叫小芳。接下来预先恭喜你,你可以成为这网页世界的一个小上帝。使用可以向场景中发射光线。在下述案例中,从摄像机的位置向场景中鼠标的点击位置发射光线。 先得摆出几个关键词:场景、灯光、模型、材质、贴图与纹理、相机、渲染器。然后我开始装模作样地解释: 上帝说,要有场景!于是就有了场景,场景去纳这万事万物。 上帝说,要有光!于是就有了光...

    chanthuang 评论0 收藏0
  • 【Three.js】Three.js学习记录

    摘要:上帝觉得缺少了些生气,便用泥巴捏了一个小人儿,不叫亚当,她叫小芳。接下来预先恭喜你,你可以成为这网页世界的一个小上帝。使用可以向场景中发射光线。在下述案例中,从摄像机的位置向场景中鼠标的点击位置发射光线。 先得摆出几个关键词:场景、灯光、模型、材质、贴图与纹理、相机、渲染器。然后我开始装模作样地解释: 上帝说,要有场景!于是就有了场景,场景去纳这万事万物。 上帝说,要有光!于是就有了光...

    李涛 评论0 收藏0
  • Blender Python API概述

    摘要:在交互式控制台中运行此操作时,您将看到视口更新。键入或粘贴到交互式控制台中。用户首选项加载项列表使用显示有关每个加载项的信息。最后两行仅用于测试这允许脚本直接在文本编辑器中运行以测试更改。 Blender Python API概述 本文档的目的是解释Python和Blender如何组合在一起,涵盖了一些在阅读API参考和示例脚本时可能不明显的功能。 Python in Blender ...

    魏宪会 评论0 收藏0
  • Blender参考API用法

    摘要:在控制台中输入路径。因此,下一步是通过参考文件检查访问画笔的位置。上下文画笔纹理对比度由于每个属性都是按照我们在控制台中组成数据路径的方式给出的可以有多种方式来访问相同的数据,您选择的方法通常取决于任务。 Blender参考API用法 Blender有许多互连数据类型,它们具有自动生成的引用api,它通常具有编写脚本所需的信息,但可能难以使用。 本文档旨在帮助您了解如何使用参考API。...

    MonoLog 评论0 收藏0
  • 产品三维模型在线预览

    摘要:次时代传统的方式就是创建次时代模型,对应中的材质是高光网格材质对象,通常贴图文件包含颜色贴图法线贴图和高光贴图。 产品在线展示案例预览 玉镯在线预览:http://www.yanhuangxueyuan.co... 汽车在线预览:http://www.yanhuangxueyuan.co... Web3D技术历史 可通过插件或WebGL技术实现Web3D,在线网页上预览操作三维...

    DirtyMind 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<