位置: 编程技术 - 正文

UnityShader实例04:遮挡透明材质(unitysharder)

编辑:rootadmin

推荐整理分享UnityShader实例04:遮挡透明材质(unitysharder),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:unity uishader,unity samples,unityshaderlab,unityshaderlab,unity uishader,unitysharder,unitysharder,unitysharder,内容如对您有帮助,希望把文章链接给更多的朋友!

遮挡透明材质

在3D游戏中,经常会出现控制的角色被房子或者墙壁之类的挡住,一些游戏会把挡住角色的物体透明化显示(这个应该需要脚本配合shader实现,因此不在本文讨论范围),如藏地传奇;而一些游戏会做一些特殊效果把角色被挡住的部分显示出来,如火炬之光这样(如下图),下面就用shader实现这一效果:

shader实现原理:

分析上图的效果,角色被前面墙体挡住的部分显示的类&#;xray效果(代码就直接从前面拿了,哈哈),没被挡住的部分显示贴图的正常效果,因此可以知道这个shader需要两个pass来实现。其中一个pass正常显示贴图,另外一个pass实现xray效果。当然不止这么简单,要实现上图的效果还需要Ztest,Zwrite,以及渲染队列等知识。

准备知识:

Rendering Order渲染队列

渲染队列,从字面的意思理解就是渲染的顺序,即对象渲染谁先谁后,如图你画画的时候,如果画画的时候每一笔的顺序一样,如果第一笔画红色,后面一笔画黑色,最终黑色会把红色覆盖掉。Unity里面我们可以通过SubShader Tags中的Queue Tag控制,unity提供了一些内置的渲染队列:

渲染队列渲染队列描述渲染队列&#;Background这个队列被最先渲染。它被用于skyboxes等。Geometry这是默认的渲染队列。它被用于绝大多数对象。不透明几何体使用该队列。AlphaTest通道检查的几何体使用该队列。它和Geometry队列不同,对于在所有立体物体绘制后渲染的通道检查的对象,它更有效。Transparent该渲染队列在Geometry和AlphaTest队列后被渲染。任何通道混合的(也就是说,那些不写入深度缓存的Shaders)对象使用该队列,例如玻璃和粒子效果。Overlay该渲染队列是为覆盖物效果服务的。任何最后被渲染的对象使用该队列,例如镜头光晕。

在关闭深度测的情况下,可以看出处于background队列的物体会最先被渲染,如果没有深度测试,他将现实画面的最后面,如果前面geometry队列的物体,就会优先显示geometry的物体,我想一般都会有这个问题:如果属于同一个渲染队列该怎么决定谁先谁后呢,所以unity还有其他的方式决定物体能根据实际深度正常显示,如深度测试。可以这么说,渲染队列相当于把物体进行了大致的排序,如果需要精确的话,还需要其他的操作。

Depth Testing深度测试

UnityShader实例04:遮挡透明材质(unitysharder)

Depth Testing:深度测试,也叫深度缓冲。用来确定物体的遮挡关系。只有最靠近观察者的物体会被绘制。深度即Z,该&#;越小表示离观察者越近,该&#;越大表示离观察者越远。

Shader里默认有如下代码ZWrite OnZTest LEqual意思即使Shader里没有写任何关于Depth Testing的代码,Shader也会执行深度测试。

ZWrite:是否此物体的像素深度会被记录(默认记录),ZWrite On 深度记录(默认On),此对象的深度会根据实际情况进行记录。ZWrite Off 不记录此深度,通常用于半透明物体,ZTest Less | Greater | LEqual | GEqual | Equal | NotEqual | Always

默认是 LEqual。 即当深度小于或者等于 深度最小&#;时,渲染物体,即渲染最近的物体。

根据上面的知识我们可以整理个思路,在unity默认情况下物体深度缓存都是打开的,除了半透明物体外,大部分物体都会根据实际情况渲染,显示正确的遮挡关系,即离观察者越近的物体会挡住离观察较远的物体。因此要实现本文的效果,使的被挡住的部分现实出来,我们需要关闭深度缓存(不是关闭ztest),自己控制渲染队列来使被遮挡物体的部分显示到遮挡物的前面来,具体就是在shader中,首先将subshader Tag改成如下形式:Tags { "Queue" = "Geometry&#;" "RenderType"="Opaque" }

这样物体将在不透明物体(墙壁)之后渲染,同时定义两个pass,一个输出xray效果,一个输出贴图颜色,将第一个pass设置成Zwitre off,关闭深度缓存,并将Ztest 参数设置成Greater,第二个pass使用默认设置 即Zwrite on , Ztest LEqual。

那么执行的时候,如果对象没有被墙壁挡住时,先执行的pass输出xray效果,后执行的pass输出了贴图颜色,最终xray被替换成正常贴图颜色。而如果对象被墙壁遮挡时,第一个pass不将它的深度&#;写入【深度缓存】,此时Ztest参数为Greater ,显然当前pass的深度&#;("Geometry&#;")是大于墙壁深度&#;的,所以最终显示了当前pass的颜色,第二个pass是默认设置,并写入了【深度缓存】,深度&#;是小于墙壁深度&#;的,根据ztest LEqual第二个pass的贴图颜色被剔除,最终的颜色就会根据blend公式,显示第一个pass和墙壁颜色的混合结果:

Blend SrcAlpha One

最终颜色=xray效果RGB*xray效果Alpha&#;墙壁RGB*1

对于这个效果可以总结出个简单的代码模式:

VF版本代码:

VF版本代码效果

版权声明:本文为博主原创文章,未经博主允许不得转载。

【Unity3d】在Unity3d中调用外部程序及批处理文件,写自动化编译脚本需要注意的地方 如果调用外部普通应用程序,比如notepad.exe这样调用staticpublicboolExecuteProgram(stringexeFilename,stringworkDir,stringargs){System.Diagnostics.ProcessStartInfoinfo=newSystem.Diagnosti

Metaio in Unity3d 教程--- 二. 创建自己的Application MetaioinUnity3d教程---二.创建自己的Application本文目的是自己创建一个metaio应用,并以扫描图片为目标,即ImageTracking。第一步:创建一个新的Unity3d工程,导

【Unity3d】优化裁剪Unity骨骼动画,减少动画文件容量 我们做的android游戏项目对安装包有容量限制,原先是限制在M之内分析了一下,Texture占用容量最多,排名第二的竟然是角色动画文件一个角色含有若干个

标签: unitysharder

本文链接地址:https://www.jiuchutong.com/biancheng/369197.html 转载请保留说明!

上一篇:Unity教程之手把手教你实现弹框(unity怎么bake)

下一篇:【Unity3d】在Unity3d中调用外部程序及批处理文件,写自动化编译脚本需要注意的地方(unity3ds)

  • 小规模企业所得税多少
  • 年度部门决算报表系统路径
  • 企业购入汽车可以抵扣增值税吗
  • 转出未交增值税借方
  • 业务招待费进项税额转出表二
  • 企业年报社保都是0人的公司
  • 虚开增值税普通发票罪的立案标准
  • 固定资产后续支出资本化和费用化
  • 耕地占用税滞纳金是否能减免
  • 小规模纳税人出租
  • 核定和查账区别
  • 创投资本投入资金如何做账?
  • 工程预付款包括工人工资吗
  • 人力资源公司劳务派遣怎么收费
  • 企业购买原材料,货款未支付
  • 免征增值税对应的进项税额怎么处理
  • 一般纳税人增值税申报操作流程
  • 补贴与工资薪金一起发放,属于福利费,还是纳入工资薪金总额税前扣除?
  • 贷款呆账处理了多长时间恢复征信
  • 银行手续费可以汇总记账吗
  • 制造费用月末怎么结转到生产成本
  • 2020年餐饮行业免税政策
  • 会展服务可以入管理费用的哪个明细费用
  • 个税是什么意思必须交吗
  • 暂时性差异的转回期间如何确定
  • 个人所得税跨年度能退吗
  • win7系统中回收站的内容清空后还能恢复吗
  • 华为p50新款
  • php可以连接access吗
  • 公司专柜样品如何做
  • 动态壁纸怎么设置锁屏
  • win10平板模式怎么打开
  • cpu版本的pytorch可以运行LSgan嘛
  • framework4.0怎么打开
  • 城市公交网
  • 增值税税控系统专用设备费及技术维护费抵扣
  • php上传文件限制大小
  • 织梦前台的菜单怎么换
  • 注册公司冠名省需要多少注册资金
  • 应付债券相关分录
  • 哪些人不要申报个税
  • php 引入
  • 如何准确理解nosql的含义?
  • 员工旅游的费用账务处理
  • 简易征收适用哪些业务租赁
  • 新会计准则规定
  • 福利费超过多少交税
  • 小企业会计准则和企业会计准则的区别
  • var文件是什么意思
  • 装修费一定要摊销吗
  • 装订凭证如何穿线
  • 多计的人工成本怎么做账
  • 未确认融资费用计算公式
  • 影院会计有前景吗
  • 客户用个人账户转4s店开公司的机动车发票
  • 公务机票保险费能报销吗
  • 股东不能参与公司运营和决策,可以起诉吗
  • 回购股票会导致所有者权益减少吗
  • 主营业务收入是什么意思
  • 电脑显示配置windows
  • windows vista怎么样
  • 服务器时间和电脑时间
  • WIN10怎么设置在平板模式下隐
  • linux的run目录放什么文件
  • windows 8 build 8148
  • win10系统无法安装ie11
  • Metaio in Unity3d 教程--- 四:再谈谈图片扫描之tracking配置文件
  • unity3d官方
  • javascript相对路径
  • jQuery ajax的功能实现方法详解
  • python 进阶
  • python从入门到精通百度云
  • jQuery对checkbox 复选框的全选全不选反选的操作
  • 使用筷子就餐会不会传染乙肝病毒
  • 土地增值税清算退税涉及企业所得税补缴
  • 非房地产企业土地增值税
  • 南京国民政府统治和开辟革命新道路
  • 电子保险怎么查询车船税
  • 辽宁省大连市地震
  • 全国城管改革什么时候结束
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设