Fragment shader---实现半透明着色(物体遮住与非遮住部分都显示,并显示不同的颜色)
2018-01-08 22:32
891 查看
1、显示被遮挡住的部分
原图:
着色后的图:
2、多通道将隐藏非隐藏部分全部显示
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 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 } //======================================================== } }
相关文章推荐
- 课时72 Fragment shader 7 - 实现半透明着色 2
- Datawindow实现单双行显示不同颜色
- Delphi 如何实现在DbgridEh中不同的行显示不同的颜色
- Unity里用shader让物体的被遮挡部分显示出提示效果
- Android中TextView实现分段显示不同颜色的字符串
- 网页表格隔行显示不同颜色,怎样实现?
- destoon实现不同会员组公司名称显示不同的颜色的方法
- 用JS实现表格中隔行显示不同颜色
- 重绘ListBox实现特定行显示不同的颜色
- 想实现日期为当天的时候,显示的日期颜色跟其他的不同
- iOS利用NSAttributeString实现不同颜色大小显示的方法
- silverlight中颜色转换,实现DataGrid 行不同颜色显示
- 实现 linux 终端上不同字体颜色显示
- Android中TextView中部分文字有不同颜色的实现
- iOS中Label实现显示不同颜色与字体的方法
- ShaderLab学习小结(十三)物体被遮挡部分也能显示颜色
- Android中TextView中部分文字有不同颜色的实现
- 使用SpanableString实现textview部分字体点击事件(不同颜色)
- Android中TextView中部分文字有不同颜色的实现
- phpcms模板中实现标签文字显示不同颜色