US2S2L1——材质与Shader
US2S2L1——材质与Shader
Unity Shader 和 Shader 的区别
Shader是一个更通用的概念,用于描述图形渲染程序中的着色器程序
而Unity Shader是特指在Unity中使用的着色器
你可以认为Unity Shader是对Shader的一种封装
它是对底层图形渲染技术的封装,它提供了一种叫做ShaderLab的语言
来让我们更加轻松的编写和管理着色器
我们在这一阶段主要对Unity Shader当中的ShaderLab进行学习
我们之后的学习在提到Shader这个词时,主要指的就是Unity Shader
Unity中的材质和Shader
在Unity中,材质和Shader是密不可分的两兄弟,想要在Unity中使用Shader就必须要配合材质进行使用
如果我们想要在Unity中体现出一个Shader的渲染效果,必须配合使用材质(Material)和 Shader(Unity Shader)才能达到目标
一般的使用流程是:
- 创建一个材质
- 创建一个Unity Sahder,把该Shader赋给上一步中创建的材质
- 将材质赋予给想要渲染的对象
- 在材质面板中调整 Unity Shader 的相关属性,以达到最终效果
也就是说,Unity中的Shader必须配合材质才能正常使用
创建材质
我们可以在Project窗口中右键创建材质:Create ——> Material
-
创建好材质后,可以选中它后,在Inspector窗口中Shader选项中选择对应的着色器进行关联使用
-
Inspector窗口下方的内容就是选中的Shader提供的可编辑变化的相关变量,他们会直接影响渲染结果
-
关联好Shader后,材质需要赋值给 GameObject 对象上依附的 Mesh Renderer 等相关渲染器组件上进行使用
也就是说只要 Unity Sahder 当中提供对应的可以编辑属性,我们就可以直接在材质中进行编辑,而不需要去修改Shader代码来达到不同效果了
创建Shader
我们可以在Project窗口中右键创建Shader:Create ——> Shader
- Standard Surface Shader(标准曲面着色器)
包含标准光照模型的表面着色器模板 - Unlit Shader
不包含光照的基本顶点/片元着色器 - Image Effect Shader
用于实现屏幕后处理效果的基本模板 - Compute Shader
利用GPU并行计算一些和常规渲染流水线无关的内容 - Ray Tracing Shader
用于实现光线追踪效果的着色器
我们之后的学习重点主要是顶点/片元着色器,因此我们更多的会去学习 Unlit Shader 着色器的编写
我们可以先来认识下 Shader 文件在 Inspector 窗口上显示的内容(以Standard Surface Shader(标准曲面着色器)为例):
-
Default Maps:默认纹理
在这里我们可以设置着色器使用的默认纹理图片
第一次使用该Shader时,这些纹理会自动的赋予到对应的属性上 -
Imported Object:导入的对象
这里可以查看和编辑与着色器对象本身相关的设置,
以及着色器编译器如何处理它 -
Surface Shader(表面着色器)
Show generated code(显示生成的代码)
如果是表面着色器(Surface Shader) ,这里可以点击对应的按钮,
在这里可以查看对应的代码 -
Fixed function:是否使用固定管线进行渲染
(非常老的版本使用的方式) -
Preprocess only:是否开启预处理阶段执行特定代码标记
-
Strip #line directives(开启Preprocess only后出现):
开启后,编译器会在生成的代码中删除所有的 “#line” 指令,
以确保调试和错误定位的准确性 -
Compiled code(Compile and show code):编译并显示代码
可以查看在不同平台时使用不同的图形接口程序时编译出来的代码,
可以帮助我们优化着色器性能 -
Cast shadows:是否投射阴影
-
Render queue:该Shader的渲染队列,决定渲染顺序
-
LOD:LOD级别
-
Ignore projector:是否忽略投影器
-
Disable batching:是否禁用批处理
-
Keywords:是一种用于在渲染过程中启用或禁用特定功能的设置,
通过在 Shader 中定义关键字,你可以在运行时动态地切换不同的渲染通道、特效或选项,以实现多样化的视觉效果 -
Properties:在Unity Shader中用于定义在材质面板中显示的可编辑属性
Shader配合材质使用
有了材质和Shader后,我们才能够将其配合在一起使用
只需要将材质设置为使用对应的着色器,并设置着色器提供的可编辑的相关属性
我们就可以利用他们来渲染出我们想要的各种效果了