【Reading Notes】CP4-Physically Based Rendering in Unity5 (基于物理的渲染)

写在前面

相对于unity4,unity5其中一个最大的改变是基于物理的渲染,简写PBR。前面的章节多次提到PBR但是从来没有深入去探讨,如果想要了解PBR是如何工作并且灵活运用PBR那么你应该阅读这一章节。

在这一章节,你讲了解一下几点:

  • 懂得Metallic(金属材质)的设置
  • 为PBR添加透明
  • 创建一个镜子一般的反射表面
  • 为你的场景烘焙光照(Bake lights)

Introduction 简介

理解在第三章中我们遇到的光照模型,对于我们认识原始光照的过程有很大的帮助。这些光照模型很重要的一点是非常高效,完全真实的着色是代价是十分巨大的,诸如,LambertianBlinnPhong这些光照模型在计算量和真实效果之间做了取舍。拥有更为强大的GPU,使得我们可以创建更加复杂的光照模型和渲染引擎,最终都是为了达到模拟真实光照的行为的目标,简而言之,这就是PBR背后的哲学,追求。如字面意义,PBR尝试去接近真实的物理过程,通过提供特定的材质。目前在各个领域,PBR已经得到了广泛的应用。Unity5中实现的PBR有两个比较重要的方面,其中一个是一个全新的光照模型(Standard),Surface Shaders让开始这可以定制材质的物理属性,但没有根据物理去对这些设置做任何限制。PBR通过光照模型执行物理法则,例如:能量转化(一个物体不能反射的光不能比她本身接受到的多),光的散射(粗糙的表便对光的反射相对于光滑表面更为不规则),Fresnel(一个法国物理学家的名字)反射比(高光反射出现在 grazing angles[中文?] ),表面光吸收(黑暗的物体和角落反射光的量少)。所有这些方面,当然还有其他的,都将在Stardard Lighting Model中被计算。第一个方面是,Global IIIumination(GI)全局光照,使得PBR更为真实,她模拟了物理上的光的传递,也就是说场景中的对象不仅仅是单独被计算,他们是互相影响,都对光照的最后效果产生影响,一个物体反射的光会对另一物体产生影响。这一过程不能在Shader中编程,但是她是渲染引擎中至关重要的一环。不幸的是,真实模拟真实世界的光照已经超出了现代GPU能力范围,Unity5对此作了很多优化(例如,对表面光的反射), 不过需要人为的提供输入。所有这些内容都将在章节的后面被提及,需要提醒的是PBRGI并不保证你的游戏是十分真实的,为了达到更加真实的效果需要大量的经验和专业技能。

Understanding The metallic setup(如何设置metallic属性)

Unity5提供了两种不同类型的PBR**Shaders,**StandardStandard(Specular setup)。她们之间最大的区别是有没有metallic属性,Standard(Specular setup)metallic换成了Specular的设置。这两个不同属性的设置,都是对PBR 计算的一种初始化。这给美术和开发者提供了一种有意义的接近于真是物理属性的调整方式。有很多材质的属性很容易使用Metallic(金属)质感去表达。有些时候,很重要的是要去定义光照是如何反射的。如果之前使用Unity4,Standar(Specularsetup) 也许对于你来说更为熟悉。这一小节将介绍怎么有效率的去设置Metallic,有一点非常重要,要知道的是设置Metallic不仅仅只是能设置Metallic(金属质感)材质,他提供了一种方式去定义材质。使用这两种Shader可以达到同样的表现效果。

Unity4遗留的Shader允许创作者很容易的打破真实的光照情况。这是因为所有Legacy Surface Shader的属性都是无限制的。通过介绍Metallic工作流,Unity5对物体的表现施加了更多的约束,使得创作者更难的去创造不合理的材质。

金属常常是可导电的,光是以电磁波的形式存在,也就是说几乎所有金属材质的表现都十分相似,相对于不导体来说。导电体反射大部分光子和中子(70%-100%),其余的被吸收,而不是扩散,所以金属材质几乎不产生漫反射。绝缘体,正好相反,很低的反射率(4%),其余的光分散在表面,产生漫反射。在unity5中Standard Shader, 纯metallic材质漫反射部分为黑色(没有漫反射)并且高光颜色取决于Aledo纹理(或颜色)。正好相反,对于纯non-metallic材质漫反射部分颜色取决于Aledo纹理(或颜色),高光颜色取决于光照的颜色。

Adding transparency to PBR(为PBR添加透明通道)

透明是现代游戏中非常重要的一部分,Unity5中Standard Shader提供了3中方式去实现。这一小节非常对于想要实现真是材质的透明或半透明效果非常有用。玻璃,瓶子,窗户,晶体都非常合适用带透明属性的PBR实现。要做的仅仅是在之前介绍的PBR加上半透明效果。如果你需要为UI或者平面添加透明效果,选择在第二章的透明材质会来得比较有效率。

实现半透明只需要在Standard Shader的Randering model 选择Transparent或者Fade,选择Transparent将会保留高光,Fade则可以实现全透明。

Solid geometries with holes (来挖个洞)

游戏中越到的大多数材质都是不透明的,意味着光照不能穿过他们。同事,很多物体都是复杂的几何体。建模时如叶子根茎经常显得量十分大。一种更有效率的方案是使用一个面片并加上叶子的纹理贴图。叶子本身是不透明的,所以纹理的叶子的其余部分将是全透明的。如果想要类似的效果,可以这样做:

  1. 将着色器的Rendering Mode设置成cutout
  2. 使用Alpha Cutoff滑块去确定裁剪的范围。

Creating mirrors and reflective surfaces(创建镜面反射)

镜面材质反射光线当你从特定的角度观察的时候,不幸的是即使是Fresnel反射,其中一个十分精确的模型,都不能正确的将旁边的物体投射出来。前面介绍的光照模型仅仅考虑了光源(PBR不是),忽略了光照的二次反射。好像从现在的知识来说,创造镜面的效果几乎不可能。PBR提供的全局光照效果使得这有可能实现,但是实时的GI渲染非常的昂贵,并且需要手动调整。当所有设置合适,讲可以创造出如下的效果:
image

Baking lights in your scene(光照烘焙)

略。。。。

猜你喜欢

转载自blog.csdn.net/coderling/article/details/74279621