Unity Shader基本结构

目录

Sharder基本结构 

Properties

 SubShader

Tags

Render设置

Pass


Sharder基本结构 

// 当前Shader在材质面板下拉列表的路径和名字
Shader "Unlit/001"
{
	//属性块
	Properties{}
	SubShader
	{
		//标签 可选  key = value
		Tags {}
		//Render设置 可选
		//必须
		Pass
		{
			Name "Default" //Pass通道名称
			Tags{} //可以在每个Pass通道里面进行定义
			//Render设置 可以在每个Pass通道里面进行定义
			//CG语言所写的代码,主要是顶点/片元着色器
			CGPROGRAM
			//...
			ENDCG
		}
	}

	Fallback Off //当上面shader运行不了的时候会使用下面shader渲染
}

Properties

属性块
作用:声明变量会显示在Inspector面板中
在属性块中声明的变量,可以在材质面板中进行调整
变量名(显示名称,类型)=默认值

Properties
{
    _Int("Int",Int) = 2//整形
	_Float("Float",float) = 1.5//浮点型
	_Range("Range",range(0.0,2.0))= 1.0//范围值
	_Color("Color",Color) = (1,1,1,1)//颜色
	_Vector("Vector",Vector) = (1,4,3,8)//向量
	_MainTex("Texture", 2D) = "white" {}//贴图
	_Cube("Cube",Cube) = "white"{}//天空盒
	_3D("3D",3D) = "black"{}//3D贴图
}

扫描二维码关注公众号,回复: 17282040 查看本文章

 SubShader

每个Unity Shader至少包含一个SubShader语义块。当游戏在不同平台上运行时unity会执行从上到下第一个可以运行的SubShader,若都无法运行则会调用Fallback里的shader

SubShader
{
	//标签 可选  key = value
	Tags {}

	//Render设置 可选

	//必须,可以有多个
	Pass
	{
		Name "Default" //Pass通道名称
		Tags{} //可以在每个Pass通道里面进行定义
		//Render设置 可以在每个Pass通道里面进行定义

		//CG语言所写的代码,主要是顶点片元着色器
		CGPROGRAM
		//...
		ENDCG
	}
}

Tags

SubShader使用tag来告诉他们期望如何以及何时将其渲染到渲染引擎

Tags 
{
    "Queue"="Transparent"//渲染顺序
	"RenderType"="Opaque"//着色器替换功能
	"DisableBatching" = "True"//是否进行合批
	"ForceNoShadowCasting" = "True"//是否投射阴影
	"IgnoreProjector"="True"//受不受Projector的影响,通常用于透明物体
	"CanUseSpriteAltas" = "False"//是否用于图片的Shader,通常用于UI
	"PreviewType"="Plane"//用作shader面板预览的类型
}

Render设置

ShaderLab提供了一系列渲染状态的指令,在 Pass 代码块中使用这些命令可为该 Pass 设置渲染状态,或者在 SubShader 代码块中使用这些命令可为该 SubShader 以及其中的所有 Pass 设置渲染状态。

常见的渲染状态设置选项

Cull Cull off/back/front 旋转渲染哪个面
ZTest ZTest Always/Less Greater/LEqual/GEqual/Equal/NotEqual 深度测试
Zwrite Zwrite off/on 深度写入
Blend Blend SrcFactor DstFactor 混合
LOD LOD 100 不同情况下使用不同的LOD,达到性能提升

Pass

在 Pass 代码块中使用这些命令可为该 Pass 设置渲染状态,或者在 SubShader 代码块中使用这些命令可为该 SubShader 以及其中的所有 Pass 设置渲染状态。

Pass
{
	Name "Default" //Pass通道名称
	Tags{} //可以在每个Pass通道里面进行定义
	//Render设置 可以在每个Pass通道里面进行定义

	//CG语言所写的代码,主要是顶点片元着色器
	CGPROGRAM
	//...
	ENDCG
}

猜你喜欢

转载自blog.csdn.net/m0_53377876/article/details/130269867