[unity3D基础教程]Unity3D材质与着色器 Materials and Shaders

本文介绍了Unity中材质(Materials)与着色器(Shaders)之间的关系及其使用方法。着色器通过代码定义了渲染属性和资源类型,而材质则允许用户调整这些属性并分配资源。文章详细讲解了如何创建新材质、设置材质属性以及内置着色器的种类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

There is a close relationship between Materials and Shaders in Unity. Shaders contain code that defines what kind of properties and assets to use. Materials allow you to adjust properties and assign assets.

在Unity中材质与着色器之间有着密切的关系。着色器包含着定义了属性和资源使用种类的代码。材质允许你调整属性和分配资源。

色器通过材质来实现
A Shader is implemented through a Material 着色器通过材质来实现

To create a new Material, use Assets->Create->Material from the main menu or the Project View context menu. Once the Material has been created, you can apply it to an object and tweak all of its properties in the Inspector. To apply it to an object, just drag it from the Project View to any object in the Scene or Hierarchy.

要创建新材质,从主菜单或项目视图的环境菜单中,选择Assets->Create->Material来创建。一旦材质已经创建,你可以将它应用到一个对象并在检视视图中调整其所有属性。要将它应用到一个对象,只需将它从项目视图中拖到场景视图或层次视图的某个对象上。

Setting Material Properties 设置材质属性

You can select which Shader you want any particular Material to use. Simply expand the Shader drop-down in the Inspector, and choose your new Shader. The Shader you choose will dictate the available properties to change. The properties can be colors, sliders, textures, numbers, or vectors. If you have applied the Material to an active object in the Scene, you will see your property changes applied to the object in real-time.

你可以选择你想要用于任何特殊材质的着色器。只需在检视视图中展开Shader下拉菜单,并选择你的新着色器。你选择的着色器将支配可用的属性发生变化。这些属性可以是颜色、滑块、纹理、数字、或向量。在场景中如果你已经将材质应用到一个活动对象,你会实时看到属性的更改应用到了对象。

There are two ways to apply a Texture to a property.

有两种方法可以将一个纹理应用到一个属性。

  1. Drag it from the Project View on top of the Texture square 
    从项目视图中拖动它到方形纹理上面
  2. Click the Select button, and choose the texture from the drop-down list that appears 
    单击Select(选择)按钮,然后从出现的下拉列表中选择纹理

Two placement options are available for each Texture:

  • Tiling  平铺
    Scales the texture along the different.  沿着不同的(方向)缩放纹理
  • Offset  偏移
    Slides the texture around.  纹理偏移

Built-in Shaders 内置着色器

There is a library of built-in Shaders that come standard with every installation of Unity. There are over 30 of these built-in Shaders, and six basic families.

Unity的每个标准安装包都有一个内置着色器的库。有超过30个内置着色器和六个基本族。

  • Normal: For opaque textured objects. 
    标准:对于不透明纹理对象
  • Transparent: For partly transparent objects. The texture's alpha channel defines the level of transparency. 
    透明:对于部分透明的对象。纹理的alpha通道定义透明度
  • TransparentCutOut: For objects that have only fully opaque and fully transparent areas, like fences. 
    透明剪影:对于拥有完全不透明和完全透明的区域的对象,比如栅栏
  • Self-Illuminated: For objects that have light emitting parts. 
    自身发光:对于有发光部件的对象
  • Reflective: For opaque textured objects that reflect an environment Cubemap
    反射:对于能反射外界立方体贴图的不透明纹理对象(比如镜子,本身不透明,但其反映的是外界环境的贴图——个人理解)

In each group, built-in shaders range by complexity, from the simple VertexLit to the complex Parallax Bumped with Specular. For more information about performance of Shaders, please read the built-in Shader performance page

在每一组中,内置的着色器按复杂性排列,从简单的顶点光亮到复杂的视差凸起镜面。如需更多有关着色器性能的信息,请阅读内置着色器性能页面

This grid displays a thumbnail of all built-in Shaders:

此网格显示所有内置着色器的缩略图:

Materials and Shaders(材质与着色器)
The builtin Unity shaders matrix

Shader technical details 着色技术细节

Unity has an extensive Shader system, allowing you to tweak the look of all in-game graphics. It works like this:

Unity有一个广泛的着色系统,让你来调整游戏中的所有图形外观。它的工作原理是这样的:

A Shader basically defines a formula for how the in-game shading should look. Within any given Shader is a number of properties (typically textures). Shaders are implemented through Materials, which are attached directly to individual GameObjects. Within a Material, you will choose a Shader, then define the properties (usually textures and colors, but properties can vary) that are used by the Shader.

一个着色器本质上定义了游戏中的明暗应该如何表现的规则。在任意给定的着色器里是一个属性(通常是纹理)的数量。着色器通过材质执行,直接附属到特定的游戏对象。在一个材质里,你可以选择一个着色器,然后定义属性(通常是纹理和色彩,但性质可能不同)由该着色器使用。

This is rather complex, so let's look at a workflow diagram:

这是相当复杂的,所以让我们看看一个工作流程图:

Materials and Shaders(材质与着色器)

On the left side of the graph is the Carbody Shader. 2 different Materials are created from this: Blue car Material and Red car Material. Each of these Materials have 2 textures assigned; the Car Texture defines the main texture of the car, and a Color FX texture. These properties are used by the shader to make the car finish look like 2-tone paint. This can be seen on the front of the red car: it is yellow where it faces the camera and then fades towards purple as the angle increases. The car materials are attached to the 2 cars. The car wheels, lights and windows don't have the color change effect, and must hence use a different Material. At the bottom of the graph there is a Simple Metal Shader. The Wheel Material is using this Shader. Note that even though the same Car Texture is reused here, the end result is quite different from the car body, as the Shader used in the Material is different.

图表的左边是车体着色器。 2个不同的材质是这样创建的:蓝色的汽车材质和红色的汽车材质。这些材质的每一个都有2个给定的纹理;汽车纹理定义汽车的主要纹理,和颜色特效纹理。这些属性被着色器所使用,使完成的汽车看上去像喷涂了两种色调。可以看到在红色车前面:面对相机的地方是黄色,然后随角度的增加消退成紫色。车材质附着到了两辆车上。而车轮、车灯和车窗没有颜色变化效果,因此必须使用不同的材质。在图表的底部有一个简单金属着色器。车轮材质使用这个着色器。请注意,即使同样的汽车纹理在这里被重用,最终车身产生的结果是完全不同的,因为在材质中使用的着色器是不同的。

To be more specific, a Shader defines:

更多具体细节,一个着色器定义了如下内容:

  • The method to render an object. This includes using different methods depending on the graphics card of the end user. 
    方法用以呈现(渲染)一个对象。这包括根据最终用户的图形卡使用不同的方法。
  • Any vertex and fragment programs used to render. 任意顶点和用于渲染的片段程序
  • Some texture properties that are assignable within Materials. 可指派到材质中的一些纹理属性
  • Color and number settings that are assignable within Materials. 
    可指派到材质中的颜色和编号设置

A Material defines:

一个材质定义了:

  • Which textures to use for rendering. 用于渲染的纹理
  • Which colors to use for rendering. 用于渲染的颜色
  • Any other assets, such as a Cubemap that is required by the shader for rendering. 
    一些其它资源,例如一个着色器渲染所必需的立方体贴图

Shaders are meant to be written by graphics programmers. They are created using the ShaderLab language, which is quite simple. However, getting a shader to work well on a variety graphics cards is an involved job and requires a fairly comprehensive knowledge of how graphics cards work.

着色器是图形程序员写的。他们创建使用ShaderLab语言,这很简单。但是要让一个着色器在各种图形卡上运行良好却是一个复杂的工作,需要对图形卡如何工作有一个相当全面的了解。

A number of shaders are built into Unity directly, and some more come in the Standard Assets Library. If you like, there is plenty more shader information in the Built-in Shader Guide.

许多着色器直接内置在Unity中,有些作为标准资源库。如果你喜欢,更多有关着色器的信息参见内置着色器指南

3D绘制允许你在游戏和编辑器中绘制场景中的所有对象。 记住这不是一个贴花系统,所以你的游戏不会因为你画了多少而延迟。相反,您的FPS将保持不变,即使您将对象绘制一百万次! 看看:WebGL演示|论坛线程 ▶一致的性能 即使你画了很多,在3D中画的速度还是很快的原因是因为颜料被烘焙成物体的纹理。你的对象已经有纹理了,为什么不使用它们呢?代码也不会产生垃圾(0 gc alloc),所以您不必担心随机延迟峰值。 ▶闪电快速绘画 烤漆成纹理听起来很慢,但是画图代码是在GPU上100%完成的,这使得它的速度非常快。绘制代码也经过了大量优化,以通过将绘制操作组合在一起来最小化状态更改。 ▶完整的c#源代码 就像我的所有资产一样,我提供了完整的c#源代码——没有什么隐藏在.dll中。代码的组织和注释也很好,所以如果需要,可以很容易地进行更改。 ▶长期支持 就像我所有的资产,我提供长期的支持,不会在你购买后就消失。我也提供定期的免费更新基于伟大的功能从客户的要求。 ▶蒙皮绘画 在3D绘制允许您绘制动画对象伟大的性能。看看WebGL的演示,看看僵尸油漆看起来有多棒。 ▶无缝紫外线绘画 如果你有一个复杂的网格,它是常见的接缝时绘画,甚至当使用专业的绘画软件。3D绘画解决 了这个问题,包括“缝线固定”工具。3D绘画也使多个对象之间的绘画无缝连接,即使它们有不同的比例。 ▶易于使用 就像我的所有资产一样,我尽量保持界面简单。在几分钟之内,你就可以在游戏中添加绘画功能,并根据你的需要调整简单而强大的设置。 ▶团队基础绘画 3D绘画具有易于使用的基于团队的绘画功能。你可以指定一个特定的颜色给一个特定的团队,并计算每个团队在你的场景中画了多少像素! ▶Multi-Texture绘画 如果你有一个复杂的材质着色器,有多个纹理一起工作,那么没问题。3D绘画允许你创建画笔,在同一时间绘制多个纹理,并给予每个画笔独特的设置。 ▶完整的物质支持 3D绘制不仅支持绘制所有的材质着色器统一,但所有你的定制的!使用直观的检查器,您可以轻松地选择您想要绘制的材质和纹理。 ▶在游戏&编辑器 3D绘画从一开始就被设计来支持游戏和编辑器中的绘画。这允许您在编辑器中快速调整纹理,然后在游戏中使用完全相同的特性绘制它们。 ▶混合模式 你不局限于画普通的反照率纹理。3D绘画有一系列的混合模式和设置,允许你画任何类型的纹理你喜欢。例如,添加混合照明纹理,RGB隔离阿尔法混合切割纹理,和更多。
3D绘制允许你在游戏和编辑器中绘制场景中的所有对象。 记住这不是一个贴花系统,所以你的游戏不会因为你画了多少而延迟。相反,您的FPS将保持不变,即使您将对象绘制一百万次! 看看:WebGL演示|论坛线程 ▶一致的性能 即使你画了很多,在3D中画的速度还是很快的原因是因为颜料被烘焙成物体的纹理。你的对象已经有纹理了,为什么不使用它们呢?代码也不会产生垃圾(0 gc alloc),所以您不必担心随机延迟峰值。 ▶闪电快速绘画 烤漆成纹理听起来很慢,但是画图代码是在GPU上100%完成的,这使得它的速度非常快。绘制代码也经过了大量优化,以通过将绘制操作组合在一起来最小化状态更改。 ▶完整的c#源代码 就像我的所有资产一样,我提供了完整的c#源代码——没有什么隐藏在.dll中。代码的组织和注释也很好,所以如果需要,可以很容易地进行更改。 ▶长期支持 就像我所有的资产,我提供长期的支持,不会在你购买后就消失。我也提供定期的免费更新基于伟大的功能从客户的要求。 ▶蒙皮绘画 在3D绘制允许您绘制动画对象伟大的性能。看看WebGL的演示,看看僵尸油漆看起来有多棒。 ▶无缝紫外线绘画 如果你有一个复杂的网格,它是常见的接缝时绘画,甚至当使用专业的绘画软件。3D绘画解决了这个问题,包括“缝线固定”工具。3D绘画也使多个对象之间的绘画无缝连接,即使它们有不同的比例。 ▶易于使用 就像我的所有资产一样,我尽量保持界面简单。在几分钟之内,你就可以在游戏中添加绘画功能,并根据你的需要调整简单而强大的设置。 ▶团队基础绘画 3D绘画具有易于使用的基于团队的绘画功能。你可以指定一个特定的颜色给一个特定的团队,并计算每个团队在你的场景中画了多少像素! ▶Multi-Texture绘画 如果你有一个复杂的材质着色器,有多个纹理一起工作,那么没问题。3D绘画允许你创建画笔,在同一时间绘制多个纹理,并给予每个画笔独特的设置。 ▶完整的物质支持 3D绘制不仅支持绘制所有的材质着色器统一,但所有你的定制的!使用直观的检查器,您可以轻松地选择您想要绘制的材质和纹理。 ▶在游戏&编辑器 3D绘画从一开始就被设计来支持游戏和编辑器中的绘画。这允许您在编辑器中快速调整纹理,然后在游戏中使用完全相同的特性绘制它们。 ▶混合模式 你不局限于画普通的反照率纹理。3D绘画有一系列的混合模式和设置,允许你画任何类型的纹理你喜欢。例如,添加混合照明纹理,RGB隔离阿尔法混合切割纹理,和更多。 信贷:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值