网站运营seo实训总结,58同城关键词怎么优化,海口小程序开发公司,网站小图标素材大家好#xff0c;我是阿赵。这里继续介绍Unity可视化Shader编辑插件ASE的用法。 上一篇介绍了节点的输入输出节点。这一篇来介绍一下不同的Shader类型的区别。
一、修改Shader类型 之前介绍创建Shader的时候#xff0c;曾经说过可以选择Shader的类型。 其实这个类型是… 大家好我是阿赵。这里继续介绍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 0Tags { QueueTransparent IgnoreProjectorTrue RenderTypeTransparent PreviewTypePlane CanUseSpriteAtlasTrue }Stencil{Ref [_Stencil]ReadMask [_StencilReadMask]WriteMask [_StencilWriteMask]CompFront [_StencilComp]PassFront [_StencilOp]FailFront KeepZFailFront KeepCompBack AlwaysPassBack KeepFailBack KeepZFailBack Keep}Cull OffLighting OffZWrite OffZTest [unity_GUIZTestMode]Blend SrcAlpha OneMinusSrcAlphaColorMask [_ColorMask]Pass{Name DefaultCGPROGRAM#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_ALPHACLIPstruct 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_IDUNITY_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_RECTcolor.a * UnityGet2DClipping(IN.worldPosition.xy, _ClipRect);#endif#ifdef UNITY_UI_ALPHACLIPclip (color.a - 0.001);#endifreturn color;}ENDCG}}CustomEditor ASEMaterialInspector}这里需要注意的是UI类型的Shader模板已经添加了用于UI的shader所需的各种标签还有UI上使用的各种Rect裁剪和Alpha裁剪。如果不添加这些东西在UI上使用一般模型的Shader是不会有这些UI特效的裁剪效果的。
三、总结 不同的Shader类型生成出来的Shader代码会有不同的特性。选择虽然看起来很多但都是从我们的需求出发的。需要什么样的效果就选择怎样的类型。如果是手机游戏项目我一般都是使用Unlit或者UI的类型因为他们不附带多余的效果每一步都可以自己去控制性能。如果是想快速的实现某个效果或者是要实现PBR的次世代效果那我一般会选择Surface类型因为它提供的功能实在是多而且调试方便。