网易首页 > 网易号 > 正文 申请入驻

URP系列教程 | 新功能Decal System贴花系统

0
分享至

贴花 Decals 是现代游戏中非常常见的功能,很多用户会因为 URP 中缺失贴花系统而放弃使用 URP。所以 URP 拥有其内置的贴花解决方案变得非常重要。Unity在 URP 12.0 及以上版本中将贴花 Decals 在 Renderer Feature 中完全模块化;并且实现了贴花投影(Decals Projector )、贴花网格以及贴花着色器(Decal Shader Graph)。

本篇教程将会从以下几个方面来给大家讲解 URP Decal System。

1. 游戏中贴花的应用场景

2. URP 中的两种贴花解决方案介绍

3. 实战案例-如何使用 URP Decal System 创建 FPS 游戏中的弹孔效果

4. URP Decal System 性能优化建议

5. 透明表面贴花支持计划

游戏中贴花的应用场景

贴花 Decals,顾名思义,允许在物体表面上添加图案(贴花),包括基于物理的照明。如果你想向物体表面添加任何细节,那么贴画系统是一个非常强大的解决方案。贴花 Decal 在游戏中是一种非常常见的效果,举几个常见的用例是:比如在游戏中墙壁上的涂鸦、地毯上的花纹或者在射击游戏中的血迹、弹孔等等效果。

正因为贴花 Decals 是现代游戏中非常常见的功能,很多用户会因为 URP 中缺失贴花系统而放弃使用 URP。虽然也有些用户会为管线缺少的功能编写自己的解决方案。但是创造一个高质量的贴花系统并非易事,因为贴花系统最佳解决方案与渲染逻辑是密切相关。所以 URP 拥有其内置的贴花解决方案变得非常重要。

Unity 在 URP 12.0 及以上版本中将贴花 Decals 在 Renderer Feature 中完全模块化;并且实现了贴花投影(Decals Projector)、贴花网格以及贴花着色器(Decal Shader Graph)。

URP中的两种贴花解决方案介绍

由于 URP 涵盖平台广泛,所以 Unity 推出几种不同的解决方案:使用户可以根据平台的不同选择不同质量与性能的贴花解决方案。

第一种 Screenspace decals(屏幕空间贴花)

屏幕空间贴花通过在不透明对象之后渲染贴花作为额外的渲染通道来工作,并且根据渲染目标(如 forward/deferred)会有轻微的变化。屏幕空间贴花解决方案虽然在视觉上非常有限,但它不需要深度预通(depth prepass),这使 Screen space decals(屏幕空间贴花)解决方案非常适合基于 tile 的渲染设备(移动设备)。

其中Normal Blend属性中的选项(Low、Medium 和 High)确定 Unity 在从深度纹理重建法线向量时所采用的深度纹理的样本数。质量越高,重建的法线越准确,性能影响越大。(Low 表示 Unity 在重建法线时采用一个深度样本、Medium 表示 Unity 在重建法线时采用三个深度样本、High 表示 Unity 在重建法线时采用七个深度样本)

其中 Use GBuffer 属性 :在延迟渲染路径中使用此选项。在延迟渲染路径中,贴花影响基础颜色、自发光颜色和法线。

第二种是 DBuffer(贴花缓冲区)

贴花缓冲区 DBuffer 解决方案与 GBuffer 贴花非常相似,Unity 将贴花渲染到贴花缓冲区 (DBuffer)。然后 Unity 在渲染不透明对象期间将 DBuffer 的内容覆盖在不透明对象之上。

如下图所示:首先我们先在 depthprepass 渲染深度图,然后将贴花(Decal)渲染到类似 GBuffer 的 DBuffer 上,然后再渲染 GBuffer 的时候,直接应用同样的位置对 DBuffer 进行采样,融合到 GBuffer 中。之后根据渲染路径的不同:

前向 -在渲染不透明对象期间,每个对象将 _DBufferTexture0-3 应用于其表面数据 Surface Data。

延迟 -在渲染 GBuffer 期间,每个对象都将 _DBufferTexture0-3 应用于其表面数据 Surface Data。

当我们选择 DBuffer 这个解决方案时,会在 Technique 属性下显示 Surface Data 属性。Surface Data 属性允许我们指定贴花的哪些 Surface Data 表面属性与底层网格混合。为了更好地控制性能我们通过 Surface Data 属性来进行控制。

Surface Data 属性具有以下选项:

Albedo:贴花影响基础颜色 base color 和自发光颜色 emission color

Albedo Normal:贴花影响基础颜色、自发光颜色和法线。

Albedo Normal MAOS:贴花影响基础颜色、自发光颜色、法线、金属值、平滑度值和环境光遮挡值。

DBuffer 贴花技术需要 Depth Normal Prepass,这使得此技术在实现基于 tile 的渲染的 GPU 上效率较低。所以它不适合移动平台,比较适合 PC 和 Console 平台。(高清渲染管线 HDRP 目前在采用这种贴花方案)

如何使用URP Decal System

创建FPS游戏中的弹孔效果

那么接下来,我们就是通过一个实战的案例来教大家如何使用 URP Decal System。

首先我们新创建一个 URP 的工程,我将项目命名为 BulletDecals,然后在 Edit>Project settings 中找到 URP Asset。

接着点击 URPAsset_Renderer,在 Inspector 面板中添加 Decal Renderer Feature 到 URPAsset_Renderer 当中。

添加完成 Decal Renderer Feature 之后,将Technique 设置为 Automaic;这样的话 Unity 会自动根据所构建的平台和系统的兼容性选择最合适的 Decal 渲染技术;Max Draw Distance 设置为 100,代表 Unity 渲染贴花时距相机得到最大距离为 100,大于这个距离,Unity 将不渲染对应的贴花(如下图举例所示)。

接着我们创建一个材质,将其命名为 MetalBulletHole;然后的话为其指定 Shader Graphs/Decal 着色器。材质只有使用 Decal 着色器,URP Decal Projector 贴花投影仪才可以将材质投影为贴花,这里我们将 Decal 着色器也命名为了 MetalBulletHole;

双击 Edit..., 打开 URP 预置的 Decal Shader Graphs 模板,我们可以看到预置的 Decal Shader Graph 具有以下属性(下图中1,2,3):Base Map、Normal Map、Normal Blend 分别代表的是材质的基础纹理、法线贴图以及法线贴图与所投影到的材质得到法线贴图混合的比例。(0代表贴花不影响其投影到的材质;1代表贴花的法线贴图替换了它所投影的材质的法线贴图)

除此之外我们在贴花材质的 Inspector 面板还有一些“高级选项”。(上图中4)

Enable GPU Instancing:启用此选项可让 URP 在一个 Batch 中渲染具有相同几何体和材质的 Mesh。从而加速渲染(后面我们会开启 GPU Instancing 进行测试)。

Priority:这个属性定义 URP 在场景中绘制贴花的顺序。URP 首先绘制具有较低优先级值的贴花,然后在具有较低优先级值的贴花之上绘制具有较高优先级值的贴花。因此它不必渲染重叠区域两次,我们可以使用这个属性来减少设备上的 Overdraw。

如果场景中有多个具有相同优先级的贴花材质,URP 会按照材质的创建顺序渲染它们。

Mesh Bias Type:这个属性仅适用于具有直接指定贴花材质类型(比如我们可以将贴花着色器的材质直接分配给游戏对象)。而如果使用 Decal Projector 来指定贴花材质则可以忽略这个属性。在这种情况下 Mesh Bias 可让防止贴花游戏对象与其重叠的游戏对象之间发生 z-fighting。

View Bias:绘制贴花游戏对象时,Unity 将游戏对象的每个像素沿视图向量移动该值。正值将像素移动到更靠近相机的位置,以便 Unity 在重叠的 Mesh 顶部绘制贴花游戏对象,从而防止 z-fighting。

Depth Bias:在绘制 Decal GameObject 时,Unity 通过这个值改变 GameObject 的每个像素的深度值。负值会使像素更靠近相机,以便 Unity 在重叠的网格上绘制贴花游戏对象,从而防止 z-fighting。

为了能够控制贴图的颜色与法线强度,这里我们在内置的 Decal Shader Graph 上增加了两个节点 Multiplay 与 Normal Strength;并在 Shader Graph 中添加两个属性 Color 和 Normal Strength,这样我们就可以在编辑器的 Inspector 界面对其进行修改。

在材质的 Inputs 属性中选择添加对应的 Albedo 贴图和 Normal 贴图。选择 Color 为白色,并将 NormalStrength 的强度调节为 0.547;

创建一个空的 GameObject,将其命名为 MetalBulletHole,将URP Decal Projector组件添加到 MetalBulletHole 身上。调整大小与深度值使其显示在金属板面上,将我们之前创建的 MetalBulletHole 材质添加到 Material 属性上。当选择 Decal Projector 时,Unity 会显示其边界和投影方向。Decal Projector在边界框内的每个 Mesh 上绘制贴花材质。其中白色箭头表示投影方向。箭头的底部是坐标轴点。

最后,为了使我们的效果更加逼真,我们在 MetalBulletHole 加上子弹与金属碰撞产生的火花 Sparks 与烟尘 Dust 的粒子效果。

按照上面的方式,我们接着实现与子弹与墙面的贴花效果和子弹与木材的贴花效果;最终的效果如下:

URP Decal System性能优化

URP 支持材质的 GPU 实例化。如果场景中的贴花使用相同的材质,并且材质启用了启用 GPU Instancing 实例化属性,则 URP 会实例化材质并减少对性能的影响。

我们尝试在该项目中开启所有的贴花材质的 GPU Instancing,通过对比统计窗口的合批数和渲染线程的节省的时间都有了明显的提升。

另外由于 URP Decal System 采用了类似 ECS 的实现方法,所以在使用 URP 贴花系统的时候如果和 jobify 和 burst 一起使用效果会更好。

我们来做一个简单性能测试,我们在场景中创建了 10000 个 Decal,对比使用 Burst 前后性能的对比:通过 Profiler 中的数据我们也可以明显的看到使用 Burst 后,帧率得到了提升并且更加稳定。

透明表面贴花支持计划

最后 URP Decal System 目前还不能在透明表面上起作用。但是这个功能已经在 HDRP 中已经使用 Cluster decal 解决方案进行实现了。所以我们的计划目标是将 HDRP 贴花解决方案移植到 URP,以致于使它满足 URP 对移动设备友好性。

Unity 官方微信

第一时间了解Unity引擎动向,学习最新开发技巧

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
俄罗斯真的敢在乌克兰境内使用核武器?德国总理:完全没必要担心

俄罗斯真的敢在乌克兰境内使用核武器?德国总理:完全没必要担心

种花家的评论员
2024-06-13 12:00:02
继续丢人!被乌军干掉的苏-57还不只一架?

继续丢人!被乌军干掉的苏-57还不只一架?

说娱指南
2024-06-11 10:58:24
陈道明与发妻罕见合体,69岁杜宪素颜穿奶奶装难掩出挑气质

陈道明与发妻罕见合体,69岁杜宪素颜穿奶奶装难掩出挑气质

时髦范
2024-01-17 17:39:28
金英权:在场下看韩国比赛和上场踢感觉不一样,看球我也很紧张

金英权:在场下看韩国比赛和上场踢感觉不一样,看球我也很紧张

懂球帝
2024-06-13 10:52:09
在我面前一直冷淡的老婆,竟有如此疯狂的一面

在我面前一直冷淡的老婆,竟有如此疯狂的一面

封河日丽
2023-10-18 16:37:40
吴宣仪程潇耍大牌?王星越吴谨言假戏真做?高云翔再婚生女?他现实中也很渣

吴宣仪程潇耍大牌?王星越吴谨言假戏真做?高云翔再婚生女?他现实中也很渣

吃瓜科学家
2024-06-13 00:00:44
台湾省境内几乎不产石油,大量依赖进口,为何油价却那么低?

台湾省境内几乎不产石油,大量依赖进口,为何油价却那么低?

毒舌混知所
2024-05-29 07:10:13
双标玩的真6!美国前脚刚批判完中国,后脚就将机械狗用于实战

双标玩的真6!美国前脚刚批判完中国,后脚就将机械狗用于实战

虎哥说航天
2024-06-12 19:20:02
崔永熙试训步行者细节曝光:大部分环节表现出色 伯德问他从哪来

崔永熙试训步行者细节曝光:大部分环节表现出色 伯德问他从哪来

罗说NBA
2024-06-13 10:02:53
​治不了美国,还治不了你?

​治不了美国,还治不了你?

求实处
2024-06-14 00:58:00
除三害:恨国党、殖人、公知,其实不需要多说,问题在于如何识别

除三害:恨国党、殖人、公知,其实不需要多说,问题在于如何识别

杏坛金语
2024-06-05 18:20:52
越南同意采用中国轨距,短短24小时之内,两条关键铁路传来捷报

越南同意采用中国轨距,短短24小时之内,两条关键铁路传来捷报

蒋福伟
2024-06-13 15:37:04
6月13日夜晚,突然传来一个重大消息!又要来大动作吗?

6月13日夜晚,突然传来一个重大消息!又要来大动作吗?

股市皆大事
2024-06-13 18:09:01
重庆中考遇冷,考点外围冷清至极,极度罕见!

重庆中考遇冷,考点外围冷清至极,极度罕见!

白浅娱乐聊
2024-06-13 21:00:53
黄仁勋称台湾地区为“国家”,英伟达飘了?有离开中国的底气吗?

黄仁勋称台湾地区为“国家”,英伟达飘了?有离开中国的底气吗?

小新历史
2024-06-12 16:34:47
或已做最坏打算?中方与荷兰爆发短兵相接,解放军出动冲天飞豹

或已做最坏打算?中方与荷兰爆发短兵相接,解放军出动冲天飞豹

文雅笔墨
2024-06-12 19:49:44
泽连斯基德国议会演讲:与俄妥协已过去,普京失败符合所有人利益

泽连斯基德国议会演讲:与俄妥协已过去,普京失败符合所有人利益

探索星空
2024-06-12 16:13:49
浙江女子老公帅得像明星,女子向网友炫耀,网友:你两看着像母子

浙江女子老公帅得像明星,女子向网友炫耀,网友:你两看着像母子

三叶秋文局
2024-06-10 22:08:28
为救4人杀害加沙上百人,以色列总领事馆发声:他们竟然让人质洗碗!

为救4人杀害加沙上百人,以色列总领事馆发声:他们竟然让人质洗碗!

不掉线电波
2024-06-11 18:39:23
向督导组汇报工作后,董事长落马

向督导组汇报工作后,董事长落马

鲁中晨报
2024-06-13 17:11:08
2024-06-14 02:30:44
Unity
Unity
Unity中国官方帐户
2131文章数 6700关注度
往期回顾 全部

艺术要闻

穿越时空的艺术:《马可·波罗》AI沉浸影片探索人类文明

头条要闻

养羊理财平台爆雷用户提现失败 客服:账上已没有资金

头条要闻

养羊理财平台爆雷用户提现失败 客服:账上已没有资金

体育要闻

乔丹最想单挑的男人走了

娱乐要闻

森林北报案,称和汪峰的感情遭受压力

财经要闻

私募大佬孙强:中国为什么缺少耐心资本

科技要闻

小红书员工仅1/5工龄满2年 32岁就不让进了

汽车要闻

升级8155芯片 新款卡罗拉锐放售12.98-18.48万

态度原创

家居
教育
游戏
艺术
军事航空

家居要闻

大城小室 质朴自然的心灵居所

教育要闻

TTS新传论文带读:粉过恋爱兄妹的李龙宇是我的赛博案底…

主播请路过老人玩《无畏契约》:击杀就送鸡蛋等

艺术要闻

穿越时空的艺术:《马可·波罗》AI沉浸影片探索人类文明

军事要闻

美军演习将罕见以4万吨级准航母作为靶舰

无障碍浏览 进入关怀版