先放出结果图:榔头被挡住部分显示出绿色

  当被遮挡时,遮挡部分透明处理,那么需要涉及渲染深度的知识。引擎是如何判断哪个物体在前面哪个物体在后面呢?

  深度:每个像素有自己的深度值,离摄像机近的深度小,远的深度大

  深度缓冲区:存储每个像素的深度

  颜色缓冲区:存储每个像素的颜色

  过程:首先比较像素的深度与深度缓冲区同一位置的深度,如果前者小于后者,则未通过深度测试;否则,通过深度测试,将前者写入后者,将该像素的颜色写入到颜色缓冲区。将颜色缓冲区像素颜色显示到屏幕上。

  通过这个过程即可把深度小的像素剔除掉,将深度大的显示到屏幕上,从而实现物体的前后顺序。

  UnityShader提供了ZWrite 和 ZTest对应深度写入和深度测试。

  调整ZWrite可以控制是否将深度写入到深度缓冲区,当然,前提是深度测试通过,如果没通过测试,那么肯定是无法写入的

  调整ZTest可以定义上述中前者与后者的比较关系,默认为LEqual即小于等于时通过测试

  那么可以得到一种实现思路,用两个PASS:

  第一个PASS:ZTest 为 Greater,ZWrite 为 Off,当该像素被遮挡即深度大于深度缓冲区对应位置深度时执行该PASS,那么就可以在该PASS中实现被遮挡像素的效果。

  第二个PASS:ZTest为LEqual,ZWrite 为 On,这个PASS与上述PASS是互斥的,在这个PASS中实现未被遮挡像素的效果。

  设置ZWrite 是为了防止两个PASS都执行,如果第一个PASS的ZWrite为On,某一像素未被遮挡时,执行第一个PASS,将像素深度写入深度缓冲区,然后轮到第二个PASS进行深度测试时也会通过,因为小于等于嘛。

  

  被遮挡像素透明实现用了边缘光使得更炫酷。边缘光公式大概如下:

  fixed   rim=1-saturate(dot(worldNormalDir,worldViewDir));

  fixed3 finalCol=_RimColor.xyz*pow(rim,_RimPower)*_RimIntensity

  通过第一个式子可以得到一个参数rim,顶点法线方向与视角方向契合度越高则rim越小,否则rim越大,即越靠近边缘rim越大

  第二个式子中pow是为了提高边缘光硬度

工程下载

Unity Shader 之遮挡透明相关推荐

  1. unity shader 入门 全透明与半透明效果实现

    片元函数的fixed4类型的返回值的第4位即为阿尔法值,0代表完全不显示(透明),1代表完全显示.中间的数值代表半透明.但只修改这个值是不能直接修改透明度的,因为还要对队列等进行修改. 本文介绍透明度 ...

  2. 【unity shader 入门精要 读书笔记】透明

    一.透明 1.透明度测试[Alpha Test] 它采用一种"霸道极端"的机制:只要有一个片元的透明度不满足条件[通常是小于某个阈值],那么它对应的片元就会被舍弃.被舍弃的片元将不 ...

  3. Unity Shader 之 透明效果

    本文引用 Unity Shader入门精要 开启透明混合后,一个物体被渲染到屏幕上时,每个片元除了颜色值和深度值外,还有--透明度.透明度为1,则完全不透明,透明度为0,则完全不会显示. 在Unity ...

  4. Unity Shader 实现透明护盾效果

    这是大致的效果图,图片压得有点糊.我参考了本篇博客 Unity shader护盾特效. 这是原博客展示的图片: 本例采用了特殊的模型与贴图,原博客里有视频链接的教程,从模型到贴图. 以下是代码 // ...

  5. 【unity shader】unity游戏特效-遮挡显示效果 (含边缘光、描边效果版)

    不知道你们有没有在玩Black Squad这个游戏啊 在被对手干掉时会有敌人高亮显示效果 (未被做掉时) (被做掉后高亮显示敌人位置) 明明敌人被不透明物体挡住却仍然可以被渲染出来 这效果要是能扔进自 ...

  6. Unity Shader - Occlusion Map 遮挡贴图

    目录:Unity Shader - 知识点目录(先占位,后续持续更新) 原文:Occlusion Map 版本:2019.1 Occlusion Map 遮挡贴图用于提升模型间接光影效果.间接光源可能 ...

  7. unity shader遮挡边缘光描边

    Shader "Unlit/遮挡边缘光描边" {Properties{_MainTex("Texture", 2D) = "white" { ...

  8. 2d shader unity 阴影_【Unity Shader】平面阴影(Planar Shadow)

    来介绍一种适用于移动平台的高性能实时阴影解决方案--平面阴影(Planar Shadow). 由于Unity内置的实时阴影实现方式是屏幕空间阴影贴图(Screen Space Shadow Map)非 ...

  9. Unity Shader入门

    什么是Shader Shader(着色器)是一段能够针对3D对象进行操作.并被GPU所执行的程序.Shader并不是一个统一的标准,不同的图形接口的Shader并不相同.OpenGL的着色语言是GLS ...

最新文章

  1. 录音喊话器的故障修理_碳膜电位器故障检测及解决
  2. 新疆那些大学在计算机专业好,新疆哪些二本大学的计算机科学与技术专业最好?...
  3. 查找100 sql oracle,Oracle中SQL语句执行效率的查找与解决
  4. LeetCode 700 二叉搜索树中的搜索
  5. 小学计算机课动画制作的评课稿,信息技术2.0 | 评课磨课共成长 信息技术促进步 ——东光县第二实验小学信息技术2.0课例研讨...
  6. c语言中的EOF是什么意思
  7. Ubuntu 安装 tbb 步骤详解
  8. DBA的职场生涯应如何选择?
  9. 智能机器人走迷宫c语言游戏,(动态规划)机器人走迷宫问题(示例代码)
  10. 用Python 制作身高预测系统
  11. 【金融风控-贷款违约预测】数据挖掘学习:5.模型融合
  12. 六大设计原则-接口隔离原则
  13. pkpm弹性时程分析计算书怎么出_弹性时程分析——PKPM软件操作篇.pdf
  14. 【anaconda创建虚拟环境】
  15. X86实模式与保护模式简介
  16. L0范式、L1范式、L2范式解释通俗版
  17. Vue进阶(贰零柒):Webpack 性能优化措施汇总
  18. 如何使用matlab实现分段函数
  19. 机器学习与知识发现_在机器学习中重新“发现”量子力学
  20. 爱情心理学(心理学大师入门)

热门文章

  1. c#窗体随机点名软件
  2. 老烟民突然戒烟,会对身体有危害?正确戒烟这样做
  3. Linux for pogoplug pro 安装指导手册
  4. 我们已经进入网络犯罪2.0时代
  5. zjfc-1108,hdu-1222 wolf and rabbits
  6. 棋盘覆盖(java实现)
  7. 引领时代变化的人都是“骗子”
  8. 报错信息 terminate called after throwing an instance of ‘std::cad_alloc‘ what():std::bad_alloc
  9. python 爬虫(cookie)
  10. 【百度快照推广】网页快照在SEO优化中的作用