Shader和Material的关系
Shader能够设置游戏物体的颜色或者能够通过材质来配置颜色。实际上,一个shader能够让许多物体看起来像是完全不同的物质。
Shader和材质作为一个整体工作:Shader定义了表面看起来可以像哪些东西,材质让表面真正看起来是哪一个具体的东西。
修正紫红色的材质
当我们从一个项目导入资源到当前项目时,有时会出现两个项目的渲染管线不匹配的情况,此时shader也是不匹配的。当某个材质使用的shader和当前渲染管线不匹配时,Unity Editor会使用明亮的紫红色来做警告提示,如下图所示。
上图例子的工程时URP,为了修复紫红色柠檬的问题,我们先选中这个游戏物体,在其Inspector面板中,可以看到其材质的shader被设置为了Standard。在Unity中,如果shader的名字为Standard,则其基本就是Built-in渲染管线的Standard Shader,这种shader在URP工程中是无法正常工作的。我们需要将其改成一个URP shader来修复这个问题。
在Shader下来菜单中,选择Universal Render Pipeline -> Lit,随后我们可以看到问题被修复了。
上面所说的方法仅仅是最简单的一种修复材质错误的方法,但是还有其他很多错误材质的问题并没有这么简单就可以修复。
URP自动材质升级
URP有一个built-in工具来自动转换问题材质。其步骤如下:
1. Unity Editor的主菜单中,选择 Edit -> Render Pipeline -> Universal Render Pipeline -> Upgrade Project Materials to UniversalIRP Materials。
2. 做完第一步后,由于这个选项会修改工程文件,会有一个弹窗提示确认你是否已经备份过项目了。确认后选择Proceed就可以了。
URP项目游戏物体的默认材质
在URP项目中,添加一个Sphere到场景中,我们可以看到,它有一个默认材质Lit。
点击Lit,在其Inspector面板中可以看到,它对应的shader是Universal Render Pipeline/Lit Shader。
我们还可以看到,默认材质的Inspector中的所有东西都是灰的,表明其相关shader和属性在Editor中是无法修改的(但可以通过代码来修改)。
在项目窗口中查找材质
当我们导入了不同资源到项目中后,如何能快速查找项目中的所有材质呢?
首先在项目窗口中点击下图的图标,选择“Two Colume layout”
然后在搜索框里输入t:Material(t表示type,例如想搜索所有脚本,就使用t:Script):
如果想要搜索带关键字的材质,则再加上关键字即可,如下图会搜索名字里有red的材质:
应用材质到游戏物体上
在场景中选择游戏物体,查看Inspector面板,在Mesh Renderer组件中的Materials下,可以进行材质的选择。
当然,也可以拖动项目窗口中想要应用的材质到场景中的某个游戏物体上。
一个材质可以应用到多个游戏物体上,当我们修改材质的属性时,所有使用这个材质的游戏物体都会发生变化。由于材质是整个项目范围内都能看到的,因此即使不同场景的不同游戏物体,只要它们使用同一个材质,材质属性改变后,这些游戏物体也都会变化。
创建材质
一般在Unity项目中,我们会创建一个叫做Materials的目录或类似的目录来管理存放材质。下面的例子会以Materials目录名为例,来看材质的创建过程。
首先,我们在场景中新增一个Cube
然后在项目窗口中,找到Materials目录,点击后,在这个目录下点击右键,选择Create->Material:
命名这个材质名为CubeMaterial,然后在Inspctor里调整一下相关属性,最后应用这个材质到前面创建的Cube游戏物体上。