Substance与PBR工作流总结

PBR与Substance整合
  1. 关于PBR

PBR即基于物理的渲染,是一套尝试基于真实世界光照物理模型的渲染技术合集,使用了一种更符合物理学规律的方式来模拟光线,达到更真实的渲染效果,而且可以直接通过物理参数来直观地达到想要的结果,不用通过拙劣的各种参数调整。物理参数一般直接通过贴图来传递给Shader。   

 

 2.关于Substance

Substance是Allegorithmic公司的一套PBR美术制作工具,包括Substance Printer和Substance Designer等软件,Substance Painter是PBR贴图绘制软件,

我们可以导入自己的模型,然后绘制输出PBR贴图。而Substance Designer可以输出sbsar文件,sbsar描述了PBR贴图的生成方式,可以导入Substance Painter为材质,也可以直接给Unity使用(Unity2018版本以上需要额外的插件)。在Unity里使用sbsar文件,我们就可以直接在Unity里调参数生成新的PBR贴图。

上图选中的就是一个sbsar文件,包含了5种材质以前材质使用的贴图。

上图是Gold材质的属性面板,我们可以看到有Metal Properties和Age 这类的自定义参数,调整这些参数,就能重新生成新的PBR贴图。

(使用Gold材质的渲染结果)

sbsar文件除了动态生成PBR贴图这个功能,其实与Unity材质没有差别,因为它们都是使用相同的Shader。仅仅使用它的贴图我们也可以渲染出完全一样的效果。

Substance Painter比较重要的注意点是导出贴图的设置,通常我们将Config设置为Unity5(Standard Metallic)

而Unity5(Standard Metallic)的配置我们可以在上面CONFIGURATION中查看和修改:

如图,我们将为每套贴图输出Albedo,Normal,Emission,Metallic4张贴图,Albedo的RGB通道使用Base Color的RGB颜色,Normal的RGB通道是NormalOpenGL的RGB颜色,而Metallic的RGB通道使用Metallic的灰度颜色,A通道使用Roughness的灰度颜色(这是我修改后的配置,默认配置不是这样)。

3.整合到Unity开发流程的问题

实际开发中必定会存在的一个问题是,美术在Substance Painter中调出了一个牛逼哄哄的效果,开开心心地导入Unity,发现效果不一样了!除了一些光照的设置,最主要的是因为Color Space的问题。关于Color Space的概念可以看下这两篇文章:

Gamma & Linear Color Space 和 GAMMA AND LINEAR SPACE - WHAT THEY ARE AND HOW THEY DIFFER

这是Unity中不同Color Space渲染SP的PBR贴图的结果,第一张的Gamma Space,第二张是Linear Space,可以看出差异还是挺明显的,特别是底座的颜色

SP的渲染是在Linear Space中进行的,导出的贴图经过了gamma encoding,如果在Unity中使用Linear Space渲染,渲染结果还是很接近SP中的效果的,但是Linear Space不仅消耗高,而且在某些移动平台上不支持(需要OpenGL ES3.0以上及Metal图形API支持),这意味着我们需要在Gamma Space中得到跟SP一样的渲染效果。

With Unity 5.5, linear rendering is now available on Android and iOS. On Android, linear rendering requires OpenGL ES 3 graphics API which represents 61.1% of the Android devices. On iOS, linear rendering requires Metal graphics API which represents 71.1% of the iOS devices.

4.Substance Printer与Unity Gamma Space渲染效果一致化方案

方案1:修改Unity Standard Shader,手动加入gamma校正,使其达到Linear Space的效果。

Although Unity does not support the default linear pipeline on some platforms such as mobile. It is possible to do so yourself within shaders. This is done by applying the pow() function to gamma corrected input textures to transform the inputs to linear space, and applying pow() again before returning the result to put it back in gamma space. Note that this method will be computationally expensive, so be aware of the capabilities of your target devices and use it only where needed.

Unity提供了在UnityCG.cginc头文件中提供了GammaToLinearSpace和LinearToGammaSpace 两个方法进行两个空间的转化。但是我尝试了仍然没法得到Linear Space的渲染效果,颜色偏差还是存在,而且因为工作流程而加入额外的性能消耗,我觉得不是好方案,于是放弃这个方案。

方案2:不再调整Unity的渲染,我们调整SP的渲染,让其使用Gamma Space渲染。幸好SP支持自定义Shader

这篇文章提供了这个方案:点击打开链接,同时提供了一个模拟Unity PBR渲染的GLSL文件,下载下来,在SP中File->Impoty resources导入,在SHADER SETTINGS中设置为使用该shader,注意把Linear Space勾选去掉,因为我们要使用Gamma Space。导出贴图时,注意要修改Metallic贴图的设置:RGB通道使用Metallic的灰度颜色,A通道使用Roughness的灰度颜色。

Untiy中的和SP中,差异算可以接受了

<think>好的,用户想了解Blender的PBR材质工作流。首先,我需要回忆一下PBR的基本概念,确保自己理解正确。PBR是基于物理的渲染,现在主流的工作流有金属粗糙度和镜面光泽度两种。Blender主要支持的是金属粗糙度工作流,这可能在用户使用过程中需要注意的地方。 接下来,用户可能想知道如何在Blender中实际应用这些工作流。需要提到节点编辑器,因为这是Blender材质制作的核心部分。可能需要解释基础节点,如Principled BSDF,以及如何连接各种贴图,比如基础色、金属度、粗糙度等。 还要注意区分两种不同的工作流,金属粗糙度和镜面光泽度的区别,以及为什么Blender更推荐前者。可能需要提到资源获取,比如常见的贴图来源,以及如何正确导入这些贴图到Blender中。 另外,用户可能关心实际应用中的常见问题,比如贴图导入后颜色不正确,这时候需要解释色彩空间设置,Base Color贴图用sRGB,而金属度和粗糙度用Non-Color。这在实际操作中容易出错,需要特别强调。 最后,或许需要举一个简单的例子,或者推荐一些学习资源,帮助用户进一步学习。比如,提到Blender Guru的教程或者Substance Painter导出设置,这样用户有具体的方向去深入。 需要确保回答结构清晰,分点说明,让用户能一步步理解。同时语言要简洁,避免过于技术化的术语,用中文口语化表达,让不同层次的用户都能理解。还要检查是否有遗漏的重要点,比如节点连接示意图或示例图片,但文本描述的话可能用文字代替。 总结下来,回答应该包括PBR的定义、两种工作流、Blender中的实现步骤(节点设置、贴图连接、色彩空间)、常见问题及解决方案,以及资源推荐。这样用户能全面了解如何在Blender中应用PBR材质工作流。</think>在Blender中实现PBR(基于物理的渲染)材质工作流的完整指南: 1. PBR核心原理 • 物理基础:模拟真实光线材质交互(能量守恒/微表面散射) • 两大主流标准: ✓ 金属-粗糙度工作流(Blender首选) ✓ 镜面-光泽度工作流 2. 核心贴图配置(金属粗糙度流) | 贴图类型 | 对应节点通道 | 色彩空间 | 典型后缀 | |-------------|--------------|-----------|----------------| | 基础色 | Base Color | sRGB | _BaseColor/_Albedo | | 金属度 | Metallic | Non-Color | _Metallic | | 粗糙度 | Roughness | Non-Color | _Roughness | | 法线 | Normal | Non-Color | _Normal | | 环境光遮蔽 | AO | Non-Color | _AO | | 高度 | Displacement | Non-Color | _Height/_Displacement | 3. 节点配置步骤 ① 创建原理化BSDF节点 ② 按层级连接: 基础层 → 金属/粗糙度 → 法线细节 → AO控制 → 置换细节 ③ 高级连接技巧: ▸ 通过RGB混合节点实现材质混合 ▸ 使用凹凸节点增强表面细节 ▸ 通过数学节点控制反射强度 4. 常见问题解决方案 • 金属感不足 → 检查金属度贴图是否含有非0/1值 • 反射过强 → 降低specular参数(建议保持0.5) • 法线翻转 → 添加向量运算节点反转绿色通道 • 置换失真 → 调整细分等级和置换比例 5. 最佳实践 • 贴图分辨率推荐: - 角色/道具:4K(4096x4096) - 环境资产:2K(2048x2048) • 性能优化: - 使用Mipmap贴图 - 烘焙合并纹理通道 - 启用Eevee的SSR反射 6. 工作流增强工具 • 材质库:Poly Haven/Quixel Megascans • 辅助插件:Node Wrangler(快速预览) • 导出规范:遵循glTF 2.0标准进行跨平台适配 7. 进阶技巧 • 各向异性控制:模拟拉丝金属/毛发质感 • 清漆层叠加:实现车漆等复合材质 • 程序化纹理生成:通过噪波纹理动态生成表面细节 建议通过Blender的Node Wrangler插件(Shift+W)快速载入PBR材质包,配合Alt+S快捷键实时切换材质预览模式,可显著提升制作效率。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值