BlenderCN论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1625|回复: 0

逐个渲染、保存 选择的物体 render_and_save_per_obj

[复制链接]
发表于 2013-6-25 22:08:27 | 显示全部楼层 |阅读模式
render and save each selected object批量渲染,逐一渲染


  1. """
  2. 作者 : [email]yidanyang@gmail.com[/email]
  3. 版本 : blender 2.67.1
  4. 使用 : 1, blender中从Text Editor模块打开此脚本[建议复制粘贴,尤其是不知道什么是utf8编码的同学]
  5.        2, 选择需要逐个渲染的物体,并设置好渲染参数
  6.        3,运行此脚本,输出为“默认输出路径+场景名+物体名称+默认后缀”
  7. """

  8. import bpy
  9. import os
  10. import time
  11. from datetime import timedelta


  12. def check_type(t):
  13.     """
  14.     筛除不符合的选择类型
  15.     """
  16.     types = ['MESH', 'CURVE', 'SURFACE', 'META', 'FONT']
  17.     if t in types:
  18.         return True
  19.     else:
  20.         return False


  21. C    = bpy.context
  22. objs = [i for i in C.selected_objects if check_type(i.type)]


  23. def only_render_toggle(index):
  24.     """
  25.     每次只开启第index个物体的渲染
  26.     """
  27.     for i,v in enumerate(objs):
  28.         if i != index:
  29.             v.hide_render = True
  30.         else:
  31.             v.hide_render = False


  32. def restore():
  33.     """
  34.     所有物体设置为可渲染
  35.     """
  36.     for i in objs:
  37.         if i.hide_render == True:
  38.             i.hide_render = False


  39. def clean_float(text):
  40.     """
  41.     # 来源 : Render Notify.py
  42.     # 作者 : Campbell Barton
  43.     # strip trailing zeros: 0.000 -> 0.0
  44.     """
  45.     index = text.rfind(".")
  46.     if index != -1:
  47.         index += 2
  48.         head, tail = text[:index], text[index:]
  49.         tail = tail.rstrip("0")
  50.         text = head + tail
  51.     return text


  52. def main():
  53.     if len(objs) < 1:
  54.         print("没有物体被选中,渲染啥?")
  55.         return

  56.     print("\n>>>")
  57.     scene_name = C.scene.name
  58.     root_path  = os.path.abspath( bpy.data.scenes[scene_name].render.filepath )
  59.     for i,v in enumerate(objs):
  60.         # 时间戳
  61.         time_stamp = time.time()

  62.         # 逐个激活并渲染保存
  63.         only_render_toggle(i)
  64.         bpy.ops.render.render()
  65.         file_path = root_path + '/' + scene_name + '_' + v.name + '.' + str.lower(C.scene.render.image_settings.file_format)
  66.         bpy.data.images['Render Result'].save_render(filepath = file_path)

  67.         # 时间戳结束
  68.         #time_stamp = time.time()
  69.         time_val   = round(time.time() - time_stamp, 2)
  70.         time_str   = clean_float(str(timedelta(seconds = time_val)))
  71.         print("经过 %s,渲染保存 %s" % (time_str, file_path))
  72.     print("<<<")
  73.     restore()


  74. if __name__ == "__main__":
  75.     main()
复制代码

  1. 随便测试了几个物体,以下是命令行输出:
  2. >>>
  3. 经过 0:00:00,渲染保存 D:\tmp/Scene_Text.png
  4. 经过 0:00:00,渲染保存 D:\tmp/Scene_Mball.png
  5. 经过 0:00:00,渲染保存 D:\tmp/Scene_SurfCurve.png
  6. 经过 0:00:00,渲染保存 D:\tmp/Scene_BezierCircle.001.png
  7. 经过 0:00:00,渲染保存 D:\tmp/Scene_BezierCircle.png
  8. 经过 0:00:00,渲染保存 D:\tmp/Scene_Cube.002.png
  9. 经过 0:00:00,渲染保存 D:\tmp/Scene_Cube.001.png
  10. 经过 0:00:00,渲染保存 D:\tmp/Scene_Cube.png
  11. <<<
复制代码


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

Blender最新中文教学视频|Blender头条|小黑屋|手机版|Archiver|Blender中国 ( 蜀ICP备17002929号 )360网站安全检测平台

GMT+8, 2019-11-12 17:33 , Processed in 0.022278 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表