- Home /
Unlit Transparent With Color Support
hi. i'm not a shader expert. but i'm trying to use an unlit transparent shader with color tint support. but since my target is mobile i need to choose the fastest one. so here is a shader code that a friend gave it to me:
Shader "Custom/Unlit/Unlit_Alpha_WithColor" {
Properties{
_Color("Main Color", Color) = (1,1,1,1)
_MainTex("Base (RGB) Trans (A)", 2D) = "white" {}
}
SubShader{
Tags {"Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent"}
ZWrite Off
Lighting Off
Fog { Mode Off }
Blend SrcAlpha OneMinusSrcAlpha
Pass {
Color[_Color]
SetTexture[_MainTex] { combine texture * primary }
}
}
}
and this is unity's unlit shader with no support of color but it seems it has more codes:
// Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)
// Unlit alpha-blended shader.
// - no lighting
// - no lightmap support
// - no per-material color
Shader "Unlit/Transparent" {
Properties {
_MainTex ("Base (RGB) Trans (A)", 2D) = "white" {}
}
SubShader {
Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
LOD 100
ZWrite Off
Blend SrcAlpha OneMinusSrcAlpha
Pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma target 2.0
#include "UnityCG.cginc"
struct appdata_t {
float4 vertex : POSITION;
float2 texcoord : TEXCOORD0;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct v2f {
float4 vertex : SV_POSITION;
float2 texcoord : TEXCOORD0;
UNITY_VERTEX_OUTPUT_STEREO
};
sampler2D _MainTex;
float4 _MainTex_ST;
v2f vert (appdata_t v)
{
v2f o;
UNITY_SETUP_INSTANCE_ID(v);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
o.vertex = UnityObjectToClipPos(v.vertex);
o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex);
return o;
}
fixed4 frag (v2f i) : SV_Target
{
fixed4 col = tex2D(_MainTex, i.texcoord);
return col;
}
ENDCG
}
}
}
so i just wanna know which one is faster? should i use unity's unlit and add color tint support? i don't want support for lighting, lightmap, fog etc... only transparent with tint color
Answer by Namey5 · Oct 07, 2019 at 09:00 AM
Both shaders are written in different languages, hence why one appears to be shorter. The first sample is written in Unity's ShaderLab, which is essentially shorthand - it generates more code similar to the bottom sample without having to do everything by hand. You'll find that these two shaders will be more or less identical, aside from the fact that the second has some newer optimisations that the ShaderLab code won't (the language isn't really used any more and I don't believe it would have been updated to support things like instancing or constant buffers). Basically - unless you're rendering HUGE amounts of objects with this shader, it really shouldn't make a difference on performance.
Your answer
Follow this Question
Related Questions
create a texture with shader code? ( without using a texture ) 1 Answer
How to add Emission to my custom shader? 2 Answers
The Best Way To Make Stylised Grass in Unity? 0 Answers
Making shader not ignore Light on transparent areas ? 0 Answers
Shader error: incorrect number of arguments to numeric-type constructor 2 Answers