Unity-URP 实现遮挡高亮

本文详细介绍了在Unity的Universal Render Pipeline (URP)中,如何利用深度测试和模板测试实现物体高亮与遮挡效果。通过三遍渲染,分别为遮挡层、高亮层和玩家层,调整渲染顺序和测试条件,避免了深度测试可能导致的渲染问题,确保了渲染的准确性和效率。文章特别强调了模板测试在特定情况下的优势,并提供了具体的实现步骤和材质设置方法。
摘要由CSDN通过智能技术生成

实现原理

URP可以根据Layer定制渲染顺序,所以做三遍渲染,第一遍渲染障碍物层,第二遍渲染高亮层,第三遍正常渲染

有深度测试实现法,和模板测试实现法,我也是参考了深度测试的实现方法,探索出的模板测试实现法

深度测试实现在某些情况下 会影响深度渲染,导致物体渲染不正确,所以才用模板测试,不影响深度,渲染结果更加准确

模板测试实现最终效果
在这里插入图片描述

模板测试实现

找到Urp渲染管线资源,关闭特殊渲染顺序需要的Layer,使用RenderFeature 渲染
在这里插入图片描述

在这里插入图片描述
新建一个Shadow 材质,用于遮挡部分
在这里插入图片描述
新建Layer, 做一个player 层,一个front层,当player 被front遮挡,player被遮挡部分使用Shadow材质
在这里插入图片描述

三层渲染,
在这里插入图片描述

Env Front渲染层

front Layer,
设置深度测试正常,LessEqual,离相机近的覆盖远的,(或者关闭深度测试,自动体现深度)
设置模板测试总是通过,设置1

原理:第一层为后面层的渲染打下基础,
深度可以关闭
模板测试总是通过是为了让后面层可以检测模板值

在这里插入图片描述

Shadow 渲染层

Player layer,高亮材质

设置深度测试总是通过Always,不需要深度写入,Less Equal会体现深度信息,我们不需要体现深度

设置模板测试等于1时,通过测试(因为遮挡物的模板值为1),通过测试后,不需要修改模板值,保持即可(没有更多层需要模板值)
设置一个高亮材质(当渲染此层时,使用此材质)

原理:深度测试总是通过是因为 物体在障碍物后面,物体的深度信息比障碍物大,因此Greater 也可以,只有物体深度通过,高亮才能覆盖障碍物层,这也是深度测试实现的核心(实际上模板测试实现也需要深度支持)
在这里插入图片描述

Player渲染层

Player Layer, 要产生高亮的物体
通过Event 和Filters正确渲染物体即可 ,不透明物体在透明物体前渲染
Filters 从渲染队列(是否透明),和Layer Mask找到Player

设置正确的深度测试(近的覆盖远的,Less Equal),或者关闭深度测试(自动体现深度信息)

在这里插入图片描述

深度测试实现

全部关闭模板测试,第一层和第三层正常渲染,
第二层改变深度为,大于深度值才进行渲染 Greater, 即可
在这里插入图片描述

总结:

深度测试实现比较简单,在障碍物与player 属于同一渲染层时比较适合(shader中的渲染顺序,比如都是不透明物体)

如果不属于同一渲染顺序,可能需要模板测试进行辅助,要正确设置效果,需要理解Unity中深度测试与模板测试以及shader的渲染顺序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值