关于unity里pbr技术和材质 unity5默认shader和传统的对比

刚开始也不知道什么是pbr (Physically Based Rendering)后来才发现这是一种新的渲染方式

与之对应的是材质是pbs(Physically Based Shader)

unity中的pbs有两种,一种是金属度的,一种是反射的,

具体前者可以做金属泥土之类,后者用于其他非金属的,但是这不绝对,前者也能做布料木头之类

最终使用还是要看艺术效果

(unity中金属度pbr材质)

(unity中反射流程pbr材质)

PBR做法

albedo map 无光颜色贴图
normal map 法线贴图 
metallic map 金属度贴图 或者specular map 高光贴图

roughness 粗糙度贴图

3.19.2016内容纠正和更新

(unity中普通材质)

传统做法
diffuse mapping 颜色贴图
specular map 高光贴图
normal map 法线贴图

在PBR流程下,游戏中场景将更加符合自然,对于光照的计算也更符合现实。将在以后离线渲染和实时渲染中占据主流,单一材质能模拟出更多现实中的特性

当然在国内这种框架还不是很流行,大部分还是采用传统的方式进行制作。PBR流程和传统区别就是不再使用Specular Map
在PBR里是glossness(光泽 可以理解成高光粗糙度)和metallicity(金属),后面两张基本都是灰度图,需要在游戏引擎中调节效果,据其他网上说法“一般公司会根据项目发一张材质球的表,Albedo ,glossness,metallicity的值的范围都在上面,根据物品的物理属性来调整就行。”
贴图的流程有了新的变化,模型流程没有多少变化

当然这里要说的是unity5,默认材质其实就是使用的pbs,最明显特征是使用了Metallic,金属贴图(这个在unity里可以通过选择shader Standard Specular setup来使用反射版本pbr)也可以继续使用Legacy旧版非pbr材质

现在说下unity5贴图
http://docs.unity3d.com/Manual/StandardShaderMaterialParameters.html
albedo相对于diffuse map 但不相同
固有色贴图(Albedo map)不需要光照信息,看起来更平,没有高光点,大多也不需要叠加AO和那几张黑白边,只需要给出物体表面固有颜色和很浅的纹理而已,一张光泽度贴图(GLOSS map)来表现物体粗糙度(只和粗糙度有关),越粗糙越黑反之越白,一张SPECULAR map 来表现物体固有反光能力的,这个只和材质有关,不同的项目会给出不同的材质的高光色值范围

Metallic 灰度图,就是pbr中特殊的,可以说是金属的感觉吧
normal map 主体蓝色的,法线贴图
height map 是灰度图 这里指的是视差贴图( parallax mapping),当然也可以放凹凸贴图(bump map)或者置换贴图(displacement map)

http://docs.unity3d.com/Manual/StandardShaderMaterialParameterHeightMap.html
这个简单说就是能更好增加凹凸感,这个概念很想法线贴图,但是技术更加复杂,
Occlusion map是灰度图 这个用来保护高光和间接照片照到的地方,间接照明来自环境光和反射光,

Emission 彩色贴图 自发光贴图 控制表面光发射 这个选项也会影响到附近的物体,但是要设置lighting里面是realtime,如果是baked动态物体将不接受光照 其实要看到效果必须加light probe 然后发光的物体要static才能看到,否则只能靠脚本刷新或者其他方式才能看到了

Detail Mask 细节图片的遮罩
Secondary Maps
Detail Albedo 细节颜色贴图
Normal Map 细节的法线贴图
这三个其实是一组为了再放大物体时能看到物体的细节层次,比如做皮肤的毛孔贴图之类,放在这里贴图一般使用repeat并且重复很多次才能达到细节效果

有两种流程可以自己选择
反射流程

金属度流程

混用也没问题,当然金属度还是反射材质没有绝对的使用选择
具体看这里
http://blogs.unity3d.com/2015/02/18/working-with-physically-based-shading-a-practical-approach/
还有画贴图工具

substance

http://quixel.se/

既然说到了pbr那再结合下色彩空间

linear和srgb,HDR区别
人眼有光线自适应的特性,这样也是能让人在暗的场景里看到更多东西,在亮的场景里能分辨更多东西,这种效果一般从电影院这样昏暗的场所里走出来更能体会,眼睛会有一个慢慢适应的过程。现在摄像头一般也会自适应曝光度,但是工业需求的有些还是需要不自动的,三维渲染之中,如果把这种真实完全模拟的图像给人眼看到,会感觉比我们人眼看到灰暗的多,所以一般会在硬件方面做一个反曲线最后变成srgb的色彩空间让人看到。

游戏引擎里面最终效果给人看到,当然是这种强化过的适应人眼的色彩空间,但是我做光照计算和贴图就不行,因为会由于多次的色彩强化导致最终画面强烈失真,这时候就是需要linear的色彩空间,计算时候用真实色彩,直到输出这一步把色彩强化一遍以适合人眼。unity很早就是linear的色彩空间,但是由于后期最后一部的矫正方面很多从业人士的素养不足,或者完全没有这个意识,做出来的效果完全是不正确,或者缺乏调整弹性的。而unreal则在工作流上面几乎是整合和后期的色表,去解决这个问题。

而HDR是模拟人眼的过程,能看到更广范围的光(就是亮的时候能更亮瞎),HDR图像的一般色域也超过普通的RGB色域(但也可以不超过)。HDR在unity中需要勾选摄像机上的HDR选项和使用延迟渲染deferred才能(否则会有滤镜提示The camera is not HDR enabled 这是没使用延迟渲染),要看出效果还要加个bloom之类的

(对照图 在延迟渲染模式和HDR下加Tonemapping(effects里面的))

时间: 2024-10-10 01:23:50

关于unity里pbr技术和材质 unity5默认shader和传统的对比的相关文章

Unity光滑与粗糙的材质——相似于生锈的金属表面

纹理是在Photoshop中制作的,终于效果则是在Unity里得到的.这样的类型的材质.在3D游戏中非经常见.

Unity 材质之_stander shader

Unity自带的两个新的Shader, 分别是Standard以及Standard(Specular setup) 如果你没有为你的材质选择这两个Shader之一, 那么你的材质是不会有PBS效果的, 对比一下PBS. 第一幅图是使用了Unity4中的Bumped Specular, 第二幅图使用了Standard(Specular Setup), 值得一提的是为了展现最纯粹的光照效果我特意关掉了PBS的另一大特性, Reflection. 而如果开启了Reflection, 上面的截图差距应该

【Unity Shaders】Unity里的雾效模拟

写在前面 熟悉Unity的都知道,Unity可以进行基本的雾效模拟.所谓雾效,就是在远离我们视角的方向上,物体看起来像被蒙上了某种颜色(通常是灰色).这种技术的实现实际上非常简单,就是根据物体距离摄像机的远近,来混合雾的颜色和物体本身的颜色即可. Unity里设置雾效有两种方式,一种最简单的就是直接开启全局雾效,也就是在Edit->Render Settings里配置,如下图所示: 而我们只需要把"Fog"选项后面的勾选框打开即可.上图包含了一些设置:雾的颜色,模拟雾采用的方法,

Unity光滑与粗糙的材质——类似于生锈的金属表面

纹理是在Photoshop中制作的,最终效果则是在Unity里得到的.这种类型的材质,在3D游戏中很常见.

Unity里的协程Coroutines

Unity里的Coroutine在帮助我们实现序列化事件时尤其方便.可以让事件依次发生,可以让事件A等待事件B结束后才开始执行. 但需要厘清几个基本概念. Coroutines不是多线程,不是异步技术.Coroutines都在MainThread中执行,且每个时刻只有一个Coroutine在执行. Coroutine是一个function,可以部分地执行,当条件满足时,未来会被再次执行直到整个函数执行完毕. A coroutine is a function that is executed p

Unity内存优化技术测试案例

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解>电子工业出版社等. CSDN视频网址:http://edu.csdn.net/lecturer/144 Unity引擎优化技术,无非涉及到三点:CPU优化,GPU优化,内存优化. 先谈谈内存优化:大概可以分成三大部分: 1. Unity3D内部的内存 2. Mono的托管内存 3. 引入的DLL或者第

Unity里名字牌、血条等头顶挂件的实现

Unity里实现人物头顶的名字牌.血条的实现,网上很多博客有提到过.这里结合自己在项目中的开发,简单总结几点. 宣雨松的热门博客里有提到过直接利用Unity自身的OnGUI()实现人物血条:http://www.xuanyusong.com/archives/1032 . 撇开血条进度条的更新,重点关注头顶物件位置的更新.简化之,实现人物头顶的名字牌的. 核心代码如下: using UnityEngine; using System.Collections; public class Follo

Unity里脚本的执行顺序

Unity里的每个脚本里,都有Unity自带的一些事件, 比如:Awake(),Start(),Update()等...执行顺序也是从上至下的. 但是,在某些情况下, A脚本要在Awake()里调用B脚本里Awake()里初始化的值,但是又不清楚到底是A脚本的Awake()先运行,还是B脚本的Awake()先运行 或者是运行后,发现是A脚本先运行,就报错空指针了.这时候,可以调整一下脚本的执行顺序. 在Unity里的Edit-->Project Setting-->Script Executi

Unity 游戏开发技术学生作品展2014版(完结篇)

新技术都是有周期性的,Unity 技术也不例外.如果说十年前你没有赶上C#,J2EE,嵌入式开发,那么五年前你又没有赶上Android,IOS, 那么你不要再错过这两年的Unity 了. 现在这门技术已经进入快速上升通道,未来几年即将进入顶峰... 目前国内外百分之八十的中小游戏企业都在用Unity 引擎技术,这两年已经成为中小企业游戏开发的标准技术. 我在百度(2014.09.08)键入 "unity 北京平均薪资","unity 平均薪资" 得到如下截图,当然大