首先是效果

这个其实有相当多的地方在说了,我就不嚼舌根了

大概原理:一个Shader两个Pass,第一个Pass不管深度,都渲染,但是不写入深度,第二个Pass几乎没有改动,因为后执行,会覆盖掉第一个Pass本就该渲染的地方(因为第一个Pass没有写入深度),而第一个Pass不该渲染的地方则不会做处理,因为此Pass的深度测试未通过

结合上面那张图来说就是第一个Pass不管模型有没有被绿色遮挡都渲染成全白,因为深度测试都通过,而第二个Pass会进行正常的深度测试,绿色部分是不会通过的,但是被绿色部分遮住以外的部分会通过,那么就覆盖了第一个pass的白色

ps:第二个Pass可以用unity内置的shader替代

 1 // Upgrade NOTE: replaced '_World2Object' with 'unity_WorldToObject'
2
3 // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
4
5 Shader "Custom/RoleMaskShader"
6 {
7 Properties
8 {
9 _MainTex ("Texture", 2D) = "white" {}
10 _MainColor("MainColor", COLOR) = (1,1,1,1)
11 _ShadowColor("Color", COLOR) = (1,1,1,1)
12 _DiffuseScale("DiffuseScale", float) = 0.5
13 }
14 SubShader
15 {
16 //Tags { "RenderType"="Opaque" }
17 //LOD 100
18
19 Pass//第一个pass
20 {
21 Tags{"RenderType" = "Transparent" "Queue" = "Transparent"}
22 ZWrite off//关掉深度写入
23 ZTest greater//深度大于的通过,这里直接关掉也行
24 Blend SrcAlpha OneMinusSrcAlpha//混合,必须要开
25 CGPROGRAM
26 #pragma vertex vert
27 #pragma fragment frag
28 #include "UnityCg.cginc"
29
30 v2f_img vert(appdata_base a2v)
31 {
32 v2f_img o;
33 o.pos = UnityObjectToClipPos(a2v.vertex);
34 o.uv = a2v.texcoord;
35 return o;
36 }
37 fixed4 _ShadowColor;
38 fixed4 frag(v2f_img i) : SV_TARGET0
39 {
40 return _ShadowColor;//被挡住可以做描边等等
41 }
42
43 ENDCG
44 }
45 Pass//第二个pass,随意,这里写的是一个halfLambert
46 {
47 Tags{"RenderType" = "Transparent" "Queue" = "Transparent"}
48 CGPROGRAM
49 #pragma vertex vert
50 #pragma fragment frag
51 #include "UnityCg.cginc"
52 #include "Lighting.cginc"
53
54 struct v2f
55 {
56 float4 pos : POSITION;
57 fixed2 uv : TEXCOORD0;
58 float3 normal : TEXCOORD1;
59 };
60
61 v2f vert(appdata_base a2v)
62 {
63 v2f o;
64 o.pos = UnityObjectToClipPos(a2v.vertex);
65 o.uv = a2v.texcoord;
66 o.normal = mul(a2v.normal, (float3x3)unity_WorldToObject).xyz;
67 return o;
68 }
69 fixed4 _MainColor;
70 sampler2D _MainTex;
71 float _DiffuseScale;
72 fixed4 frag(v2f i) : SV_TARGET0
73 {
74 fixed4 texColor = tex2D(_MainTex, i.uv);
75 float halfLambert = saturate(dot(normalize(i.normal), normalize(_WorldSpaceLightPos0.xyz))) * _DiffuseScale + (1 - _DiffuseScale);
76 fixed3 diffuseColor = _LightColor0.rgb * texColor.rgb * halfLambert * _MainColor;
77 return fixed4(diffuseColor, 1);
78 }
79
80 ENDCG
81 }
82 }
83
84 FallBack "VertexLit"//影子,和unity渲染阴影机制有关,shadowCaster
85
86 }

over~废话结束

[UnityShader]说厌了的遮挡显示的更多相关文章

  1. 解决bootstrap-table表头filter-control select控件被遮挡显示不全的问题

    [本文出自天外归云的博客园] 在使用bootstrap-table的extension——filter-control时(对应表格的data-filter-control="true&quo ...

  2. 终于懂了:FWinControls子控件的显示是由Windows来管理,而不是由Delphi来管理(显示透明会导致计算无效区域的方式有所不同——透明的话应减少剪裁区域,所以要进行仔细计算)

    在研究TCustomControl的显示过程中,怎么样都找不到刷新FWinControls并重新显示的代码: procedure TWinControl.PaintHandler(var Messag ...

  3. UnityShader学习笔记- Stencil Buffer

    模板测试(Stencil Test)是现代渲染流水线的一环,其中涉及到的就是模板缓冲(Stencil Buffer),模板缓冲可以用来制作物体的遮罩.轮廓描边.阴影.遮挡显示等等效果 目录 Stenc ...

  4. 关于android初学者必须掌握的Activity的四大知识点

    这几天一直都在捣鼓android的知识点,兴趣班的老师,讲课太过深奥,天(想到什么就见什么,后后面完全不想听),最后自己找资料总结了在Android学习中很重要的一个组件Activity,那就开始吧! ...

  5. APICloud上openFrameGroup把菜单挡住了,怎么处理?

    问:openFrameGroup把菜单挡住了,怎么处理? 试了sendFrameToBack没反应,又不能页面自己openFrameGroup,不知道该怎么办.而且用另外的页面先openFrameGr ...

  6. 更换jupyter notebook风格主题、修改默认工作路径(Ubuntu系统和Win系统)

    默认的风格对代码关键词的颜色提醒很不明显,而且白色背景长久使用非常刺眼,所以考虑更换主题. 在更换途中,发现代码输出行,前几个字符被遮挡显示不出来,找了很久才解决,备忘一些要点. 1:替换主题方法 h ...

  7. web@h,c小总结

    问题0:元素内联元素,行内元素,行内块元素.        内联: 宽高M,P都有效        行内元素:无宽高,内容撑开,M,P左右有效        行内块元素:可设宽高,内容撑开,M,P都有 ...

  8. unity3d: how to display the obj behind the wall

    透墙显示,遮挡显示,使用ztest Tags { "Queue"="Overlay+1" "RenderType"="Transp ...

  9. iOS11 与 iPhone X适配的那些坑(持更中...)

    目录 问题列表 1.适配iPhoneX 屏幕原则 2.适配过程一些常量的设置 3..iPhone X 上运行有黑色区域问题 4.iOS11导航栏适配 5.出现UIScrollview 漂移问题(基本都 ...

  10. 安卓记账本开发学习day6之进度

    完成了基本的收入与支出添加,支持输入备注 以及备注的输入和金额的遮挡显示切换

随机推荐

  1. day09-功能实现08

    家居网购项目实现08 以下皆为部分代码,详见 https://github.com/liyuelian/furniture_mall.git 19.功能18-添加家居到购物车 19.1需求分析/图解 ...

  2. SQL Server登录初次提示状态码233,再次登录提示状态码18456

    解决方案: 1.使用windows方式登录数据库,修改安全性属性为SQL Server 和Windows身份验证模式 2.打开SQL Server配置管理器,启动MSSQLSERVER协议 3.修改s ...

  3. 【Python】pip的镜像安装异常解决方案

    在安装pip的出现异常提示: ERROR: Could not find a version that satisfies the requirement pillow (from versions: ...

  4. win32com操作word 第二集:Application&Documents接口

    本课程<win32com操作word API精讲&项目实战>以视频为主,文字教程为辅,公众号ID:一灯编程. 先回答一个网友私信问题: win32com和微软的word接口文档有什 ...

  5. ClickHouse(11)ClickHouse合并树MergeTree家族表引擎之SummingMergeTree详细解析

    目录 建表语法 数据处理 汇总的通用规则 AggregateFunction 列中的汇总 嵌套结构数据的处理 资料分享 参考文章 SummingMergeTree引擎继承自MergeTree.区别在于 ...

  6. 全志V3S 调试串口更改或关闭

    有时项目外设比较多,很容易造成串口不够用的情况. 最近就遇到了,新增加一个GPS模块串口的,串口现在外部只有原来的调试串口可以用,所以 尝试将调试口更改为普通串口. 经过网上看大神们的文章和自己摸索, ...

  7. 【力扣】2400. 恰好移动 k 步到达某一位置的方法数目

    题目 2400. 恰好移动 k 步到达某一位置的方法数目 解题思路 观察上面示例,容易画出下面的递归树,因此可以考虑DFS. DFS 很容易写出DFS的代码 class Solution { int ...

  8. 如何实现在react现有项目中嵌入Blazor?

    如何实现在react现有项目中嵌入Blazor? 目前官方只提供了angular和react俩种示例所以本教程只将react教程 思路讲解: 首先在现有react项目中我们可能某些组件是在Blazor ...

  9. VUE基础之:visible.sync-模态框显示隐藏、elementUI dialog组件报错或者visible属性不生效问题

    VUE基础之:visible.sync-模态框显示隐藏.elementUI dialog组件报错或者visible属性不生效问题 这篇文档存成草稿2年了,最近终于有时间拉出来写完了.... 我们日常开 ...

  10. java 进阶P-6.2+P-6.3

    细胞自动机 CellularAutomation(细胞自动机)细胞自动机(英语:Cellular automaton),又称格状自动机.元胞自动机,是一种离散模型,在可算性理论.数学及理论生物学都有相 ...