向PBR中添加透明度

透明度是游戏中很重要的一个方面,标准着色器支持三种不同的实现方式。 如果你想让你的材质获得很逼真的透明或者半透明属性,这个知识点非常有用。玻璃,玻璃瓶子,玻璃窗和各种结晶体都很适合PBR透明着色器。这是因为你依然可以获得PBR带来的包含透明和半透明的效果的逼真效果。 如果你想让UI或者像素艺术这样的不同的东西也具有半透明效果,这里由更加高效的可选方法,就是在 第二章 表面着色器和纹理贴图 这一章节中,创建一个带透明度的材质 这个知识点。

注意

为了能获得一个有透明度的标准材质,仅仅是修改它的 Albedo 颜色属性的alpha通道是不够的。除非你把 Rendering Mode 设置成transparent,否则你的材质是不会产生透明度的。


  • 始前准备

    这个知识点将会使用 标准着色器(Standard Shader) ,所以我们没有必要创建新的着色器了:

    1. 创建一个新的材质球
    2. 在材质球的 检查器(Inspector) 面板确保 Shader 这个属性设置为了 Standard 或者 Standard (Specular setup)
    3. 然后把这个新创建好的材质球应邀到你想要实现透明度的3D模型上。

  • 操作步骤

    标准着色器提供了三种不同类型的透明度。尽管非常的相似,但是它们仍然又细微的差别,并且适用的情形也是不同的。

    半透明材质

    像干净的塑料,晶体和玻璃这些材料是半透明的。 这就意味着它们都需要PBR这种逼真的效果(比如高光高光,菲涅尔折射和反射)而且允许几何体后面也能被看见的话。如果这是你想要的效果,就按照下面的步骤走:

    1. 在材质球的 检查器(Inspector) 面板,把 Rendering Mode 这个属性设置为 Transparent
    2. 透明度的数值由 Albedo 颜色或者 Albedo 贴图(如果有)的alpha通道来决定。

    下图展示的是Unity5校准场景中四种高度抛光过的塑料球。从左到右,它们的透明度逐渐增高。最后的一个球是完全透明的,但依然保有PBR中添加的效果: diagram

    Transparent 这个渲染模式非常适合窗户,瓶子,宝石和头戴式耳机


注意
你需要注意的是大部分的透明材质不会投射阴影。 除此之外,材质的 MetallicSmoothness 也会影响到透明效果。镜子似的表面可以通过把alpha设置为0获得,但是如果它反射所有入射光的话,它就不会表现出透明效果。


渐隐的游戏对象

有时候,你想用渐隐效果让一个游戏对象完全消失。在这个例子中,高光反射,菲涅尔折射 和反射等效果也会消失。当一个渐隐的游戏对象完全透明,它应该是看不见的。为了完成这些,按照下面的步骤操作:

  1. 在材质的 检查器(Inspector) 面板,把 Rendering Mode 设置为 Fade
  2. 如前面一样,用 Albedo 的颜色或者贴图的alpha通道来决定最终的透明度。

下图展示了一个渐隐的球体。从图中明显可以看出PBR效果也随着渐隐效果逐渐消失。正如你从下面图见到的那样,往右最后的那个球近乎消失不见了: diagram

这个渲染模式最适合 非真实(non-realistic) 物体,比如全息投影,镭射光线,人造光线,幽灵和粒子等效果。

有洞的固态几何体

在游戏中遇到的大多数材质都是不透明的,也就是说光没有办法穿透它们。与此同时,很多物体还有非常复杂的几何面(还有平面)。如果用3DS 模型来制作叶子和草未免右点太复杂了。一个更加高效的方式使用 quad(其实是一个矩形) 加一个叶子的纹理来制作。但是叶子本身是不透明的,那剩下的那张纹理就完全是透明的。 如果你想做这种效果,就按照下面的步骤操作:

  1. 再材质的 检查器(Inspector) 面板,把 Rendering Mode 设置成 Cutout
  2. 然后使用 Alpha Cutoff 滑动条来调整裁剪阈值。在 Albedo 贴图中所有alpha值等于或者小于 Alpha Cutoff 值的像素点都会被隐藏。

下图截取至Unity官方的PBR教程(https://www.youtube.com/watch?v=fD_ho_ofY6A)[需要用梯子],向你演示了 Cutout 渲染模式效果如何在几何体上打一个孔洞: diagram

值得注意的是 Cutout 并不允许几何体背面被看见。在前面的示例中,你不能看到球体的内部体积部分。如果你需要这样的一个效果,你需要创建自己的着色器并且确定几何体的背部不会被踢除。