向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中添加的效果:

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

    渐隐的游戏对象

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

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

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

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

    有洞的固态几何体

    在游戏中遇到的大多数材质都是不透明的,也就是说光没有办法穿透它们。与此同时,很多物体还有非常复杂的几何面(还有平面)。如果用3D s 模型来制作叶子和草未免右点太复杂了。一个更加高效的方式使用**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渲染模式效果如何在几何体上打一个孔洞:

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


  • 相关补充

    这个知识的演示,使用了Unity商城中的ShaderCalibration Scene免费资源,地址如下[已经失效了]:

    https://www.assetstore.unity3d.com/en/#!/content/25422

    更多关于albedotransparency的信息,可以通过下面的链接查询:

    http://docs.unity3d.com/Manual/StandardShaderMaterialParameterAlbedoColor.html