1.材质和Shader

  1. 1.ShaderLab-材质和Shader
    1. 1.1 知识点
      1. Unity Shader 和 Shader 的区别
      2. Unity中的材质和Shader
      3. 创建材质
      4. 创建Shader
      5. Shader相关参数
      6. 材质和Shader配合使用
    2. 1.2 知识点代码

1.ShaderLab-材质和Shader


1.1 知识点

Unity Shader 和 Shader 的区别

Shader是一个更通用的概念,用于描述图形渲染程序中的着色器程序,而Unity Shader是特指在Unity中使用的着色器。你可以认为Unity Shader是对Shader的一种封装,它是对底层图形渲染技术的封装,提供了一种叫做ShaderLab的语言,让我们更加轻松地编写和管理着色器。

我们在这一阶段主要对Unity Shader当中的ShaderLab进行学习。之后的学习在提到Shader这个词时,主要指的就是Unity Shader。

Unity中的材质和Shader

如果我们想要在Unity中体现出一个Shader的渲染效果,必须配合使用材质(Material)和 Shader(Unity Shader)才能达到目标。

一般的使用流程是:

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

也就是说,Unity中的Shader必须配合材质才能正常使用。我们接下来就来分别创建它们,感受下它们的作用。

创建材质

选择材质使用的哪种着色器,该着色器提供的可变化的对应属性。

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

  1. 创建好材质后,可以选中它,在Inspector窗口中Shader选项中选择对应的着色器进行关联使用。
  2. Inspector窗口下方的内容是选中的Shader提供的可编辑变化的相关变量,它们会直接影响渲染结果。
  3. 关联好Shader后,材质需要赋值给GameObject对象上依附的Mesh Renderer等相关渲染器组件上进行使用。

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

创建Shader

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

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

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

我们可以先来认识下Shader文件在Inspector窗口上显示的内容。

Shader相关参数

  1. Default Maps:默认纹理
    在这里我们可以设置着色器使用的默认纹理图片。第一次使用该Shader时,这些纹理会自动地赋予到对应的属性上。

  2. Imported Object:导入的对象
    这里可以查看和编辑与着色器对象本身相关的设置,以及着色器编译器如何处理它。

    • Surface Shader(表面着色器) Show generated code(显示生成的代码),如果是表面着色器,这里可以点击对应的按钮,在这里可以查看对应的代码。
    • 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后,我们才能够将其配合在一起使用。只需要将材质设置为使用对应的着色器,并设置着色器提供的可编辑的相关属性,我们就可以利用它们来渲染出我们想要的各种效果了。


1.2 知识点代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Lesson01_ShaderLab_材质和Shader : MonoBehaviour
{
    void Start()
    {
        #region 知识点一 Unity Shader 和 Shader的区别

        //Shader是一个更通用的概念,用于描述图形渲染程序中的着色器程序
        //而Unity Shader是特指在Unity中使用的着色器

        //你可以认为Unity Shader是对Shader的一种封装
        //它是对底层图形渲染技术的封装,它提供了一种叫做ShaderLab的语言
        //来让我们更加轻松的编写和管理着色器

        //我们在这一阶段主要对Unity Shader当中的ShaderLab进行学习
        //我们之后的学习在提到Shader这个词时,主要指的就是Unity Shader

        #endregion

        #region 知识点二 Unity中的材质和Shader

        //如果我们想要在Unity中体现出一个Shader的渲染效果
        //必须配合使用材质(Material)和 Shader(Unity Shader)才能达到目标

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

        //也就是说,Unity中的Shader必须配合材质才能正常使用
        //我们接下来就类分别的创建它们,来感受下他们的作用

        #endregion

        #region 知识点三 创建材质

        //我们可以在Project窗口中右键创建材质
        //Create ——> Material
        //1.创建好材质后,可以选中它后,在Inspector窗口中Shader选项中选择对应的着色器进行关联使用
        //2.Inspector窗口下方的内容就是选中的Shader提供的可编辑变化的相关变量,他们会直接影响渲染结果
        //3.关联好Shader后,材质需要赋值给GameObject对象上依附的Mesh Renderer等相关渲染器组件上进行使用

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

        #endregion

        #region 知识点四 创建Shader

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

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

        //我们可以先来认识下Shader文件在Inspector窗口上显示的内容

        #endregion

        #region 知识点五 材质和Shader配合使用

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

        #endregion

        #region 总结

        //在Unity中,材质和Shader是密不可分的两兄弟
        //想要在Unity中使用Shader就必须要配合材质进行使用

        #endregion
    }
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏