转自:https://www.sohu.com/a/156489635_718614

随着最新的次时代技术PBR流程的普及,越来越多的公司由传统流程转向了PBR流程,主要原因在于PBR材质不仅效果上更加贴近于真实,而且制作效率上要比传统快了很多。

此次以一个手雷为案例,分别用了传统流程和PBR流程进行了制作,可以非常直观的对最终效果和制作流程进行对比。

通过上图对比可以看到,运用PBR材质后黄色漆面材质与灰色金属材质的质感,灰尘与金属的质感区分更加明显了,高光细节也更加真实。

传统流程上物体的反射属性是难以表现的,在运用PBR材质后金属的反射也体现的更完美,主要得益于新的金属度和粗糙度两张贴图。

了解PBR相比传统流程的优势后,再来看看制作上有什么不同吧。

在模型制作阶段传统与PBR并没有差别,仍然是中模-高模-低模-法线的流程。接下来详细说明两种方法在材质制作上的流程。

传统流程

1.烘焙AO法线后,转出一张CAVITY贴图,AO正片叠底模式,CAVITY叠加模式,简单进行固有色区分

2.叠加基本纹理

3.叠加金属划痕,物体间锈迹阴影

4.手动绘制掉漆标志等

5.用颜色贴图去色调整色阶制作高光贴图,用黑白贴图的强度区分质感,越白的地方高光越亮,反之越暗。

6.Marmoset Toolbag 1中渲染

PBR流程

PBR流程贴图最终输出为Albedo,Normal,Metalness,Roughness(以金属度,粗糙度流程为例)

1.Albedo相比传统方法去掉了AO的叠加,只有固有色,不包含任何光影信息。

2.法线与传统流程一样

3.Metalness控制材质金属度,金属为白,非金属为黑

4.Roughness控制材质粗糙度,越光滑.高光越集中的材质粗糙度贴图越黑,反之贴图越白。

此次使用Substance Painter 2进行材质制作

  1. 先区分ID贴图,用不同的颜色代表不同的材质或固有色

2.创建新项目,导入模型和法线,AO,ID贴图

3.烘焙面板,烘焙出其他辅助贴图,便于后期使用智能遮罩进行材质制作(法线,AO,ID等贴图也可在Substance Painter中烘焙)

4.使用智能材质球配合ID贴图简单做出材质区分,黄色漆面金属和带有反射的灰色金属,以及黑色的金属环。

5.添加一个深色填充层,粗糙度为白色,给予一个物体之间的智能遮罩模拟物体间的灰尘,可在遮罩层上添加一个PAINT图层手动绘制需要灰尘的地方。

6.新建空层,使用画笔工具选择一个银白掉漆材质,配合黑白划痕纹理拖到Stencil中,绘制金属划痕,划痕过多的地方可用橡皮擦除

7.新建空层,PS中制作一张标志的黑白贴图,拖入Stencil中,画笔选择一个深色固有色,粗糙度偏白,画出标志,并用橡皮擦除磨损的感觉。

8.最终Marmoset Toolbag 2中渲染。

PBR与传统制作流程差异:

通过对比可得出PBR由于大量使用到智能材质体现基本质感,用智能遮罩快速体现物体阴影关系表面细节等,而且是直接进行材质的绘制,不用像传统方法需要手动绘制掉漆和阴影关系,先制作颜色后制作高光贴图,所以在制作效率上有很大的提升。

希望此次分享能对大家有所帮助,让大家更多的认识到PBR流程与传统的差别

【3D美术教程】手雷(传统与PBR流程)的更多相关文章

  1. Java/JDK安装教程手册(正规图文全流程)、运行、环境配置

    Java/JDK教程手册 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 一 Download Resouc ...

  2. 2017.3.31 spring mvc教程(二)核心流程及配置详解

    学习的博客:http://elf8848.iteye.com/blog/875830/ 我项目中所用的版本:4.2.0.博客的时间比较早,11年的,学习的是Spring3 MVC.不知道版本上有没有变 ...

  3. 1、CC2541蓝牙4.0芯片中级教程——基于OSAL操作系统的运行流程了解+定时器和串口例程了解

    本文根据一周CC2541笔记汇总得来—— 适合概览和知识快速索引—— 全部链接: 中级教程-OSAL操作系统\OSAL操作系统-实验01 OSAL初探 [插入]SourceInsight-工程建立方法 ...

  4. Libgdx New 3D API 教程之 -- Libgdx中使用Materials

    This blog is a chinese version of xoppa's Libgdx new 3D api tutorial. For English version, please re ...

  5. 7.Swift翻译教程系列——控制循环的流程

    英语PDF下载链接http://download.csdn.net/detail/tsingheng/7480427 Swift提供了类C语言类似的控制流结构.包含for循环和while循环来多次运行 ...

  6. Entity Framework入门教程(2)---EF工作流程

    EF工作流程 1.EF基本CRUD流程 下边的图就可以很清晰地展示EF的CRUD操作的基本工作流程: 这里做一个EF CRUD操作的简单总结:1.定义模型:这是EF工作的前提,定义模型包括定义领域类( ...

  7. Unity 3D中ToLua-UGUI使用说明、导入Unity流程、制作登陆界面

    ToLua制作登录界面 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 请支持大神开发者:骏擎CP,蒙哥等奔 ...

  8. Unity 3D换装系统教程/Demo

    Unity3D换装系统教程 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 1 Costume Change ...

  9. CSS3 3D笨蛋教程

    英文原文An Introduction to CSS 3-D Transforms 爱因斯坦说所有概念都必须介绍给儿童们,若他们无法了解,这些理论就毫无价值. 透视 一个元素需要一个透视点才能激活3D ...

随机推荐

  1. 获取页面定位元素left top

    1原生方法: 第一种方法,比较简单,就是直接通过obj.style.left和obj.style.top,但是有局限性,这种获取的方法只能获取到行内样式的left和top的属性值,不能获取到style ...

  2. systemctl用法及其语法

    1.确定是否安装systemd及其版本 # systemctl –version 2.确定systemd和systemctl的二进制文件和库文件的安装位置 # whereis systemd # wh ...

  3. 封装一个函数,在ThinkPHP中一定程度上取代success和error

    1.下载jq2.下载layer3.根据自己的项目配置,将上述2文件放到样式目录中4.在Application/Common/function.php中添加如下代码function msg($msg,$ ...

  4. Windows查看Java内存使用情况

    Windows查看Java程序运行时内存使用情况 1.在cmd命令窗口输入 jconsole  ,弹出Java监视和管理控制台窗口 2.连接本地进程,首先需要知道想查看的进程ID ( pid ) 在c ...

  5. Saiku关于MDX过滤的使用(九)

    Saiku查询设定:Saiku查询数据时,每次都是全量查询的,我们现在需要默认展示近一周的数据. 通过编写使用MDX表达式进行过滤 通过编写MDX表达式,添加新的指标信息对一周以内的数据进行标识 (其 ...

  6. box-sizing的用法

        默认情况下设置盒子的width是指内容区域,所以在设置边框会使得盒子往外扩张,如果要让css设置的width就是盒子最终的宽度,那么就要设置box-sizing:border-box,     ...

  7. 团队-爬虫豆瓣top250项目-模块开发过程

    项目托管平台地址:https://github.com/gengwenhao/GetTop250.git 开发模块功能: "get_info()单个页面的爬取"功能,开发时间:15 ...

  8. windows 安装mysql 5.7的正确姿势

    1.首先上MySql的官网下载  https://dev.mysql.com/downloads/mysql/ 2. 以我所选版本为例(免安装版),选择MYSQL Community Server 然 ...

  9. python3+requests:接口自动化测试(二)

    转载请注明出处:https://www.cnblogs.com/shapeL/p/9188495.html 前言:上篇文章python3+requests+unittest:接口自动化测试(一):ht ...

  10. js--函数声明和函数表达式--执行顺序

    思考: notice:在写JS代码的时候,有两种写法,一种是函数表达式,另外一种是函数声明方式.我们需要重点注意的是,只有函数声明形式才能被提升. function hoistFunction() { ...