可能是unity版本的问题
遇到的问题:当加上透明的tag后,视频中的两个物体重叠在一起是不透明的,但是我的代码中物体是正常显示的
Shader "Custom/s_alpha_two" {
SubShader{
tags{ "queue" = "transparent" }
pass {
blend srcalpha oneminussrcalpha
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "unitycg.cginc"
struct v2f {
float4 pos:POSITION;
float2 uv:TEXCOORD0;
};
v2f vert(appdata_base v) {
v2f o;
o.pos = mul(UNITY_MATRIX_MVP,v.vertex);
return o;
}
fixed4 frag(v2f IN) :COLOR{
fixed4 color = fixed4(1,0,0,0.5);
return color;
}
ENDCG
}
}
}
Shader "Custom/s_alpha_one" {
SubShader{
tags{ "queue" = "transparent" }
pass {
blend srcalpha oneminussrcalpha
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "unitycg.cginc"
struct v2f {
float4 pos:POSITION;
float2 uv:TEXCOORD0;
};
v2f vert(appdata_base v) {
v2f o;
o.pos = mul(UNITY_MATRIX_MVP,v.vertex);
return o;
}
fixed4 frag(v2f IN) :COLOR{
fixed4 color = fixed4(0,0,1,0.5);
return color;
}
ENDCG
}
}
}
着色后的效果:
1、红色半透明shader
Shader "Custom/s_alpha_one" {
SubShader{
pass {
blend srcalpha oneminussrcalpha
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "unitycg.cginc"
struct v2f {
float4 pos:POSITION;
float2 uv:TEXCOORD0;
};
v2f vert(appdata_base v) {
v2f o;
o.pos = mul(UNITY_MATRIX_MVP,v.vertex);
return o;
}
fixed4 frag(v2f IN) :COLOR{
fixed4 color = fixed4(1,0,0,0.3);
return color;
}
ENDCG
}
}
}
蓝色半透明shader
Shader "Custom/s_alpha_two" {
SubShader{
pass {
blend srcalpha oneminussrcalpha
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "unitycg.cginc"
struct v2f {
float4 pos:POSITION;
float2 uv:TEXCOORD0;
};
v2f vert(appdata_base v) {
v2f o;
o.pos = mul(UNITY_MATRIX_MVP,v.vertex);
return o;
}
fixed4 frag(v2f IN) :COLOR{
fixed4 color = fixed4(0,0,1,0.3);
return color;
}
ENDCG
}
}
}
两个cube单独都透明,但是合到一起不透明
2、解决办法:加入透明的tag,zwrit置为off
Shader "Custom/s_alpha_two" {
SubShader{
tags{ "queue" = "transparent" }
pass {
blend srcalpha oneminussrcalpha
zwrite off
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "unitycg.cginc"
struct v2f {
float4 pos:POSITION;
float2 uv:TEXCOORD0;
};
v2f vert(appdata_base v) {
v2f o;
o.pos = mul(UNITY_MATRIX_MVP,v.vertex);
return o;
}
fixed4 frag(v2f IN) :COLOR{
fixed4 color = fixed4(1,0,0,0.5);
return color;
}
ENDCG
}
}
}
Shader "Custom/s_alpha_one" {
SubShader{
tags{ "queue" = "transparent" }
pass {
blend srcalpha oneminussrcalpha
zwrite off
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "unitycg.cginc"
struct v2f {
float4 pos:POSITION;
float2 uv:TEXCOORD0;
};
v2f vert(appdata_base v) {
v2f o;
o.pos = mul(UNITY_MATRIX_MVP,v.vertex);
return o;
}
fixed4 frag(v2f IN) :COLOR{
fixed4 color = fixed4(0,0,1,0.5);
return color;
}
ENDCG
}
}
}