且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

《Unity开发实战》——3.2节创建反射材质

更新时间: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(反射|镜面反射)。


《Unity开发实战》——3.2节创建反射材质

5)在Project视图中选择reflectionMap资源,它已经从2D纹理变成了立方图(图标也变了)。
6)选择battery材质并把reflectionMap资源应用到Reflection Cubemap的选项中:


《Unity开发实战》——3.2节创建反射材质

11)保存文件,让Unity重新加载此图片,反射效果在文字标签区域应该更加谨慎。

3.2.3 实现原理
基础纹理的alpha通道设置了反射度,本例中,材质的镜面反射的级别是根据每个像素的亮度而定的。意思是说alpha通道是白色的时候反射立方图(Reflection Cubemap)的可见度更高。
反射立方图(Reflection Cubemap)实际上是由6张不同的图片组成的,这些图片是通过在纹理导入器(Texture Importer)把Texture Type(纹理类型)设置成Reflection(反射)后,由原始的图片文件生成的。这6张图片被映射到立方体的6个面上。

3.2.4 更多内容
反射立方图(Reflection Cubemap)可以用很多种方式生成,并且有很多种不同的映射属性。

  1. 使用6个不同的纹理贴图
    不用1张单独的纹理贴图。也可以在Project视图中创建一个空的反射立方图(Reflection Cubemap)并指定6张不同的图片文件绘制到6个表面上。
  2. 用Mapping(映射)和Shader(着色器)选项练习
    对于电池模型,使用圆柱体映射是***的选择。对于不同的形状可以试试其他选项。除了Base 贴图和 Reflection纹理贴图,还可以练习使用其他的Shader设置,比如Main Color、Specular Color、Reflection Color(可以用于给材质着色),以及Shininess(反光度,用于控制镜面发散)。
  3. 反射当前的场景图形
    如果使用的是Unity专业版,可以从当前的场景图形中创建反射贴图。其实还可以实时反射场景或者把一个单独的帧烘焙成反射立方图(Reflection Cubemap)。Unity的文档中包含所有相关的介绍和脚本代码:http://unity3d.com/support/documentation/ScriptReference/Camera.RenderToCubemap.html