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)才能达到目标。
一般的使用流程是:
- 创建一个材质
- 创建一个Unity Shader,把该Shader赋给上一步中创建的材质
- 将材质赋予给想要渲染的对象
- 在材质面板中调整Unity Shader的相关属性,以达到最终效果
也就是说,Unity中的Shader必须配合材质才能正常使用。我们接下来就来分别创建它们,感受下它们的作用。
创建材质
选择材质使用的哪种着色器,该着色器提供的可变化的对应属性。
我们可以在Project窗口中右键创建材质:
Create ——> Material
- 创建好材质后,可以选中它,在Inspector窗口中Shader选项中选择对应的着色器进行关联使用。
- Inspector窗口下方的内容是选中的Shader提供的可编辑变化的相关变量,它们会直接影响渲染结果。
- 关联好Shader后,材质需要赋值给GameObject对象上依附的Mesh Renderer等相关渲染器组件上进行使用。
也就是说只要Unity Shader当中提供对应的可以编辑属性,我们就可以直接在材质中进行编辑,而不需要去修改Shader代码来达到不同效果。
创建Shader
我们可以在Project窗口中右键创建Shader:
Create ——> Shader
- Standard Surface Shader(标准曲面着色器):包含标准光照模型的表面着色器模板
- Unlit Shader:不包含光照的基本顶点/片元着色器
- Image Effect Shader:用于实现屏幕后处理效果的基本模板
- Compute Shader:利用GPU并行计算一些和常规渲染流水线无关的内容
- Ray Tracing Shader:用于实现光线追踪效果的着色器
我们之后的学习重点主要是顶点/片元着色器,因此我们更多的会去学习 Unlit Shader 着色器的编写。
我们可以先来认识下Shader文件在Inspector窗口上显示的内容。
Shader相关参数
Default Maps:默认纹理
在这里我们可以设置着色器使用的默认纹理图片。第一次使用该Shader时,这些纹理会自动地赋予到对应的属性上。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