《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(反射|镜面反射)。


0b97b76ace1f8b0007742ab79b20cfebd597b45d

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


0fc74346d5916d48e6eca2d204168e6e447be37f

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
相关文章
|
9月前
|
存储 编译器 图形学
使用Unity在材质球上实现绘画:详细解释每一行Shader代码!
使用Unity在材质球上实现绘画:详细解释每一行Shader代码!
115 0
|
9月前
|
存储 编译器 图形学
使用Unity在材质球上实现绘画:详细解释每一行Shader代码!
使用Unity在材质球上实现绘画:详细解释每一行Shader代码!
114 0
|
图形学 机器人
带你读《Unity游戏开发(原书第3版)》之三:模型、材质和纹理
本书主要介绍Unity2018的使用和游戏开发流程中涉及的各种知识。每一章的结构特别清晰,先综述该章要介绍的内容,然后一步步深入讲解,中间穿插着很多动手做的实践操作,可以让读者加深对某个概念、方法的理解,每章的最后还有一个小测验和一个稍微大一点的实践练习,用于巩固该章的学习内容。
|
图形学
【Unity Shader】(八) ------ 高级纹理之立方体纹理及光线反射、折射的实现
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_37027464/article/details/83511904 笔者使用的是 Unity 2018.2.0f2 + VS2017,建议读者使用与 Unity 2018 相近的版本,避免一些因为版本不一致而出现的问题。
2156 0
|
程序员 C# 图形学
Unity C#基础之 反射反射,程序员的快乐
反射反射,程序员的快乐 这句话想必大家都经常听过,基本上在绝大多数的框架和一些设计模式中都能看到反射的身影(MVC、IOC、AOP、O/RM), 反射:是.Net Framework提供的一个帮助类库,可以访问dll的metadata,并且使用它。
1139 0