您的位置:首页 > 其它

Fragment shader---实现半透明着色(物体遮住与非遮住部分都显示,并显示不同的颜色)

2018-01-08 22:32 891 查看
1、显示被遮挡住的部分

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'

Shader "Custom/s_transp" {
SubShader{
tags{ "queue" = "transparent" }

pass {
blend srcalpha oneminussrcalpha
ztest greater
zwrite on

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 = UnityObjectToClipPos(v.vertex);
return o;
}

fixed4 frag(v2f IN) :COLOR{
fixed4 color = fixed4(1,0,0,0.5);
return color;
}
ENDCG
}

}
}

原图:



着色后的图:



2、多通道将隐藏非隐藏部分全部显示

Shader "Custom/s_transp" {
SubShader{
tags{ "queue" = "transparent" }

pass {
blend srcalpha oneminussrcalpha
ztest greater
zwrite on

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
}

//========================================================
pass {
blend srcalpha oneminussrcalpha
ztest lequal
zwrite on

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
}

//========================================================
}
}




3、两个通道实现将同一个物体渲染成遮蔽和非遮蔽两种颜色

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'

Shader "Custom/s_transp" {
SubShader{
tags{ "queue" = "transparent" }

pass {
blend srcalpha oneminussrcalpha
ztest greater
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 = UnityObjectToClipPos(v.vertex);
return o;
}

fixed4 frag(v2f IN) :COLOR{
fixed4 color = fixed4(0,0,1,0.5);
return color;
}
ENDCG
}

//========================================================
pass {
//blend srcalpha oneminussrcalpha
ztest lequal
zwrite on

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 = UnityObjectToClipPos(v.vertex);
return o;
}

fixed4 frag(v2f IN) :COLOR{
fixed4 color = fixed4(1,0,1,0.5);
return color;
}
ENDCG
}

//========================================================
}
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: