Blender烘焙AO操作及对应的python代码

2023-11-20 20:20

本文主要是介绍Blender烘焙AO操作及对应的python代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

(一)Blender软件操作

1. 导入模型(这里省略)

2. 材质设置

模型使用的所有材质都需要删除Surface Shader,没有其他多余的计算,可以大量缩短烘焙时间。删除之后的只留下一个材质输出节点,如图所示: 

3. 导出Textures设置

在ShaderEditor中按照如图所示步骤,创建Image Texture节点: 

在如图所示位置点击New创建Image: 

将Image的宽和高设置设置为2048像素,Color的亮度为0.73作为空白位置的填充颜色,如图所示

节点的插值计算设置为Smart,边界外插值设置为Extend,色彩空间设置为Raw,可以使最终烘焙出的AO对比更强烈,连接到材质的Surface,如图所示: 

复制Image节点,链接到模型的其他材质上,否则其他材质所对应的部位不会参与烘焙。

4. 渲染器设置

将渲染器设置为Cycles,并选择GPU作为计算设备,显卡配置高的电脑烘焙时间会缩短很多: 

采样方式选择Branched Path Tracing,如此便可以对每一部分材质属性设置采样值了:

 

将整体采样设置为最低,只提高AO的采样值,这样可以缩短计算其他材质属性所浪费的时间:

5. 烘焙设置

烘焙类型设置为Ambient Occlusion: 

输出设置中把边缘扩展设置8像素,然后关闭Clear Image,否则渲染器会把ImageTexture中设置的Color清除

(二)Python代码实现

参考上面软件操作流程语句,记录blender代码和补充的处理

1. 材质设置

删除材质关联的信息,加快烘焙速度,对于没有材质的,需要创建至少一个材质

# 删除材质关联的信息
for mat in bpy.data.materials:nodes = mat.node_tree.nodesfor node in nodes:if node.type != 'OUTPUT_MATERIAL':nodes.remove(node)
# 若模型没有材质,需要创建材质,并关联到对应的mesh
unique_material = None
if len(bpy.data.materials) == 0:bpy.ops.object.material_slot_add()bpy.ops.material.new()unique_material = bpy.data.materials[-1]
for object in bpy.data.objects:if object.type == 'MESH':if unique_material is not None:object.active_material = unique_material

2. 创建AO贴图和texture节点


# 创建AO贴图
AOMAP_NAME = 'AO.png'
bpy.ops.image.new(name=AOMAP_NAME,width=2048,height=2048,color=(186, 186, 186, 255),generated_type='BLANK')
aomap = bpy.data.images[AOMAP_NAME]
aomap.colorspace_settings.name ='Raw'# 创建texture节点,关联AO贴图,设置节点属性
for mat in bpy.data.materials:mat.node_tree.nodes.new(type="ShaderNodeTexImage")mat.node_tree.nodes[-1].image = aomapmat.node_tree.links.new(mat.node_tree.nodes[-1].outputs['Color'] ,mat.node_tree.nodes[0].inputs['Surface'])mat.node_tree.nodes[-1].interpolation ='Smart'mat.node_tree.nodes[-1].extension ='EXTEND'

3. 渲染器设置


render = bpy.context.scene.render
render.engine = 'CYCLES'
bpy.data.scenes['Scene'].cycles.device = 'GPU'
bpy.data.scenes['Scene'].cycles.progressive ='BRANCHED_PATH'
bpy.data.scenes['Scene'].cycles.aa_samples =1
bpy.data.scenes['Scene'].cycles.ao_samples =256

4. 烘焙设置


bpy.data.scenes['Scene'].cycles.bake_type ='AO'
bpy.data.scenes['Scene'].render.bake.margin =4
bpy.data.scenes['Scene'].render.bake.use_clear =False

5. 烘焙

需要选中所有mesh,并且不能选中其他类型的资源,不然会报错

bpy.ops.object.select_all(action='DESELECT')for object in bpy.data.objects:if object.type == 'MESH':bpy.context.view_layer.objects.active = objectobject.select_set(True)
# 开始烘焙
bpy.ops.object.bake(type='AO')
aomap.save_render(output_path)

这篇关于Blender烘焙AO操作及对应的python代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/397191

相关文章

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

nudepy,一个有趣的 Python 库!

更多资料获取 📚 个人网站:ipengtao.com 大家好,今天为大家分享一个有趣的 Python 库 - nudepy。 Github地址:https://github.com/hhatto/nude.py 在图像处理和计算机视觉应用中,检测图像中的不适当内容(例如裸露图像)是一个重要的任务。nudepy 是一个基于 Python 的库,专门用于检测图像中的不适当内容。该

基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(五):Blender锥桶建模

前言 本系列教程旨在使用UE5配置一个具备激光雷达+深度摄像机的仿真小车,并使用通过跨平台的方式进行ROS2和UE5仿真的通讯,达到小车自主导航的目的。本教程默认有ROS2导航及其gazebo仿真相关方面基础,Nav2相关的学习教程可以参考本人的其他博客Nav2代价地图实现和原理–Nav2源码解读之CostMap2D(上)-CSDN博客往期教程: 第一期:基于UE5和ROS2的激光雷达+深度RG

代码随想录冲冲冲 Day39 动态规划Part7

198. 打家劫舍 dp数组的意义是在第i位的时候偷的最大钱数是多少 如果nums的size为0 总价值当然就是0 如果nums的size为1 总价值是nums[0] 遍历顺序就是从小到大遍历 之后是递推公式 对于dp[i]的最大价值来说有两种可能 1.偷第i个 那么最大价值就是dp[i-2]+nums[i] 2.不偷第i个 那么价值就是dp[i-1] 之后取这两个的最大值就是d