转载作品

Shader简介及基础结构

Cz_wang 发表于   2021-09-14 10:17:30
7864
6
70

Shader简介及基础结构

一、什么是Shader?

Shader是运行在图形处理单元(GPU)上的程序

 

二、Unity中的Shader的三种基本类型

1. 固定功能着色器:使用固定功能为固定渲染管线做具体表现,功能较简单,兼容比较老机器,逐渐落伍不作为重点

 

2. 表面着色器:在Unity中,表面着色器的关键代码是使用Cg/HLSL语言编写的,然后嵌套在ShaderLab的结构代码中使用。使用表面着色器,用户仅需要编写最关键的表面函数,其余将有Unity自动生成,包括适配各种光源,渲染实时阴影以及集成到前向/延迟渲染管线中等。

 

3. 顶点片段着色器:顶点片段着色器运行于具有可编程渲染管线的硬件上,它包括顶点着色器Vertex Programs和片段着色器Fragment Programs。在使用顶点着色器或片段着色器进行渲染时,图形硬件的固定功能管线会关闭,具体来说就是编写的顶点程序会替换掉固定管线中标准的3D变换,光照,纹理坐标生成等功能,片段程序会替换掉SetTexture命令中的纹理混合模式。

 

三、Shader中代码涉及的一些知识点

1.API

Direct3D是微软树立的API规范,目前只在Windows平台使用。

OpneGL是Linux树立的API规范,主要使用在移动端IOS和安卓。

所以在这部分可以通过开发游戏的方向去深入研究对应API来优化性能。

 

2. Shader Lab

Unity作为很好的跨平台开发引擎,通过ShaderLab作为说明性语言来编写Shader,然后再根据不同的平台生成出对应语言的Shader。

 

3. Shader的三种语言

HLSL语言,支持Direct3D编写着色器。

Cg语言,英伟达和微软合作产物,支持Direct3D和OpenGL。

GLSL语言,支持OpenGL编写着色器。

 

四、Shader的基本结构


1. Shader命名和路径

2. Properties这里面的属性是都公开到编辑器中,可以在材质中编辑的变量。

3. SubShader 子着色器列表  子着色器可以有一个也可以有多个。

4. FallBack 回滚/降级操作  如果子着色器出现显卡不支持,回退到某个或者默认材质执行。

 


五、Properties语义块中支持的属性类型

属性中的变量类型:浮点数,整数,颜色和四维向量,2D纹理属性,矩形纹理属性,立方体纹理属性,3D纹理属性。

 


 


说明:_Int(“Int”,Int) = 2

第一个是参与代码计算的属性名字,第二个是公开到编辑器中看到的,也就是材质球上的变量名,第三个是这个变量的类型。

 


举例:_Angle(“角度”,Range(0,90)) = 45

这句的意思就是我生成了一个叫Angle的变量,在材质球上看到的属性叫角度,它的浮点数区间在0-90之间,默认给了45.


六、子着色器中的标签Tag

1. Tag{“标签1”=”value1” “key2”=”value2”}

 

2. 标签的类型

Queue  渲染队列

RenderType  渲染类型

Disable Batching 禁用批处理标签

ForceNoShadowCasting 控制投影标签

IgnoreProjector  忽略投影标签

CanUseSpriteAtlas  使用精灵图集标签

PreviewType   预览类型标签

 

 

3. 通道标签

 

 

七、顶点着色器和片段着色器的计算

其主要过程就是不同属性计算的过程,主要是计算机图形学的算法,通常包括,空间位置,法向量,纹理坐标,顶点颜色,变换矩阵,光照参数,颜色等。


八、参考资料

Unity Shader 入门精要

shader的三大着色器

Unity3D的Shader基础结构

Shader 知识点

shader基本结构


标签:
确定
评论(6)
西八那西
我给大佬端茶倒水唱山歌
回复
1142天前
AYu
6666 可以出教程了
回复
1337天前
态神粉丝
支持原创!
回复
1337天前
Zero_l
这都照着抄了吧= = 还原创作品
回复
1338天前
Cz_wang
回复
Zero_l
我这就改
回复
1338天前
蓝沁
https://blog.csdn.net/douniwan007009/article/details/79874556搬运不写出处的吗~
回复
1339天前
Cz_wang
回复
蓝沁
我在下面写了这篇文章的参考、引用、搬运的部分,在第八部分参考资料里可以看一下。
回复
1339天前
Unity张师傅
wc 偶像
回复
1339天前
没有更多啦~