Unity Shader 属性及标签

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35759688/article/details/72705634

一、渲染流水线

应用阶段、几何阶段、光栅化阶段
1、应用阶段(cpu实现)
(1)把数据加载到显存中 例如:顶点的位置信息、法线方向、顶点颜色、纹理坐标
(2)设置渲染状态
(3)调用DrawCall
2、几何阶段(gpu实现)
(1)顶点着色器:实现顶点的空间变换、顶点着色等 <完全可编程>
(2)曲面着色器:可选着色器,用于细分图元
(3)几何着色器:可选着色器,被用于执行图元的着色操作,或者被用于产生更多的图元
(4)裁剪:将不在摄像机视野内的顶点裁减掉,并剔除某些三角形的面片 <可配置> 例如:可以使用自定义的裁剪平面来配置裁剪区域,也可以通过指令控制裁剪 三角图元的正面或者背面
(5)屏幕映射:负责把每个图元的坐标转化到屏幕坐标中
3、光栅化阶段(gpu实现)
(1)三角形设置:计算三角网格数据,得到三角网格对像素的覆盖情况,即计算三角形每条边上的像素坐标
(2)三角形遍历:检查每个像素是否被一个三角形覆盖,如果覆盖的话,生成一个片元
(3)片元着色器:完成重要的渲染技术 <完全可编程>
(4)逐片元操作:决定片元的可见性 <可配置>(模板测试、深度测试等 注:将深度测试提到片元着色器之前的技术成为Early-Z技术)
4、渲染绘图管线流程(3D物体=>2D图片)
(1)顶点变化:通过一系列的坐标系转换,将模型的顶点在摄像机前进行位移,并最终投影到摄像机的投影屏幕上。 这一阶段包括顶点的坐标变换、逐顶点雾化、材质属性和光照属性处理。
(2)面处理:面的的组装、截取和剔除(背面剔除、视锥剔除、遮挡剔除)
(3)光栅化:将以向量为基本结构的面转换成一个个点阵形式的像素
(4)像素处理:对每个像素区域进行着色、对像素贴上贴图、形成最终的画面

二、Sharder 基本结构

1、属性 Properties
属性名字(“在检视面板中显示的名字”,属性类型)=默认值

_Int("Int",int) = 1
_Float("Float",float) = 1.0
_Range("Range",range(0.0,1.0)) = 0.1
_Color("Color",color) = (1,1,1,1)
_Vector("Vector",vector) = (1,1,1,1)
_2DTexture1("2DTexture1",2D) = "White"{}
_Rect("Rect",rect) = ""{}
_3DTexture("3DTuxture",3D) = ""{}
_Cube("Cube",cube) = ""{}

2、SubShader
(1)Tags
A、Queue
Background 1000 这个队列被最先渲染。它被用于skyboxes等。
Geometry 2000 是这是默认的渲染队列。它被用于绝大多数对象。不透明几何体使用该队列。
AlphaTest 2450 通道检查的几何体使用该队列。它和Geometry队列不同,对于在所有立体物体绘制后渲染的通道检查的对象,它更有效。
Transparent 3000 该渲染队列在Geometry和AlphaTest队列后被渲染。任何通道混合的(也就是说,那些不写入深度缓存的Shaders)对象使用该队列, 例如玻璃和粒子效果。
Overlay 4000 该渲染队列是为覆盖物效果服务的。任何最后被渲染的对象使用该队列,例如镜头光晕。

B、RenderType(unity内置的<也可以自定义>)
Opaque 用于大多数着色器(法线着色器、自发光着色器、反射着色器以及地形的着色器)。
Transparent 用于半透明着色器(透明着色器、粒子着色器、字体着色器、地形额外通道的着色器)。
TransparentCutout 用于透明带镂空着色器
Background 天空盒着色器。
Overlay GUITexture, Halo(光晕), Flare shaders.光晕着色器、闪光着色器。
TreeOpaque 地形引擎中的树皮
TreeTransparentCutout 地形引擎中的树叶。
TreeBillboard 地形引擎中的广告牌树。
Grass 地形引擎中的草。
GrassBillboard 地形引擎何中的广告牌草。
注:RenderType标签将shaders分类为多个预定义组,Unity可以在运行时替换符合特定RenderType的所有Shader。Shader更换是在脚本使用 Camera.RenderWithShader 或 Camera.SetReplacementShader 函数来完成的。这两个函数均以一个shader和一个replacementTag作为参数。

C、DisableBatching 是否进行批处理
当使用绘制调用批处理 Draw Call Batching 时,一些 shaders(主要是做对象空间顶点变形的shader)不工作 - 这是因为批处理将所有几何转换为世界空间,因此“对象空间”丢失。

DisableBatching标签可以用来消除这个问题。 有三个可能的值:
“True”(始终禁用此着色器的批处理)
“False”(不禁用批处理; 这是默认值)
“LODFading”(当LOD衰减活动时禁用批处理;主要用于树)。

D、ForceNoShadowCasting 是否强制不生成阴影
如果给出了ForceNoShadowCasting标签并且值为“True”,则使用此subshader渲染的对象将永远不会投射阴影。 当你在透明对象上使用shader替换,并且你不会继承来自另一个subshader的阴影传递时,这是最有用的。

E、IgnoreProjector 是否忽略投影器投影 如果给定IgnoreProjector标记并且值为“True”,则使用此shader的对象不会受到投影机的影响。 这对半透明象最有用,因为暂时没有对他们产生投影的比较合适的办法,那么直接忽略掉就行了。

F、CanUseSpriteAtlas 是否可以用于精灵图集 将sprite的sharder效果应用于整个图集 应该设置为false

G、PreviewType 指material 在inspector预览应如何显示材质。 默认情况下,材质显示为球体,但PreviewType也可以设置为“Plane”
(显示为2D)或“Skybox”(将显示为天空盒)。

(2)RenderSetup
A: Cull 设置剔除模式 CullBack、CullFront、CullOff(剔除背面、剔除正面、剔除关闭)
B: ZTest 设置深度测试时使用的函数 ZTest Less/Greater/LEqual/GEqual/Equal/NotEqual/Always
C:ZWrite 设置深度写入 ZWrite On/Off
D: Blend 设置混合模式 Blend Off /Blend srcFactor targetFactor(Alpha混合)等(命令很多)
E: Lighting 设置光照开关 Lighting On/Off
F:SeparateSpecular 设置高光开关 SeparateSpecular On/Off
G:Fog{} 雾效 Mode Off | Global | Linear | Exp | Exp2 (雾效开关)

(3)Pass语义块(注意P一定要大写)

A:Name:
可以在Pass块中定义该Pass块的名称 Name “PassName” 通过这个名称 可以使用ShaderLab的UsePass命令直接使用其他Unity Shader中的Pass
例如:UsePass “MyShader/PASSNAME” (注:unity 内部会把Pass的名称转换成大写字母表示)

B:Tags:
***LightMode:渲染类型
a:Always 总是渲染,不应用光照。
b:ForwardBase 用于正向渲染,环境主要方向灯和定点光/SH 等的应用
c:ForwardAdd 用于正向渲染,附加的像素光被应用,每个光照一个pass
d:Deferred 用于延迟光照,渲染法线/镜面指数。lor function)。
e:ShadowCaster 用于延迟光照,通过结合纹理,光照和自发光渲染最终颜色
f:PrepassBase 用于顶点光照渲染,当物体没有光照映射时,所有顶点光照被应用
g:PrepassFinal 用于顶点光照渲染,当物体有光照映射的时候使用顶点光照渲染。在平台上光照映射是 RGBM 编码
h:Vertex 用于顶点光照渲染,当物体有光照映射的时候使用顶点光照渲染。在平台上光照映射是double-LDR 编码(移动平台,及老式台式CPU)
i:VertexLMRGBM 将物体当做阴影产生者来渲染
g:VertexLM 为了正向渲染对象的路径,将对象的阴影收集到屏幕空间缓冲区中。

***RequireOptions:指定当满足某些条件是才渲染该Pass块 SoftVegetation

(3)Pass可用的渲染指令
a:Material{} 材质
b:Lighting 光照
c:Cull 裁剪
d:ZTest 深度测试
e:ZWrite 深度缓存写入
f:Fog{} 雾效
g:AlphaTest alpha测试
h:Blend alpha混合
i:Color 颜色
k:ColorMask 颜色遮罩
l:Offset 深度偏移
m:SeparateSpecular 高光颜色
n:ColorMaterial 颜色集

猜你喜欢

转载自blog.csdn.net/qq_35759688/article/details/72705634