天天看点

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

本节书摘来自华章社区《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)可以用很多种方式生成,并且有很多种不同的映射属性。

使用6个不同的纹理贴图

不用1张单独的纹理贴图。也可以在project视图中创建一个空的反射立方图(reflection cubemap)并指定6张不同的图片文件绘制到6个表面上。

用mapping(映射)和shader(着色器)选项练习

对于电池模型,使用圆柱体映射是最好的选择。对于不同的形状可以试试其他选项。除了base 贴图和 reflection纹理贴图,还可以练习使用其他的shader设置,比如main color、specular color、reflection color(可以用于给材质着色),以及shininess(反光度,用于控制镜面发散)。

反射当前的场景图形

继续阅读