Unity Shader - Creating and Using Materials - 创建与使用材质

目录:Unity Shader - 知识点目录(先占位,后续持续更新)
原文:Creating and Using Materials
版本:2019.1

Creating and Using Materials

创建与使用材质

创建一个新的材质,使用菜单 Assets->Create->material或是Project视图的右键菜单。

默认的,新的材质会指定Standard的Shader,所有贴图属性都会是空的,默认为纯白色图贴,如:
在这里插入图片描述
材质创建后,你可以应用于一个对象上,并可以调节Inspector上的属性。应用到一个对象上的方法,你可以拖拽Project视图的材质到Scene视图或是Hierarchy视图中的对象。

Setting Material Properties

设置材质的属性

你可以选择Material上你想使用的Shader。在Inspector点击展开Shader下拉菜单,再选择你的Shader。当你更换Shader后,材质可用测参数属性也同时会变换成该Shader对应的暴露属性。属性可以是颜色,纹理,数值,或是向量。如果你将该Material应用在Scene(场景)的可见对象上,你将可以实时的通过调整Material的属性来看到效果。

两种方式来设置Material的Texture属性。

  1. 从Project视图中将纹理资源拖拽到Inspector中纹理属性的旁边的矩形框中
  2. 点击Inspector中纹理属性框中的Select按钮,然后再弹出的窗口中选择对应的纹理资源

Built-in Shaders

内置的Shader

除了Standard Shader,还有其他很多的分类的内置Shader来用于其他需求:

  • FX:光效与玻璃效果。
  • GUIUI:用户的图形界面接口。
  • Mobile:为移动设备使用的简化的高性能Shader。
  • Nature:树和terrain地形使用。
  • ParticlesParticle system效果。
  • Skybox:在所有的几何体充当环境背景渲染使用。
  • Sprites:2D精灵系统使用。
  • Toon:卡通渲染。
  • Unlit:绕过所有光效与阴影的渲染(无光影效果的)。
  • Legacy:被Standard Shader取代的大量的旧版Shader使用。

Shader technical details

Shader着色器的技术细节

Shader着色器是一段脚本,该脚本包含数学或算法来计算一个模型表面的像素如何渲染而用的。Standard shader实现复杂和高逼真度的光效计算。其他的Shader也许简单或是不同的计算实现不用效果。指定Shader后,将会在Material材质中列出对应的一些属性。这些Material属性,在Inspector视图中属性可以是数值,颜色,或是纹理。接着材质将被一个GameObject对象中添加了Renderer(渲染器,可以是MeshRenderer,SkinnedMeshRenderer都是继承自Renderer)组件来渲染mesh(网格)。

扫描二维码关注公众号,回复: 6407831 查看本文章

通常一个纹理可用于多个不同的材质中。根据需求,材质也可能使用不同的Shader。

以下可能的一个例子,设置了三个materials两个shaders一个纹理的组合使用。
在这里插入图片描述
如图,有红色和蓝色的车辆。两个模型的车身分别使用不同的材质,“Red car material"和"Blue car material”。

两个车身都使用了相同的自定义shader,“Carbody Shader”。使用自定义着色器通常为汽车添加了额外的特性,比如金属闪光渲染,或者可能具有自定义损伤的特性。

每个车身材质都使用了"Car Texture"纹理,该纹理包含了车身的所有细节,而不需要指定其他的纹理颜色了。

车身使用的Shader都使用了一个叫tint color(色调)的属性,以设置不同颜色来达到红色和蓝色的车辆,而仅使用一个纹理就可以实现不同车辆的不同颜色效果了。

车轮模型使用了其他不一样的材质(不同于车身的材质),但该材质同时使用于两车轮,所以两车轮外观看起来是一样的。车轮材质使用Standard Shader,并同样使用了 “Car Texture” 纹理。

注意"Car Texture"纹理包含了车身和车轮的细节,这里叫:texture atlas(纹理图集),意味着模型不同的部位映射了纹理图中不同的部位。

虽然车身材质中使用的纹理包含了车轮的图像内容,但车轮的图像内容并不会显示在车身上,因为在车身几何体网格中,没有映射车轮的纹理内容。

同样,车轮不会显示车身的纹理内容,因为车轮几何体网格没有映射车身的纹理内容。

这个映射通常是由其他的3D软件来完成的,称之为"UV mapping"(UV映射)。

关于Shader(着色器)更多的定义:

  • 渲染一个对象的方法。包含了代码和数学计算,包含光源角度,视图角度,还有其他的计算。Shader还可依赖于不同的图形硬件(不同显卡)使用不同的API。
  • 可自定义Material的Inspector中的参数,如:纹理,颜色,数值。

材质定义:

  • 可指定用于渲染的Shader着色器。
  • 可指定Shader上的参数值 - 如:纹理,颜色,数值。

自定义Shader意味着要编写图形程序。使用ShaderLab语言来完成会简单很多。然而,让Shader着色器在各种图形显卡上工作是一项复杂的任务,需要相当全面的图形卡工作原理知识。

有许多的Shader在Unity中已内置了,还有更多的来自Standard Assets资源库。

猜你喜欢

转载自blog.csdn.net/linjf520/article/details/91045000