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中,差异算可以接受了

Substance与PBR工作流总结相关推荐

  1. PBR工作流实现与对比

    工作流实现 工作流中的核心内容便是贴图,不论是UE4还是Unity都支持将PBR的参数以贴图的形式传入引擎,我们可以根据一个物体同一mesh或不同mesh的不同区域的属性差异来控制贴图上的属性产生不同 ...

  2. 两种不同的PBR工作流介绍

    本文介绍两种常用的PBR材质工作流:金属/粗糙度工作流(Metal/Roughness)和镜面反射/光泽度工作流(Specular/Glossiness).这两种工作流都可以用来制作一个支持PBR的材 ...

  3. [2018年工作重点规划] substance designer 使用和工作流,材质库

    一.20180225 与公司SD使用者讨论SD 在流程中的工作重点和工作内容 SD适用于PBR 工作流,制作地表和建组材质,学习成本较高,不适合纯美术同学使用,建议TA维护和使用 前期可以考虑从官方材 ...

  4. 【PBR系列一】PBR知识体系

    本文核心知识主要参照知乎毛星云浅墨的游戏编程文章总结归并,并根据个人学习方向进行了筛选摘抄,规划整体学完之后对内容进行代码实现,如有错误或不完整之处,可参照原文阅读. PBR知识体系概览 本系列主要打 ...

  5. 【PBR系列四】PBR核心原理及材质属性查询

    本文核心知识主要参照知乎毛星云浅墨的游戏编程文章总结归并,并根据个人学习方向进行了筛选摘抄,如有错误或不完整之处,可参照原文阅读. 本部分将主要关注基于物理的渲染的核心理论与渲染的光学原理,以在整个系 ...

  6. 【基于物理的渲染(PBR)白皮书】(二) PBR核心理论与渲染光学原理总结

            本文由@浅墨_毛星云 出品,首发于知乎专栏,转载请注明出处           文章链接: https://zhuanlan.zhihu.com/p/56967462 这是[基于物理的 ...

  7. PBR与Blinnphong解读

    我们做光栅化模式的渲染都了解有两种比较常用的渲染方式,一个是blinnphong的渲染,一个是pbr的渲染. blinnphong: blinnphong的渲染模式更多的是一种经验值模拟光照对物体的效 ...

  8. 批量 材质 调整_寒霜引擎的PBR实践3.0(一)材质篇

    随着对游戏美术品质要求的提高,对整个开发从流程pipeline到从业人员的素质要求都开始增加.传统的美术工作流因为依赖个人的经验和感觉,所以在制作大体量项目的过程中很难达到理想效果.而这时,由项目组内 ...

  9. Move to totally PBR

    Date: 2018-11-05 13:15 Categories: 渲染 草稿,未完- Validating 首先要说的是,做基于物理渲染(着色)Validation非常重要,因为稍有不同的代码和数 ...

最新文章

  1. codeforces_A. Salem and Sticks_数组/暴力
  2. 图解Windows下使用SSH Secure Shell Client远程连接Linux
  3. HDU 1261 字串数
  4. Android中ContentProvider组件数据共享
  5. 修改Xmodem/Zmodem上传下载路径
  6. python如何复制oracle数据_Python使用cx_Oracle模块将oracle中数据导出到csv文件的方法...
  7. 数据库利器Navicat最全快捷键整理
  8. 微信小程序网络通信(一)
  9. UVA11192 Group Reverse【水题】
  10. 揭秘全球最大网站 Facebook 背后应用软件
  11. CSC7156 SOP-7
  12. oracle 手机壁纸,盘卷先知 Coiling Oracle壁纸图片65 - 猫猫壁纸酷 wallcoo.com
  13. 全网音乐下载,抖音热歌、无损音乐下载
  14. 关于“嵌入式系统设计师”的了结。
  15. 原来《羊了个羊》也求助了云,拦截bot自动化攻击达5000万次 | CCF C³
  16. (翻译)角色扮演模式(Role playing)
  17. Android 模块 -- 基于XMPP协议的手机多方多端即时通讯方案
  18. 怎么快速了解一个新的项目
  19. 缠论是一种交易方法炒股是不是一定要学习缠论(利用缠论如何选股)
  20. 工作中遇到的问题之android客户端自动生成带logo的二维码

热门文章

  1. 在微信上搞色情?终于要凉了!
  2. Pinia 上手使用(store、state、getters、actions)
  3. mysql错误代码对照表较完整
  4. [顶] [转] 做人的基本原则(看完终身受益)
  5. 名帖362 岳飞 行草《后出师表》
  6. js对象浅拷贝与深拷贝
  7. WCHAR我不再惧怕了
  8. zblog php伪静态,zblog php 伪静态设置详解
  9. 巧妙设置PPT播放时能偷看备注
  10. 项目管理知识体系-项目绩效域