前言
这个笔记系列并不会过多涉及图形学数学基础和渲染流水线的相关知识,但要求你具备相关知识,因此强烈建议你在学习和查阅此笔记前了解基础的图形学基础知识和渲染流水线相关知识。这里强烈推荐闫令琪老师开设的Games101课程 :Lecture 01 Overview of Computer Graphics_哔哩哔哩_bilibili。
该笔记系列大多数资料和参考来自于冯乐乐著作的《Unity Shader入门精要》,书中非常详细的解释了Unity Shader的相关知识,也强烈建议支持正版入手学习,因为Unity版本原因可能书中有些代码并不能成功运行,也可以结合本系列找到解决方案。
除此之外,Unity的官方文档也是不错的学习资料,能和上述推荐学习资料相互补充。着色器 - Unity 手册
这个笔记系列更多的是记录学习Unity Shader的实践过程和核心知识,如果你也和我一样正在学习和了解Unity Shader,那么非常欢迎您和我一起讨论学习,共同进步。
Shader简介
Shader 程序, 通常称为着色器,是运行在GPU上的程序。Shader所在的阶段就是渲染流水线的一部分,更具体来说,Shader就是:
- GPU流水线上可高度编程的阶段;
- 有一些特定的着色器,如顶点着色器、片元着色器;
- 依靠着色器我们可以控制流水线中的渲染细节,如用顶点着色器进行顶点变换以及传递数据,用片元着色器进行逐像素渲染。
出色的游戏画面依赖于Shader在内的所有渲染流水阶段的共同参与,Unity为我们提供一个既可以方便编写着色器,又可以设置渲染状态的地方:Unity Shader。
Shader 类型
Unity 中,着色器分为三大类。每个类别的用途不同,使用方式也不同。
Shader 程序(对象)
材质和Shader
Unity Shader 定义了渲染所需的各种代码(如顶点着色器和片元着色器)、属性和指令,材质允许我们调节这些属性,并将其最终赋值给相应模型。Unity的材质需要结合一个GameObject的Mesh组件或者Particle System组件工作。它决定了我们的游戏对象看起来是什么样的。
如下图所示,我们创建了一个使用卡通渲染着色器的材质,并赋给了Sphere对象。
最终得到了如下结果:
创建 Shader
在Unity中我们可以创建以下5种Unity Shader模板,在本学习笔记系列中大多数情况下会使用Unlit Shader:
创建后的Shader文件,可以在Unity的导入设置面板查看和设置相关基础信息,也可以通过Complied Code 编译不同图像编程接口如(OpenGL,D3D9等)最终编译成的Shader代码,查看生成的底层汇编指令,方便分析和优化:
Shader 结构
Unity中的Shader基于Unity 提供的ShaderLab编写,ShaderLab是Unity提供编写Unity Shader的说明性语言。
下面通过一段伪代码展示Unity Shader的基本结构:
Shader "ShaderName"{ //出现在材质面板下拉列表的名称,通过“/”控制显示位置
Properties{
//属性是材质和Shader的桥梁
Name("Display Name", PropertyType) = DefaultValue
Name("Display Name", PropertyType) = DefaultValue
}
SubShader{ //显卡A使用的子着色器
Tags { "ExampleSubShaderTagKey" = "ExampleSubShaderTagValue" }
// 代码块为子着色器指定 LOD(细节级别)值的信息
LOD 100
//渲染通道:一个子着色器内可以包含多个渲染通道
Pass {
//[Name] 通过设置名称可以使用UsePass直接使用其他Shader的Pass
Name "MyPassName"
//[标签]告诉引擎如何渲染物体
Tags { "LightModel" = "ForwardBase"}
// 此处是 ShaderLab 命令。
// 此处是 HLSL 代码。
}
}
//一个着色器内可以定义多个子着色器
SubShader{
//显卡B使用的子着色器
}
//如果上面的SubShader在这块显卡上都不能运行,就使用这个最低级的Shader
Fallback "Vertexlit"
//Or
// Fallback Off
}
以上就是编写UnityShader所需的基本结构了,关于Properties、SubShader、Pass更多相关信息具体可以参考官方文档学习和了解,里面有更为详细的解释这里就不重复赘述了。文章来源:https://www.toymoban.com/news/detail-821478.html
总结
本篇笔记中,主要阐述了Unity Shader的相关基础知识和Shader代码的基础结构,以及Shader和材质的基本关系,接下来我们还将了解如何在pass中创建和使用顶点着色器和片元着色器,并真正编写一段可以成功运行的着色器程序。最后,非常感谢您能看到这里,如果该文章对你有所帮助和启发,也欢迎您能点赞支持,如果有任何疑问和优化建议也非常欢迎各位大佬能够在评论区友好交流,一起学习进步。文章来源地址https://www.toymoban.com/news/detail-821478.html
到了这里,关于Unity Shader 入门笔记 (一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!