Unity可视化Shader工具ASE介绍——3、ASE的Shader类型介绍
- 开源代码
- 2025-08-17 16:42:03

大家好,我是阿赵。这里继续介绍Unity可视化Shader编辑插件ASE的用法。 上一篇介绍了节点的输入输出节点。这一篇来介绍一下不同的Shader类型的区别。
一、修改Shader类型之前介绍创建Shader的时候,曾经说过可以选择Shader的类型。
其实这个类型是可以在Shader的输出节点里面修改的。选择输出节点,然后在Shader Type选项,就可以修改Shader的 类型。
二、不同Shader类型的区别这里选择一个Legacy/Unlit类型的Shader来试试。选择了之后,会发现好像整个世界都变了
首先,坐标的输出节点属性栏,会变得少了很多选项
然后输出节点本身,会看出也是少了很多个输出接口
这里可以比较明显的看出来,不同的Shader类型,它提供的输出接口和渲染功能都是不一样的。 其中提供功能最少的是Legacy/Unlit类型,它只提供基础Shader的LOD、CullMode、ColorMask、ZWrite、ZTest、BlendMode、Stencil等设置,并没有什么额外的功能,输出节点里面的接口,就只有一个颜色和一个顶点偏移,对应的是最基础的顶点/片段着色器的输出结果。如果想实现法线贴图的效果,还需要自己去计算法线。
其中提供的功能最多的是Surface类型,输出节点的属性,除了上面所说的基础Shader属性以外,还提供了很多其他功能,比如可以直接选择光照模型、实现Outline效果,等等。 而输出接口也是非常的多,如果想实现发现贴图效果,只需要把法线贴图节点拖到Normal输出接口就可以了。最后,Surface的输出节点最下面有一个Debug的接口。这个接口只有Surface类型才提供,是ASE提供的一个测试效果接口,可以把任意的节点步骤连线到这个debug输出,测试某个节点的效果。 再介绍一下UI的类型
UI类型的输出节点,和刚才的Unlit一样,这不是重点。
点击用文本编辑器打开shader,可以看到UI模板生成的Shader如下:
// Made with Amplify Shader Editor // Available at the Unity Asset Store - http://u3d.as/y3X Shader "TestShader" { Properties { [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {} _Color ("Tint", Color) = (1,1,1,1) _StencilComp ("Stencil Comparison", Float) = 8 _Stencil ("Stencil ID", Float) = 0 _StencilOp ("Stencil Operation", Float) = 0 _StencilWriteMask ("Stencil Write Mask", Float) = 255 _StencilReadMask ("Stencil Read Mask", Float) = 255 _ColorMask ("Color Mask", Float) = 15 [Toggle(UNITY_UI_ALPHACLIP)] _UseUIAlphaClip ("Use Alpha Clip", Float) = 0 } SubShader { LOD 0 Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } Stencil { Ref [_Stencil] ReadMask [_StencilReadMask] WriteMask [_StencilWriteMask] CompFront [_StencilComp] PassFront [_StencilOp] FailFront Keep ZFailFront Keep CompBack Always PassBack Keep FailBack Keep ZFailBack Keep } Cull Off Lighting Off ZWrite Off ZTest [unity_GUIZTestMode] Blend SrcAlpha OneMinusSrcAlpha ColorMask [_ColorMask] Pass { Name "Default" CGPROGRAM #pragma vertex vert #pragma fragment frag #pragma target 3.0 #include "UnityCG.cginc" #include "UnityUI.cginc" #pragma multi_compile __ UNITY_UI_CLIP_RECT #pragma multi_compile __ UNITY_UI_ALPHACLIP struct appdata_t { float4 vertex : POSITION; float4 color : COLOR; float2 texcoord : TEXCOORD0; UNITY_VERTEX_INPUT_INSTANCE_ID }; struct v2f { float4 vertex : SV_POSITION; fixed4 color : COLOR; half2 texcoord : TEXCOORD0; float4 worldPosition : TEXCOORD1; UNITY_VERTEX_INPUT_INSTANCE_ID UNITY_VERTEX_OUTPUT_STEREO }; uniform fixed4 _Color; uniform fixed4 _TextureSampleAdd; uniform float4 _ClipRect; uniform sampler2D _MainTex; v2f vert( appdata_t IN ) { v2f OUT; UNITY_SETUP_INSTANCE_ID( IN ); UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(OUT); UNITY_TRANSFER_INSTANCE_ID(IN, OUT); OUT.worldPosition = IN.vertex; OUT.worldPosition.xyz += float3( 0, 0, 0 ) ; OUT.vertex = UnityObjectToClipPos(OUT.worldPosition); OUT.texcoord = IN.texcoord; OUT.color = IN.color * _Color; return OUT; } fixed4 frag(v2f IN ) : SV_Target { half4 color = (tex2D(_MainTex, IN.texcoord) + _TextureSampleAdd) * IN.color; #ifdef UNITY_UI_CLIP_RECT color.a *= UnityGet2DClipping(IN.worldPosition.xy, _ClipRect); #endif #ifdef UNITY_UI_ALPHACLIP clip (color.a - 0.001); #endif return color; } ENDCG } } CustomEditor "ASEMaterialInspector" }这里需要注意的是,UI类型的Shader模板已经添加了用于UI的shader所需的各种标签,还有UI上使用的各种Rect裁剪和Alpha裁剪。如果不添加这些东西,在UI上使用一般模型的Shader,是不会有这些UI特效的裁剪效果的。
三、总结不同的Shader类型,生成出来的Shader代码会有不同的特性。选择虽然看起来很多,但都是从我们的需求出发的。需要什么样的效果,就选择怎样的类型。如果是手机游戏项目,我一般都是使用Unlit或者UI的类型,因为他们不附带多余的效果,每一步都可以自己去控制性能。如果是想快速的实现某个效果,或者是要实现PBR的次世代效果,那我一般会选择Surface类型,因为它提供的功能实在是多,而且调试方便。
Unity可视化Shader工具ASE介绍——3、ASE的Shader类型介绍由讯客互联开源代码栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“Unity可视化Shader工具ASE介绍——3、ASE的Shader类型介绍”