物体描边

本文详细介绍了如何实现一种自定义描边功能,包括宽度可控、透明过渡、多物体同时描边及不同物体颜色可控等特性。通过在场景渲染时使用 stencil buffer 标记描边物体像素,并在后续渲染中使用 blur 处理得到清晰的描边效果。此过程在性能影响较小的情况下,实现了高效且灵活的描边功能。

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

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

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

### 如何在 Unity Universal Render Pipeline (URP) 中为物体添加描边效果 #### 使用自定义Renderer Feature实现屏幕空间描边 为了实现在Unity URP中的物体描边效果,一种有效的方法是利用`Custom Renderer Feature`来创建屏幕空间描边。这可以通过特定的Shader和脚本来完成,这些资源可以从开源项目获取[^2]。 安装并集成第三方插件或库之后,在项目的`RenderPipelineAsset`下找到对应的`ForwardRendererData`对象,并向其添加新的RendererFeature组件。对于此目的而言,“Outlines”特性已经被设计好可以直接应用到场景内的目标上以产生边缘高亮显示的效果。 ```csharp // 假设已经下载了必要的包并且设置好了环境变量 using UnityEngine.Rendering.Universal; public class AddOutlineEffect : MonoBehaviour { void Start() { var currentVolume = VolumeManager.instance.stack.GetComponent<UniversalAdditionalCameraData>(); if (!currentVolume.HasComponent<ScreenSpaceOutlines>()) { ScreenSpaceOutlines outlineEffect = ScriptableObject.CreateInstance<ScreenSpaceOutlines>(); currentVolume.Add(outlineEffect); } } } ``` 上述代码片段展示了如何通过编程方式给当前摄像机附加一个名为`ScreenSpaceOutlines`的新属性实例;该类通常由所选插件提供支持,负责处理实际绘制逻辑。 #### 升级内置着色器至URP兼容版本 如果开发者希望保留原有材质外观的同时引入新功能,则可能需要考虑将现有的Built-in Shader转换成适用于URP的形式。这一过程可通过菜单栏操作简便达成:选择路径 `Edit > Render Pipeline > Universal Render Pipeline` 并按照提示执行材料升级流程[^3]。 值得注意的是,当涉及到复杂视觉特效时,除了简单的材质迁移之外,还应该仔细审查原生Shader代码及其依赖项,确保它们能够在新的渲染管道环境中正常工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值