要创建新材质,请从主菜单或 Project 视图__上下文菜单中选择 Assets > Create > Material__。
默认情况下会为新材质指定标准着色器,并且所有贴图属性都为空,如下所示:
创建材质后,可将其应用于对象并在 Inspector 中调整其所有属性。要将材质应用于对象,只需将其从 Project 视图__拖到 Scene__ 或 Hierarchy 视图中的任何对象上。
您可以选择希望特定材质使用的着色器。只需在 Inspector 中展开 Shader 下拉选单,然后选择新的着色器。所选的着色器将决定可更改的属性。属性可能包括颜色、滑动条、纹理、数字或矢量。如果已将材质应用于 Scene 视图中的活动对象,您将看到属性更改会实时应用于对象。
将__纹理__应用于属性时可采用两种方法。
除了标准着色器,还有许多其他类别的内置着色器可用于特殊目的:
一个着色器就是一个脚本,其中包含数学计算和算法,用于定义像素在模型表面上的显示效果。标准着色器执行复杂和逼真的光照计算。其他着色器可能使用更简单或不同的计算来显示不同的结果。在给定的着色器中有许多属性,可由使用该着色器的材质为它们赋值。这些属性可以是数字、颜色定义或纹理,在查看材质时会显示在检视面板中。然后,附加到游戏对象的渲染器组件将使用材质来渲染每个游戏对象的网格。
允许并且通常希望多种不同的材质引用相同的纹理。根据要求,这些材质还可使用相同或不同的着色器。
下面的示例展示了一种可能的设置组合,其中使用三种材质、两种着色器和一种纹理。
图中有一辆红色汽车和一辆蓝色汽车。两个模型对车身使用不同的材质,分别为“Red car material”(红色汽车材质)和“Blue car material”(蓝色汽车材质)。
这两种车身材质使用同一个自定义着色器“Carbody Shader”(车身着色器)。使用自定义着色器的原因是该着色器为专门汽车添加了额外的特性(例如金属性闪光渲染),或者可能具有自定义损坏遮罩功能。
每种车身材质均引用“Car Texture”(汽车纹理),这是包含车身所有细节但没有具体油漆颜色的纹理贴图。
车身着色器还接受一种色调颜色;红色和蓝色汽车设置为不同的颜色,使每辆汽车的外观不同,但两者使用同一种纹理。
车轮模型也使用单独的材质,但这次两辆汽车共用相同的车轮材质,因为每辆汽车的车轮没有差异。车轮材质使用标准着色器,并同样引用汽车纹理。
注意汽车纹理包含的车身和车轮细节:这是一个纹理图集,意味着纹理图像的不同部分被显式映射到模型的不同部分。
即使车身材质使用的纹理也包含车轮图像,车轮细节也不会出现在车身上,因为该纹理的那部分未映射到车身几何体。
同样,车轮材质使用相同的纹理,其中也有车身细节。车轮上不会出现车身细节,因为只有显示车轮细节的纹理部分才映射到了车轮几何体。
此映射由 3D 美术师在外部 3D 应用程序中完成,称为“UV 贴图”。
更具体地说,着色器定义了:
材质定义了:
自定义着色器应由图形工程师构建。为创建自定义着色器,需要使用一种十分简单的语言:__ShaderLab__。然而,让着色器在各种显卡上正常工作是一项复杂的工作,需要相当全面的显卡工作原理知识。
Unity 中直接内置了许多着色器,还有一些着色器位于标准资源 (Standard Assets) 库中。
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.