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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/165550.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CentOS Stream 9系统Cgroup问题处理

安装docker容器启动失败 之前适配过Ubuntu系统的容器,由于版本比较高,没有挂载Cgroup的路径。这次使用Centos Stream 9系统安装docker容器时也遇到了这个情况。由于处理方式有些不一样,所以记录一下。 这是docker容器启动过报错的输出日志。…

Haclon简介及数据类型

Haclon简介 HALCON是由德国MVtec公司开发的机器视觉算法包,它由一千多个各自独立的函数(算子)构成,其中除了包含各类滤波、色彩以及几何、数学转换、形态学计算分析、图像校正,目标分类辨识、形状搜寻等基本的图像处理…

C/C++文件操作————写文件与读文件以及通讯录的改进 (保姆级教学)

个人主页:点我进入主页 专栏分类:C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 欢迎大家点赞,评论,收藏。 一起努力,一起奔赴大厂。 目录 1.前言 2.写文件函数与读文件函数 …

多个JDK版本可以吗:JDK17、JDK19、JDK1.8轻松切换(无坑版)小白也可以看懂

多个版本JDK切换 多个JDK:JDK17、JDK19、JDK1.8轻松切换(无坑版)小白也可以看懂 提示:看了网上很多教程,5w观看、32w观看、几千观看的,多多少少带点坑,这里我就把踩过的坑都给抹了 文章目录 多…

「Verilog学习笔记」不重叠序列检测

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网 题目要求检测a的序列,a为单bit输入,每个时刻可能具有不同的值, 当连续的六个输入值符合目标序列表示序列匹配,当六个输入值的…

Redisson分布式锁源码解析、集群环境存在的问题

一、使用Redisson步骤 Redisson各个锁基本所用Redisson各个锁基本所用Redisson各个锁基本所用 二、源码解析 lock锁 1) 基本思想: lock有两种方法 一种是空参 另一种是带参 * 空参方法:会默认调用看门狗的过期时间30*1000&…

内网穿透的应用-如何在本地安装Flask,以及将其web界面发布到公网上并进行远程访问

轻量级web开发框架:Flask本地部署及实现公网访问界面 文章目录 轻量级web开发框架:Flask本地部署及实现公网访问界面前言1. 安装部署Flask2. 安装Cpolar内网穿透3. 配置Flask的web界面公网访问地址4. 公网远程访问Flask的web界面 前言 本篇文章讲解如何…

『亚马逊云科技产品测评』活动征文|通过Lightsail搭建个人笔记

提示:授权声明:本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在 Developer Centre, 知乎,自媒体平台,第三方开发者媒体等亚马逊云科技官方渠道 文章目录 前言实践知识储备Lightsail介绍Leanote介绍实践…

VSCode插件koroFileHeader的使用。

文章目录 前言一、koroFileHeader是什么?二、使用步骤1.安装1.配置2.食用 前言 今天的天气还不错,真是金风玉露一相逢,便胜却人间无数,写篇博客玩玩,主题:注释。注释的本质就是对代码的解释和说明&#xf…

STM32_6(TIM)

TIM定时器(第一部分) TIM(Timer)定时器定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时不仅…

在游戏开发中,实时渲染和离线渲染对于游戏平衡的影响有哪些?

实时渲染和离线渲染对游戏平衡有那些影响呢?在游戏开发中,渲染方式的选择对游戏的整体表现和玩家体验有着至关重要的作用。那么,实时渲染和离线渲染究竟有哪些利弊呢? 一、实时渲染 实时渲染,顾名思义,是…

Ubuntu 1.84.2Visual Studio Code 下载配置与vscode查看内存Hex Editor插件,简单易懂

目录 前言 一 首先我为啥要重装Vs Code呢? 二 下载1.84.2Visual Studio Code 三 配置Vscode终端字体 四 安装插件 前言 这是一篇将老版本的VsCode下载至最新版的博文,从下载到调试全篇 一 首先我为啥要重装Vs Code呢? 因为我想安装这个…

1、postman的安装及使用

一、安装、登录 1.安装 下载地址 2.注册登录(保存云服务进度) 二、界面介绍 三、执行接口测试页面 请求页签: 1、params:当是get请求时,通过params传参 2、authorization:鉴权 3、headers&#xff1…

idea 26 个天花板技巧

1、 查看代码历史版本;2、 调整idea的虚拟内存:;3、 idea设置成eclipse的快捷键;4、 设置提示词忽略大小写;5、 关闭代码检查;6、 设置文档注释模板;7、 显示方法分隔符;8、 设置多行…

DAOS低时延与高性能RDMA网络

什么是RDMA RDMA(Remote Direct Memory Access)远程直接内存访问是一种技术,它使两台联网的计算机能够在主内存中交换数据,而无需依赖任何一台计算机的处理器、缓存或操作系统。与基于本地的直接内存访问 ( DMA ) 一样&#xff0c…

03-详细介绍Stream及其常用API

Stream API Stream API(java.util.stream)把真正的函数式编程风格引入到Java中,可以极大地提高程序员生产力,让程序员写出高效、简洁的代码 实际开发中项目中多数数据源都是来自MySQL、Oracle等关系型数据库,还有部分来自MongDB、Redis等非关系型数据库 从关系型…

1.测试基础

目录 一、测试基础 1.软件测试中基础信息定义 2.测试主流技能 3.常见的测试分类 3.1按阶段划分 3.2按代码可见度划分 3.3其他 4.测试模型 5.测试流程 6.测试用例 二、用例设计方法 2.1等价类 2.2 边界值 2.3判定表法 2.4场景法 2.5错误推测法 三、缺陷管理 1…

文章解读与仿真程序复现思路——电力系统自动化EI\CSCD\北大核心《交直流配电网中柔性软开关接入的规划-运行协同优化方法》

这个标题涉及到交直流配电网中柔性软开关接入的规划-运行协同优化方法。下面是对这个标题各部分的详细解读: 交直流配电网: 这指的是一个电力系统,同时包含交流和直流电力传输的元素。这样的系统可能结合了传统的交流电力传输和近年来兴起的直…

python中一个文件(A.py)怎么调用另一个文件(B.py)中定义的类AA详解和示例

本文主要讲解python文件中怎么调用另外一个py文件中定义的类,将通过代码和示例解读,帮助大家理解和使用。 目录 代码B.pyA.py 调用过程 代码 B.py 如在文件B.py,定义了类别Bottleneck,其包含卷积层、正则化和激活函数层,主要对…