在unity里实现Hi-z occlusion

先看效果:

效果

可以看到,随着相机的移动,被相机平截头和深度遮挡的物体,就会被剔除。因为考虑到计算精度的问题,所以也会有个别物体漏过去,这个只能暂时忽略。

hi-z算法流程如下:

1、使用上一帧场景深度buffer,构造分层深度图像 hi-z map.这些分层图像实对深度缓冲区进行mip-map,每个mip级别中,包含此块中的最大深度值

2、将当前待绘制的物体分为两个集合:集合1,上一帧已有的物体,2当前帧新增的物体

3、先处理集合1,对集合1中的每个物体,使用包围盒计算其是否可见

4、根据第三步的结构,更新深度buffer

5、处理集合2,使用新的深度图,对集合2进行剔除

6、绘制集合2中可见的物体

unity如果完全实现上述算法的话,需要使用urp或者hdrp。由于我项目并没有使用urp,所以无法将物体分两批进行绘制。可以采用简略的方法,即不分成两个集合,都使用上一帧深度进行判断即可。这样在转动的时候,会有一些边角地区出现猛的出现一个物体,

但是项目中使用了运动模糊和其它的一些小技巧,来弥补掉这个问题,看起来也还行。而且降低了多次调用compute shader的消耗。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值