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)才能达到目标

一般的使用流程是:

  1. 创建一个材质
  2. 创建一个Unity Sahder,把该Shader赋给上一步中创建的材质
  3. 将材质赋予给想要渲染的对象
  4. 在材质面板中调整 Unity Shader 的相关属性,以达到最终效果

也就是说,Unity中的Shader必须配合材质才能正常使用

创建材质

我们可以在Project窗口中右键创建材质:Create ——> Material

image

  1. 创建好材质后,可以选中它后,在Inspector窗口中Shader选项中选择对应的着色器进行关联使用

    image

  2. Inspector窗口下方的内容就是选中的Shader提供的可编辑变化的相关变量,他们会直接影响渲染结果

    image

  3. 关联好Shader后,材质需要赋值给 GameObject 对象上依附的 Mesh Renderer 等相关渲染器组件上进行使用

    image

也就是说只要 Unity Sahder 当中提供对应的可以编辑属性,我们就可以直接在材质中进行编辑,而不需要去修改Shader代码来达到不同效果了

image

创建Shader

我们可以在Project窗口中右键创建Shader:Create ——> Shader

  1. Standard Surface Shader(标准曲面着色器)
    包含标准光照模型的表面着色器模板
  2. Unlit Shader
    不包含光照的基本顶点/片元着色器
  3. Image Effect Shader
    用于实现屏幕后处理效果的基本模板
  4. Compute Shader
    利用GPU并行计算一些和常规渲染流水线无关的内容
  5. Ray Tracing Shader
    用于实现光线追踪效果的着色器

image

我们之后的学习重点主要是顶点/片元着色器,因此我们更多的会去学习 Unlit Shader 着色器的编写

我们可以先来认识下 Shader 文件在 Inspector 窗口上显示的内容(以Standard Surface Shader(标准曲面着色器)为例):

image

  • 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):编译并显示代码

    image

    可以查看在不同平台时使用不同的图形接口程序时编译出来的代码,
    可以帮助我们优化着色器性能

  • Cast shadows:是否投射阴影

  • Render queue:该Shader的渲染队列,决定渲染顺序

  • LOD:LOD级别

  • Ignore projector:是否忽略投影器

  • Disable batching:是否禁用批处理

  • Keywords:是一种用于在渲染过程中启用或禁用特定功能的设置,
    通过在 Shader 中定义关键字,你可以在运行时动态地切换不同的渲染通道、特效或选项,以实现多样化的视觉效果

  • Properties:在Unity Shader中用于定义在材质面板中显示的可编辑属性

    image

Shader配合材质使用

有了材质和Shader后,我们才能够将其配合在一起使用
只需要将材质设置为使用对应的着色器,并设置着色器提供的可编辑的相关属性
我们就可以利用他们来渲染出我们想要的各种效果了