物体描边

今天把原来工作中实现的描边功能又看了下,发现有不少细节都忘记了,重新分析了下了过程,整理了下实现思路。

总的来说到描边功能实现了如下效果

1、宽度可控,且宽度不随物体缩放

2、可透明过度

3、可多个物体同时描边

4、不同物体的描边颜色可控

最终效果图:


下面是实现思路

1、在正常的场景渲染时通过StencileBuffer,标记描边物体像素

2、在描边渲染中,用StencileBuffer配合,重新用描边颜色渲染该对象,得到一个该物体可见部分的纯色图


3、对上图进行Blur处理,Blur可以使绿色部分范围往外延伸,延伸出来的部分就是描边,宽度和透明度也在这步控制


4、为了得到Blur延伸多出部分必须把物体自身部分去掉,需要对物体再次渲染,得到一个mask图像


5、用Blur后的图像和mask图像配合,将描边部分混合到BackBuffer

总结

1、描边过程需要在场景正常渲染时使用StencileBuffer,所以如果场景正常渲染已经使用了StencileBuffer则需要考虑其他方式,比如用MRT记录,对资源占用和方便性都没有StencileBuffer好。

2、整个过程中需要对描边物体进行两次额外渲染,且使用描边专用shader,集成难度视渲染架构而定,一般来说不会同时绘制很多描边物体,且描边shader本身很简单,所以额外的渲染次数对性能影响不大,另外Blur和描边混合到BackBuffer还需要数次全屏2D的操作,涉及的shader也很简单,性能影响也可以忽略。

3、资源占用上,需要得到两张全屏贴图和一个RT

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值