背景

数据样本是深度学习的基础,尤其是针对几何类的深度学习问题。目前网上已经有许许多多的数据集,其中尤其多的是用Blender得到的,例如BlendedMVS。
在本博客中,只是简单的尝试一下用Blender渲染一下模型,然后导出影像和深度图和法向图。
值得注意的是,本博主充分发挥了“能用就行”的原则,对细节几乎都不求甚解。

参考资料


https://blenderartists.org/t/render-settings-for-depth-normal-albedo-in-2-80/1199454
https://github.com/panmari/stanford-shapenet-renderer/blob/master/render_blender.py

结果

由于最终结果均匀exr文件,需要使用RenderDoc查看。

深度图

法向图

影像图

流程

1. 导入obj模型

首先第一步必然是导入obj模型,代码如下,仅仅需要指定obj文件所在文件夹即可。

import bpy
import os # folder path for importing data files
in_dir_ply = r"C:\Users\Kevin\Desktop\5a3cb4e4270f0e3f14d12f43\textured_mesh"
lst_ply = os.listdir(in_dir_ply)# Filter file list by valid file types.
file = []
for item in lst_ply:fileName, fileExtension = os.path.splitext(item)if fileExtension == ".obj":file.append(item)# To import mesh.ply in batches
for i in range(len(file)):bpy.ops.import_scene.obj(filepath=os.path.join(in_dir_ply,file[i]))

以下就是BlendedMVS的一个模型的导入结果,如左上图所示

2. 设置相机位置和姿态

当然这里可能还需要设置一下灯啊啥的,我就不写了。

import bpytx = 0.0
ty = 0.0
tz = -5.0rx = 180.0
ry = 0.0
rz = 0.0pi = 3.14159265camera = bpy.data.objects['Camera']# Set camera rotation in euler angles
camera.rotation_mode = 'XYZ'
camera.rotation_euler[0] = rx*(pi/180.0)
camera.rotation_euler[1] = ry*(pi/180.0)
camera.rotation_euler[2] = rz*(pi/180.0)# Set camera translation
camera.location.x = tx
camera.location.y = ty
camera.location.z = tz
3. 导出渲染结果
# Set up rendering of depth map.
import bpybpy.context.scene.use_nodes = True
tree = bpy.context.scene.node_tree
links = tree.links
bpy.context.scene.render.image_settings.color_depth = '32'
bpy.context.scene.render.image_settings.color_mode = 'RGB'# 必须设置,否则无法输出深度
bpy.context.scene.render.image_settings.file_format = "OPEN_EXR"# 必须设置,否则无法输出法向
bpy.context.view_layer.use_pass_normal = True # Clear default nodes
for n in tree.nodes:tree.nodes.remove(n)# Create input render layer node.
render_layers = tree.nodes.new('CompositorNodeRLayers')depth_file_output = tree.nodes.new(type="CompositorNodeOutputFile")
depth_file_output.label = 'Depth Output'
links.new(render_layers.outputs['Depth'], depth_file_output.inputs[0])scale_normal = tree.nodes.new(type="CompositorNodeMixRGB")
scale_normal.blend_type = 'MULTIPLY'
scale_normal.inputs[2].default_value = (0.5, 0.5, 0.5, 1)
links.new(render_layers.outputs['Normal'], scale_normal.inputs[1])
bias_normal = tree.nodes.new(type="CompositorNodeMixRGB")
bias_normal.blend_type = 'ADD'
bias_normal.inputs[2].default_value = (0.5, 0.5, 0.5, 0)
links.new(scale_normal.outputs[0], bias_normal.inputs[1])
normal_file_output = tree.nodes.new(type="CompositorNodeOutputFile")
normal_file_output.label = 'Normal Output'
links.new(bias_normal.outputs[0], normal_file_output.inputs[0])image_file_output = tree.nodes.new(type="CompositorNodeOutputFile")
image_file_output.label = 'Image'
links.new(render_layers.outputs['Image'], image_file_output.inputs[0])scene = bpy.context.scene
# 设置输出分辨率,可以自行修改
scene.render.resolution_x = 300
scene.render.resolution_y = 200scene.render.resolution_percentage = 100
cam = scene.objects['Camera']# fov
cam.data.angle = 10*(3.1415926/180.0)for output_node in [depth_file_output, normal_file_output, image_file_output]:output_node.base_path = ''# 输出路径
scene.render.filepath = r'C:\Users\Kevin\Desktop\5a3cb4e4270f0e3f14d12f43\\'
depth_file_output.file_slots[0].path = scene.render.filepath + 'depth_'
normal_file_output.file_slots[0].path = scene.render.filepath + 'normal_'
image_file_output.file_slots[0].path = scene.render.filepath + 'image_'bpy.ops.render.render()

总结

总的来说,第一次用Blender,感觉还有诸多不懂,先记一下代码。

Blender:导入obj渲染及导出图片+深度图+法向图相关推荐

  1. blender导入OBJ缺失顶点颜色的解决办法

    有时候我们要用blender导入一个OBJ文件,但是导入之后不难发现,原来的顶点颜色消失了,这是因为blender不支持OBJ顶点颜色. 例如下面的文件: o Object.1 v 61.000000 ...

  2. UE4通过UCanvasRenderTarget2D导出图片+文字的组合图

    原创文章,转载请注明出处. UCanvasRenderTarget2D 导出图片 前言 开始做 创建1>CanvasRenderTarget2D, 对其实现 创建2>材质球 创建3> ...

  3. 3dmax导出obj序列_Houdini导出序列图片

    本文以一个houdini制作的爆炸效果为例,一步一步介绍如何导出为一张序列图 首先,创建一个Geometry, 改名为:pyro_source 双击进入节点内部,创建如下节点: 其中,group节点选 ...

  4. NPOI 在指定单元格导入导出图片

    NPOI 在指定单元格导入导出图片 Intro 我维护了一个 NPOI 的扩展(WeihanLi.Npoi),主要用来导入导出 Excel 数据,最近有网友提出了导入 Excel 的时候解析图片的需求 ...

  5. OBJ模型文件的结构、导入与渲染

    在[3DS文件结构的初步认识]中提及了3DS格式模型文件.固然3DS格式很常用,但OBJ格式的模型也是很常见的,于是咔嚓了一下心,熟悉了一下格式,并写了一个导入OBJ格式模型的类,顺便有此文.--Zw ...

  6. php单元格字体颜色,PHPExcel API接口用法大全,按模板导入excel,美化excel,导出图片,设置单元格字体颜色背景色边框,合并单元格,设置行高列宽...

    PHPExcel API接口用法大全,按模板导入excel,美化excel,导出图片,设置单元格字体颜色背景色边框,合并单元格,设置行高列宽 2020-08-31 85 一:读取excel表模板$ph ...

  7. 3dmax软件渲染模型导出JPG格式图片的方法

    3dmax软件渲染模型导出JPG格式图片的方法.感兴趣的小伙伴们快和小编一起看看3dmax软件渲染模型怎么保存为JPG格式的吧! 3dmax软件渲染模型导出JPG格式图片的方法如下: 步骤一.首先在电 ...

  8. zbrush导入obj模型不显示_ZBrush中如何导入和导出OBJ文件—ZBrush教程

    原标题:ZBrush中如何导入和导出OBJ文件-ZBrush教程 ZBrush中如何导入和导出OBJ文件 ZBrush软件中对于文件的导出与储存格式是多样的.OBJ格式是如何导入和导出ZBrush的, ...

  9. FBX文件导入Unity导致贴图丢失问题解决,以3ds max,Blender导入导出为例

    一 . 首先把资产文件导入三维软件中 1 . 3ds Max 1.1 导入FBX--[免费或者质量差的资源可能会出现平滑组错误的情况,可以直接镜像一个模型更改法线或者删除面重新封口能解决问题] 1.2 ...

最新文章

  1. 自学python什么时候能够兼职-我,做设计两年,工资4000,兼职1.5w...
  2. ado批量执行sql mysql_C++ 使用 ADO 批量操作数据库
  3. Django内置分页扩展
  4. Matlab实用程序--图形应用-轮廓图
  5. 杰出数据科学家的关键技能是什么?
  6. 面向对象(匿名内部类在开发中的应用)
  7. LeetCode 974. 和可被 K 整除的子数组(哈希map)
  8. 华为荣耀七能升级鸿蒙系统吗,华为鸿蒙系统来了,你知道哪些华为手机荣耀手机可以升级吗?...
  9. 【Flink】Flink kafka producer 分区策略 (flink写入数据不均匀 与 数据写入 分区无数据 )
  10. 获取byte的各个bit值_Java中获取一个Byte 的各个Bit的值
  11. 自反而缩,虽千万人,吾往矣。
  12. mysql-回表查询是什么
  13. Slat撒盐加密原理
  14. 网页截图怎么截一整张_如何网页截图?(截长图)
  15. 中关村硬科技孵化器首次合作建科技成果转化创新平台
  16. 手机测试中的ICCID是什么?
  17. MySQL原理与实践(六):自增主键的使用
  18. 二本逆袭进百度,我总结了这些经验
  19. 品优购电商系统开发 第5章 商品录入【1】
  20. Rikka with Travels【换根树dp】

热门文章

  1. Qt: multiple definition of XXX
  2. 软件使用说明书_使用软件
  3. Caché 23种设计模式
  4. 华为机试--字符串ASC码+偏移量实现加密
  5. beyond compare下载安装及使用教程
  6. [CTSC2016]时空旅行(线段树+凸包)
  7. JAVA编译一个原神抽卡模拟器
  8. Adobe Premiere Pro CC 2018 剪裁音频文件攻略
  9. html中的 语言设置
  10. alc236黑苹果驱动_黑苹果核心显卡驱动教程