Unity ShaderLab 框架全解析2 ——SubShader、Fallback

Unity ShaderLab 框架全解析2

该系列主要是根据Unity官方文档和个人搜集的知识对Unity ShaderLab框架进行总结,比较基础,用于提高知识学习、复习的效率。对于文中给到的文章链接的作者表示感谢

SubShader

ShaderLab是由一个或者多个SubShader组成的,当Unity渲染网格模型时,会在Shader文件即ShaderLab框架当中寻找能在当前显卡上运行的最高级的效果最好的SubShader来使用,SubShader由一系列的Pass组成。Pass当中包含着真正的Shader的具体代码。ShaderLab或者说Shader文件的框架大概如下:

Shader"Shader文件路径名"{
	Properties{
		……	
	}
	SubShader{
		Pass{
			……
		}
		Pass{
			……
		}
		……
	}
	SubShader{
		Pass{
			……
		}
		Pass{
			……
		}
		……
	}
	……


}

SubShader Tag
加粗样式SubShader使用Tag来控制自身何时怎样被引擎使用来渲染。Tag使用的基本方法如下:

	SubShader{
		Tags { "TagName1" = "Value1" "TagName2" = "Value2" }
		Pass{
			……
		}
		Pass{
			……
		}
		……
	}

在大括号内可以指定任意数量的键值对,Unity有一些预设的键值对:

Rendering Order:

渲染顺序键,分别对应着几种预设的值,每个顺序值在内部实现上都是整数
1.Background - 对象最先渲染,值为1000
2.Geometry (default) - 是渲染顺序的缺省值,渲染绝大多数不透明的网格,值为2000
3.AlphaTest -经过alpha测试的geometry 使用此队列。这是与“Geometry ”不同的队列,因为在绘制所有实体后,渲染经过Alpha测试的对 象更为有效。值为2450
4.Transparent - 在“Geometry ”和“AlphaTest ”之后渲染,当中的网格按照从后往前的顺序渲染,所有使用alpha-blended 的(shader当中不进行深度写入的)在这个渲染队列当中(比如玻璃,粒子),值为3000
5.Overlay - 最后渲染的对象,比如光晕,UI,值为4000

因为队列值为整数,所以可以自定义非预设的值,比如"Queue" = “Geometry+1”,表示在所有的Geometry对象之后渲染。

RenderType
用来给Shader进行分类,比如Unity内置的一些常用RenderType,如Opaque,Transparent,Background,Overlay,另外还可以自定义RenderType,可以用来进行材质替代渲染,具体实现参考之前一篇文章:Unity材质替代渲染相关:RenderWithShader & SetReplacementShader

ForceNoShadowCasting
如果对应值为真,则使用该Subshader则不会进行阴影投射,不执行Shadow Pass

IgnoreProjector
如果对应值为真,则忽略Projector的影响,Projector具体参照官方文档:Projector,比较容易理解。
CanUseSpriteAtlas
如果值为假,则shader使用sprite,那么当sprite装入图集之后shader将不起作用。
PreviewType
控制材质球在预览面板的显示方式,默认展示球形,可以设置为“Plane”、“Skybox”

Fallback

在所有的Subshader定义之后,可以定义Fallback,表示如果没有Subshader可以运行在当前的硬件环境上,那么就使用一个已定义的shader:

Fallback "name"

使用下面的语句表示即使所有的Subshader都不能运行,也不使用其他的shader并且不允许报错。

Fallback Off
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章