Notifications
Article
GI&PBR&Standard
Updated 4 months ago
188
0
学习笔记

PBR

能量守恒,一个物体显示的光照量总不应该比获得的光照多。
菲涅尔效应:边缘的反射更亮。
微表面模型模型:普通的着色模型假定着色的区域是一个平滑的表面,表面有一个法线,而微表面则认为,着色区域是一个无数比入射光线覆盖范围更小的微小表面组成的粗糙区域,这个微小表面是光滑的镜面反射。表面细微细节对扩散的影响,表面越粗糙,反射光越发散或模糊。
https://www.cnblogs.com/zhouxin/p/5168632.html
https://www.jianshu.com/p/d2c97d0646d5?open_source=weibo_search

Texture

图片类型及相关参数:https://docs.unity3d.com/Manual/class-TextureImporter.html
重点关注Texture type Max Size Format

Standard

https://docs.unity3d.com/Manual/shader-StandardShader.html

Rendering Mode

https://docs.unity3d.com/Manual/StandardShaderMaterialParameterRenderingMode.html
渲染模式主要用来表达材质的透明程度(主要决定了渲染时的顺序,透明物体后渲染)
Opaque:默认模式,不透明
Cutout:透贴,PNG或TGA图片的透明通道决定透明的区域,根据alpha cutoff的值来确定透明区域,alpha值小于设定值的区域完全透明,其他区域不透明。




Transparency:透明,透明程度根据albedo图片的alpha值或主color的alpha的值,特别的,albedo图片的alpha通道可以起到遮罩的作用,透明的区域alpha值小于1,其他反之。可以用来制作窗户的效果,在alpha通道中,窗框区域alpha值为1,窗户区域小于1。而反射和高光则将保持材质本来的样子,如图右,玻璃可以反光。



Fade:也是透明,与Transparency的区别在于Fade的反射和高光也会受到透明的影响,呈现淡入淡出时很有效。

Metallic vs Specular

都可以用来表达大部分材质。Metallic 用金属性的方式描述材质的高光程度和高光范围,0代表最不像金属,1代表最像金属;Specular则直接用高光颜色来材质的高光颜色和范围。二者均可以采用一张黑白图作为遮罩图来控制强度和范围,黑色等于0,白色等于1,灰色则在二者之间。

Smoothness

https://docs.unity3d.com/Manual/StandardShaderMaterialParameterSmoothness.html
粗糙度。表示材质表面的粗糙程度,越光滑越符合镜面反射,反射强烈,值为1,越粗糙越符合散射,表面越不反光,值为0。粗糙度比较特殊,它一般会来源于上面几张图的alpha通道,不单独放置一张图(roughness模式除外,引入Fbx Export插件后会多一个Roughness,用来支持maya的材质,在这种模式下粗糙度是自己一张),在以前的版本smoothness是Metallic的alpha通道,而在2017版本以后,可以自定义smoothness的来源,可以是albedo的也可以是Metallic或Specular的alpha值。配合Reflection Probe可以很容易制作镜子的效果。

Normal Map & Height Map

https://docs.unity3d.com/Manual/StandardShaderMaterialParameterNormalMap.html
https://docs.unity3d.com/Manual/StandardShaderMaterialParameterHeightMap.html
贴个原理https://blog.csdn.net/sunnytina/article/details/49049245
法线贴图和视差贴图,两个都是凹凸贴图。法线贴图是一张RGB贴图,以法线方向为z轴,用来存储切线空间中的法线方向的扰动值,用B通道存储z值,所以看起来是蓝色的。Height Map是Normal Map的改进版,是一张黑白图,通过增加偏移值得方式遮盖凸起的背面,但二者在视角与平面角度过小时均不会有很好的效果,会穿帮显得比较假。二者经常同时配合使用,能够得到比较好的效果。都可以调整相对应的value。

Occlusion Map

https://docs.unity3d.com/Manual/StandardShaderMaterialParameterOcclusionMap.html
遮蔽图。是间接光的遮罩图,是一张黑白图,可以用Height Map的贴图。

Emission

https://docs.unity3d.com/Manual/StandardShaderMaterialParameterEmission.html
自发光。可以调整自发光的颜色和强度,可以用一张RGB图像来表示颜色和强度,还可以调整GI的模式,烘焙、实时或者无,无状态下,物体可以显示自发光,但是不会影响周边的环境。

Secondary Maps (Detail Maps) & Detail Mask

https://docs.unity3d.com/Manual/StandardShaderMaterialParameterDetail.html
细节贴图和遮罩。Secondary Maps包括Detail Albedo 和Normal Map,可以设置自己的平铺值,相机离物体表面到达一定距离后才可以显示的细节部分,而Detail Mask就是细节贴图的遮罩层。

The Fresnel Effect

https://docs.unity3d.comIan/Manual/StandardShaderFresnel.html
菲涅尔反射。越边缘越亮。Standard中没有具体的设置项。通过smoothness来表达,越平滑的物体菲涅尔反射效果越强,反之亦然。

与Substance Painter的结合

通常从Substance中导出主要使用basecolor、roughness、metallic、normal四张图,分别对应Unity的albedo、Metallic和Normal,而roughtness可以使用Roughness Setup模式下的standard,或者放在Metallic或albedo的alpha通道。可以上Bilibili搜索相关视频教程。注意以下教程的版本。
Substance Painter 2018 全新官方教程 https://www.bilibili.com/video/av22171085/index_17.html?t=40
Substance Painter从零开始教程(英文+翻译)https://www.bilibili.com/video/av14584499/index_2.html?t=343
【翼狐网】substance painter初学者官方教程(中文字幕)(2) https://www.bilibili.com/video/av10792808/index_2.html?t=604
Substance Painter新手教程(2) https://www.bilibili.com/video/av7373315/index_2.html?t=565
substance教程-substance入门教学一 https://www.bilibili.com/video/av6843304
substance教程-substance入门教学2https://www.bilibili.com/video/av6843682/?spm_id_from=333.338.recommend_report.1
substance教程-substance入门教学3https://www.bilibili.com/video/av6843840/?spm_id_from=333.338.recommend_report.2

GI

什么是GI?绿色实线的部分就是GI,即间接光。GI流程就是引入间接光对材质的影响。
https://docs.unity3d.com/Manual/GIIntro.html
引入GI后需要和以下下元素配合使用:Light(四种类型的光)、Light Probes(缓存光照信息给实时物体)、Reflection Probe(动态Cubemap,提供环境光)
对于复杂的不宜UV展开的物体,直接使用Light Probe可以明显加快烘焙速度。
有实时GI和烘焙GI两种,烘焙GI又有Enlighten和Progressive 两种,实时GI效果最好,烘焙是性能需求。
Progressive自己特别的参数,Direct Samples 和Indirect Samples代表采样时光簇的数量,数量越多,效果越好,但是烘焙时间越长,Filtering用来处理边缘的噪声,Gaussian边缘更柔和,A-Tree边缘更锐利。
以上两种模式有很多共有的参数,indirect resolution 代表间接光的分辨率,这个分辨率可以以UV Charts的形式直接表现,scene窗口中可以查看,但是这里的分辨率需要和下面Parameters的Resolution相乘,才能最终获得间接光贴图的分辨率;Lightmap Resolution烘焙贴图的分辨率,这个需要和模型的meshrenderer的Scale In Lightmap相乘最终确定分辨率;Lightmap padding用来避免颜色溢出;Lightsize是光照贴图的分辨率(这里指的是最终存储的光照贴图的分辨率,这个并不会减少烘焙时间,是指场景中采用的光照贴图的分辨率,如一个场景可以用一张1024的图去存,也可以用4张512的存,显然1024一张更合理);Ambient Occlution,AO效果。
对于以上参数,这篇文章中有详细表述。https://www.jianshu.com/p/7594b044e6dc
除了各自的一些控制参数之外,实时GI和烘焙GI都会受到Lightmap Parameters的控制,以上参数不光会影响光照的质量,还会影响烘焙的时间。需要理解Resolution、UVCharts 、Clusting的概念。UV Charts的分布情况基本就是光照贴图的分布情况,如果UV Charts晶格有明显的扭曲和分布不均匀,即为分辨率不够;Cluster,簇,是光照贴图信息的代理,是一个中间过程,是UV Charts的两倍,主要用来缓存中间过程,使得烘焙结束后再次调整光照强度和颜色时无需再次计算,可以从Cluster中采样计算,加快光照迭代流程。
Parameters中主要控制项如上图。附上6篇博文,虽然这里主要讲的是Realtime GI,但是这里的参数是通用的。
(1)介绍(2)实时分辨率(3)了解光照图(4)开始预计算(5)光照探测(6)UV展开与减少光照贴图数量http://forum.china.unity3d.com/thread-22888-1-1.html
2017之后含有Mixed Lighting,有baked indirect、shadowmask、subtractive三种混合方式。
Baked Indirect:只烘焙简介光照,直接光和阴影进行实时计算
ShadowMask:静态物体直接光照产生的阴影也会被烘焙到shadowmask中
Subtractive:静态物体直接光和间接光都烘焙,动态物体接收直接光,可在静态物体上投射指方向光的阴影。

渲染路径和gamma矫正

Forward 每个物体会被每个光源渲染成一个“通道”,因此物体受到越多灯光的影响,其渲染次数就会越多;光照数目少时速度快。可以使用MSAA。
Deferred :在屏幕缓冲区中计算光照,多光源可以一次计算,不会因为光源的增多而产生更多的性能开销。
gamma/linear:颜色空间,linear空间下颜色更准确,不会出现白色过爆的情况,但是平台支持情况需要注意。

post processing

强推官方出的屏幕后处理插件,这个和以前相比最大的变化就是多个效果合并以减小性能开销,Neon那个例子中可以让画面产生质变的一个插件。2018 PackManager装的是V2版本,可以用Layer进行遮罩控制更灵活。
相机上添加Post Process Layer,Volume最好在一个空物体上添加,用层来精准控制后处理特效的影响。
待续。。。今天没耐心了,以后继续填坑。

Jack Lee
Fan - Programmer
2
Comments
Comment disabled