更新时间:2022-10-03 17:21:58
本节书摘来自华章社区《Unity开发实战》一书中的第3章,第3.2节创建反射材质,作者 (爱尔兰)Matt Smith (巴西)Chico Queiroz,更多章节内容可以访问云栖社区“华章社区”公众号查看
3.2 创建反射材质
金属、车漆,以及光滑的塑料表面都是一些很常见的需要反射的材质的例子。幸运的是,Unity内置了反射着色器(reflective shader),配置好以后就可以帮我们实现想要的效果了。
3.2.1 准备工作
本节需要准备两个纹理贴图:Base Map(底图)和Reflection Cubemap(反射立方图)。底图得是一张RGBA的图片,alpha通道可以把反射级别指定成从完全不透明(黑色)到完全反射(白色)。反射立方体贴图可能是由六块纹理组成,或者像本节教程这样,只有一个单独的纹理。
为了让读者把精力放在本节的主题:创建一个反射材质,0423_03_01文件夹中准备了一个包,包括一个之前创建的场景,以及一个可以作为反射贴图的.jpg文件。
3.2.2 操作步骤
请按照下面的步骤创建反射材质:
1)把reflectiveMaterial包导入到Unity中。
2)打开reflectiveMaterialLevel 场景,播放时有一个3D物体(一个电池)绕着自己的中轴自转。我们也可以让摄像机绕着电池。
3)停止播放场景,在Hierarchy视图中选中电池,Inspector视图中会显示其材质,使用下拉菜单设置着色器:把值从Diffuse(漫反射)改成 Reflective | Specular(反射|镜面反射)。
5)在Project视图中选择reflectionMap资源,它已经从2D纹理变成了立方图(图标也变了)。
6)选择battery材质并把reflectionMap资源应用到Reflection Cubemap的选项中:
11)保存文件,让Unity重新加载此图片,反射效果在文字标签区域应该更加谨慎。
3.2.3 实现原理
基础纹理的alpha通道设置了反射度,本例中,材质的镜面反射的级别是根据每个像素的亮度而定的。意思是说alpha通道是白色的时候反射立方图(Reflection Cubemap)的可见度更高。
反射立方图(Reflection Cubemap)实际上是由6张不同的图片组成的,这些图片是通过在纹理导入器(Texture Importer)把Texture Type(纹理类型)设置成Reflection(反射)后,由原始的图片文件生成的。这6张图片被映射到立方体的6个面上。
3.2.4 更多内容
反射立方图(Reflection Cubemap)可以用很多种方式生成,并且有很多种不同的映射属性。