向PBR中添加透明度
透明度是游戏中很重要的一个方面,标准着色器支持三种不同的实现方式。 如果你想让你的材质获得很逼真的透明或者半透明属性,这个知识点非常有用。玻璃,玻璃瓶子,玻璃窗和各种结晶体都很适合PBR透明着色器。这是因为你依然可以获得PBR带来的包含透明和半透明的效果的逼真效果。 如果你想让UI或者像素艺术这样的不同的东西也具有半透明效果,这里由更加高效的可选方法,就是在 第二章 表面着色器和纹理贴图 这一章节中,创建一个带透明度的材质 这个知识点。
注意
为了能获得一个有透明度的标准材质,仅仅是修改它的 Albedo 颜色属性的alpha通道是不够的。除非你把 Rendering Mode 设置成transparent,否则你的材质是不会产生透明度的。
始前准备
这个知识点将会使用 标准着色器(Standard Shader) ,所以我们没有必要创建新的着色器了:
- 创建一个新的材质球
- 在材质球的 检查器(Inspector) 面板确保 Shader 这个属性设置为了 Standard 或者 Standard (Specular setup) 。
- 然后把这个新创建好的材质球应邀到你想要实现透明度的3D模型上。
操作步骤
标准着色器提供了三种不同类型的透明度。尽管非常的相似,但是它们仍然又细微的差别,并且适用的情形也是不同的。
半透明材质
像干净的塑料,晶体和玻璃这些材料是半透明的。 这就意味着它们都需要PBR这种逼真的效果(比如高光高光,菲涅尔折射和反射)而且允许几何体后面也能被看见的话。如果这是你想要的效果,就按照下面的步骤走:
- 在材质球的 检查器(Inspector) 面板,把 Rendering Mode 这个属性设置为 Transparent 。
- 透明度的数值由 Albedo 颜色或者 Albedo 贴图(如果有)的alpha通道来决定。
下图展示的是Unity5校准场景中四种高度抛光过的塑料球。从左到右,它们的透明度逐渐增高。最后的一个球是完全透明的,但依然保有PBR中添加的效果:
Transparent 这个渲染模式非常适合窗户,瓶子,宝石和头戴式耳机
注意
你需要注意的是大部分的透明材质不会投射阴影。 除此之外,材质的 Metallic 和 Smoothness 也会影响到透明效果。镜子似的表面可以通过把alpha设置为0获得,但是如果它反射所有入射光的话,它就不会表现出透明效果。
渐隐的游戏对象
有时候,你想用渐隐效果让一个游戏对象完全消失。在这个例子中,高光反射,菲涅尔折射 和反射等效果也会消失。当一个渐隐的游戏对象完全透明,它应该是看不见的。为了完成这些,按照下面的步骤操作:
- 在材质的 检查器(Inspector) 面板,把 Rendering Mode 设置为 Fade 。
- 如前面一样,用 Albedo 的颜色或者贴图的alpha通道来决定最终的透明度。
下图展示了一个渐隐的球体。从图中明显可以看出PBR效果也随着渐隐效果逐渐消失。正如你从下面图见到的那样,往右最后的那个球近乎消失不见了:
这个渲染模式最适合 非真实(non-realistic) 物体,比如全息投影,镭射光线,人造光线,幽灵和粒子等效果。
有洞的固态几何体
在游戏中遇到的大多数材质都是不透明的,也就是说光没有办法穿透它们。与此同时,很多物体还有非常复杂的几何面(还有平面)。如果用3DS 模型来制作叶子和草未免右点太复杂了。一个更加高效的方式使用 quad(其实是一个矩形) 加一个叶子的纹理来制作。但是叶子本身是不透明的,那剩下的那张纹理就完全是透明的。 如果你想做这种效果,就按照下面的步骤操作:
- 再材质的 检查器(Inspector) 面板,把 Rendering Mode 设置成 Cutout 。
- 然后使用 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。
更多关于 albedo 和 transparency 的信息,可以通过下面的链接查询:
http://docs.unity3d.com/Manual/StandardShaderMaterialParameterAlbedoColor.html。
希望它能帮到你或者帮你找到思路(^_^)选个表情,或者留个评论吧!