Alpha通道
透明度可以通过base map的alpha通道来控制。Alpha值低的话,mesh就变得更加透明,alpha值高的话,mesh的透明度会变低,变得能更加轻松地被看到。当alpha为0时,mesh就完全不可见了,alpha值在中间时,就会呈现出半透明效果。
创建玻璃材质
在Unity中,如何创建一个类似玻璃效果的材质呢?对于一个理想的非常干净的玻璃平面来说,它不会有漫反射(所有的光线都直接穿过了它而没有发生反射),但它却拥有高光反射。但在真实世界中,找不到这种玻璃,现实中的玻璃会带有一点点漫反射。
接下来在Unity下创建一个类似玻璃的材质,首先新建一个材质GlassMaterial,在场景中添加一个圆柱体,然后对这个圆柱体应用这个材质:
在材质的Inspetor中,将Surface Options中的Surface Type属性,从Opaque改为Transparent。然后将Render Face设置为Both,表示正反都要做渲染。
此时圆柱体看起来非常奇怪,那是因为我们给了矛盾的指令:Surface Type是透明的,但alpha通常仍然是默认值(255,不透明)。通过修改Base Map中的A值,我们可以调节表面的透明度。
现在看起来有点像是玻璃了,但是还是差点意思。差的点什么意思呢?就是之前所说的高光反射。这里我们调节一下Smoothness和Metallic属性,来让这个材质看起来更像玻璃一点。
最后,我们还可以改变一下“玻璃”本身的颜色,通过修改Base Map的R,G,B通道的值,让它变绿一点。
使用alpha clipping添加细节
来看下图的物体,它是一片叶子。这个物体是通过创建叶子和叶脉的mesh(较多的顶点)来实现的。
我们当然可以直接使用这个mesh。但是在一个场景中,叶子可能被重复使用非常多次,比如对于一个树来说,可能会有非常多的叶子。如果直接使用mesh,这意味着会有相当大的渲染压力。
实际使用中,通常不会采用这种方式来做。对于叶子来说,它可以是一个非常简单的mesh,只包含非常少的顶点,其表面上的细节比如叶脉等,可以在纹理中使用alpha clipping来实现。这样做的话会使得建模过程和实际运行时的处理过程都变得更加简单。
一般我们通过设置Base Map属性的纹理文件为带alpha clipping的纹理来实现此功能(首先将Surface Type选成Transparent)。如下图:
这些叶子的模式实际只是一个简单的由少数顶点构成的平面:
在Surface Options属性下,将Sureface Type选成Opague,然后将Alpha Clipping勾选上,会出现一个Threshold滑动条,这个阈值会调节alpha clipping的影响权重。根据实际想要的效果进行拖动观察即可。