转自:http://www.52vr.com/article-1866-1.html
随着物理渲染系统的发布,虚幻引擎4同时引进了一个新的深度缓存功能,它叫作“自定义深度”,可以用于诸如编辑器里的选择区域高亮、自发光网格的渲染、自定义的透明切片。我将会聊一聊在材质编辑器中使用这种缓存的基础知识,和讲解我在自己的项目中用到的一些功能。

 
本文内容
1. 自定义深度101
2. 渲染对象轮廓
3. 内三角切片
4. 其它用法
5. 多色轮廓效果
6. 问题和局限性
7. 参考资料
 
当你在运用自定义深度在上述的技巧于你需要的效果上时,务必读完本教程后边的『问题和局限性』,防止数小时的烦恼和无用功的发生。
1. 自定义101
对于没有用过该功能的旁友,你可以在渲染目录里的『渲染自定义深度(Render Custom Depth)』那里打开它,那里有针对静态和骨骼网络(Static 和Skeletal Meshs)的选项。
想看看这个特别的缓冲功能可以前往视扣选项里的『缓存可视化(Buffer Visualization)』里看看。

点击看看视频讲解:UE4中运用自定义深度剔除内三角(内三角切片)

注意,距离摄像头近的对象几乎是黑色的,可能很难看得见!

2. 渲染物体边框

为了渲染特定网格的轮廓(比如一个掉下的同伴、一个可以利用的战利品箱子等等),我们需要一个缓存去抓取到他们的阴影。自定义深度对这样的需求来说非常完美。

自定义深度给我们的对象填满了深度信息,所以我们可以在后期处理时用附近的像素做一个简单的深度比对。如果一个附近单元有深度信息但它的像素并没有,那我们就用轮廓的颜色给它上色。

我们可以用另外一个技巧通过比对自定义深度和场景深度(Scene Depth)给所有闭合几何图案画上一层半透明的覆盖区。如果自定义深度比场景深度大,那就给场景深度进行一个融合。

在后期效果中结合使用这两种技巧的结果如下:

我跳过了大多数实现过程的细节,如果你有任何问题,可以尽管在下方留言问问。最后的效果我也做好了大家可以任意下载,可在你们的游戏中随意修改和使用。

----------------------------

轮廓后期处理【下载点这里】

闭合像素带有半透明图层的轮廓后期处理材料

在往你项目的内容文件夹复制uasset为后缀的文件之后,千万记得在你场景里加入一个叫作『后期处理卷(Post Process Volume)』,然后打开『无限制(Unbound)』属性,而且别忘记在『可混入(Blendables)』里放入后期效果材料。

----------------------------

3. 内三角切片(Culling Inner Triangles)

当在模型上应用透明度时比如说在拥有内三角的角色上时(眼镜、嘴巴、手臂、或者有一点盔甲嵌入皮肤上时),会看到材料上有一个惹眼的高亮处,怎么看都不对劲。这种情况我们就可以使用自定义深度来解决。

通过使用自定义深度缓存来渲染我们的角色我们可以剔除在网格外壳下的任何像素。当比较场景深度和自定义深度时一点深度补偿是需要添加的,以防止过多像素包括外壳被剔除了。为了这个目的的材质设置其实很简单:

材质节点——复制这个网址里的内容,你可以直接粘贴到你的材质里。项目源代码在GitHub上可找到

我在下面的设置里做了分别启用和关闭“深度的剔除”的效果对比。右边的角色用红色显示所有闭合像素。我对每个角色渲染两次以让它们运行于一定的限度里,这样透明材料不会渲染进自定义深度里(The character on the right displays all occluded pixels in red. I rendered each character TWICE to work around a limitation where transparent materials do not render into custom depth at all)(这对于场景深度来说很正常,但当在一个有透明效果的网格上明确应用自定义深度时则是不可取的)。你可以下载项目源代码去看清这都是怎么完成的。

点击观看教学视频:在UE4中运用 自定义深度 去剔除内三角

在游戏《Switch》上我们运用这个技术在一种隐身效果上,让它有一个更流畅的“壳”,同时高亮一个有着很多重叠像素的网格。

非常重要的是我们需要知道如果多种材质运用这个技术的话只有最靠近摄像头的物体能够准确地进行剔除动作。在这幅图片中你可以看到当多个网格重叠时有可能发生错误。所以考虑使用这个技术时应该把这种现象考虑在内(本文由52vr.com用心翻译)。如果只是少量地运用这种方式或者用在连续性的独立场景上,则可能永远都不会有问题。

这个问题在做剔除操作的时候可能可以通过添加一个最大值的深度增量来解决。我对这个点没有过多阐述,以后如果开始有实际操作性的问题我可能就回来说一说这个。

4. 其它用法

在游戏《Switch》上我们给一些功能用上了自定义深度,其中一个有着一种X射线材料,可以把墙后面的玩家暴露出来。我添加了一个关于这个想法的早期证明短视频,请点击观看

5. 多颜色轮廓效果(Multi-Color Outline Effect

在多个引擎版本之前『模板索引(Stencil Index)』缓冲功能是配合自定义深度一起工作的。这让我们能够在其它许多很酷的效果中制造多颜色轮廓的效果!点击这里了解这种新效果的更多信息,其中包括这种处理程序的下载链接。

6. 问题和局限性

自定义深度并不能在半透明材质上工作。在这种情况下你需要网格的一个复制品,这个复制品是一种简单的非透明材质,打开了自定义深度功能而关闭了渲染主要通道(Render Main Pass)。相关信息可以查看AnswerHub

因为缓冲里都是应用了自定义深度的物体,在有多层重叠的网格时(一个叠着另一个)它将不会发挥作用,这取决于你怎样使用深度数值——如果你使用自定义深度想要剔除内三角的话,一个透明网格可能被完全剔除。一种可能的变通方法是当你在寻找内三角以去除错误的时候,添加一个最大值的深度差别。

7. 参考资料

Github上的原材料

多颜色轮廓效果

 

UE4里的自定义深度功能的更多相关文章

  1. UE4 custom depth 自定义深度

    用途1: 半透明材质中实现遮挡Mesh自己其他部分的效果. 不遮挡效果如下: 遮挡后效果如下: 实现方法: 深度信息是越远值越大,使用两个Mesh,一个正常渲染,另一个渲染到custom depth ...

  2. 利用修改div的位置+js对象存储div信息 实现简单的div自定义布局功能

    原文:利用修改div的位置+js对象存储div信息 实现简单的div自定义布局功能 利用修改div的位置+js对象存储div信息 实现简单的div自定义布局功能1.在界面上添加几个checkbox和一 ...

  3. ThinkPHP5集成JS-SDK实现微信自定义分享功能

    最近开发一个项目,需要将链接分享给好友时能够自定义标题.简介和logo,现将ThinkPHP5集成JS-SDK实现微信自定义分享功能的过程整理成文. 一.准备工作 1.认证的公众号 不管是订阅号还是服 ...

  4. c#微信开发,使用JS-SDK自定义分享功能,分享朋友圈,分享给朋友等

    如果一个后端开发掌握了微信开发,甚至有微信开发上线项目,这在换工作的时候 还是有竞争力的. 微信开发的资料很多,但是用asp.net c#进行微信开发好像比较少,或者资料不够完整. 使用JS-SDK自 ...

  5. springboot~yml里的自定义配置~续

    之前写了关于读取自定义配置的文章springboot~yml里的自定义配置,而今天主要说一下对复杂配置信息的读取方法,我们简单的配置用@Value注解就可以了,而结构复杂的一般使用@Configura ...

  6. Javascript自定义事件功能与用法实例分析

    原文地址:https://www.jb51.net/article/127776.htm 本文实例讲述了javascript自定义事件功能与用法.分享给大家供大家参考,具体如下: 概述 自定义事件很难 ...

  7. UE4里的渲染线程

    记的上次看过UniRx里的源代码,说是参考微软的响应式编程框架,响应式编程里的一些理论不细说,只单说UniRx里的事件流里的事件压入与执行,与UE4的渲染线程设计有很多相同之处,如果有了解响应式编程相 ...

  8. C#在自定义事件里传递自定义数据,使用EventArgs的姿势

    EventArgs是包含事件数据的类的基类,用于传递事件的细节.今天分享的是使用泛型来约束EventArgs,在事件里传递自定义数据的例子. 正题 由于这个关注点很小,直接上代码了. 定义泛型类TEv ...

  9. 富文本编辑器UEditor自定义工具栏(三、自定义工具栏功能按钮图标及工具栏样式简单修改)

    导读 富文本编辑器UEditor提供丰富了定制配置项,如果想设置个性化的工具栏按钮图标有无办法呢?答案是肯定的!前两篇博文简要介绍了通过将原工具栏隐藏,在自定义的外部按钮上,调用UEditor各命令实 ...

随机推荐

  1. MySQL聚合函数与数据分组

    我们最常需要的是汇总数据而不是把他们实际检索出来 确定表中行数(或满足某个条件或包含某个特定值的行数) 确定表中行组的和 找出表列(或所有行或特定列)的最大值,最小值和平均值 聚集函数是运行在行组上, ...

  2. HI3518E平台ISP调试环境搭建

    海思的SDK提供了ISP调试的相关工具,降低了IPC的ISP调试的难度.初次搭建ISP调试环境,记录一下. SDK版本:Hi3518_MPP_V1.0.A.0 硬件平台:HI3518E_OV9732 ...

  3. Dynamic dispatch

    Dynamic dispatch动态调度.动态分发 In computer science, dynamic dispatch is the process of selecting which im ...

  4. [转]浅谈UML的概念和模型之UML九种图

    目录: UML的视图 UML的九种图 UML中类间的关系 上文我们介绍了,UML的视图,在每一种视图中都包含一个或多种图.本文我们重点讲解UML每种图的细节问题: 1.用例图(use case dia ...

  5. elasticsearch 基础 语法总结

    1. es 使用 restful 风格的 api 备注: es 的 api  格式  基本是这个样     请求方式    /索引名/文档名/id?参数   ,但是 还有 很多不是这样的 请求,比如 ...

  6. 【转】车和家CEO李想回顾创业20年:站在更高层才能看到低层问题

    明天就要上班了,写一下我创业20年经历的五个楼层,每一层的认知回过头来看都是天壤之别,以及无比的幸运.只有到了更高一层,你才可以更好的看到低楼层的问题.希望对你的工作有所帮助. 一层楼,生为一个普通的 ...

  7. 基于CRF序列标注的中文依存句法分析器的Java实现

    这是一个基于CRF的中文依存句法分析器,内部CRF模型的特征函数采用 双数组Trie树(DoubleArrayTrie)储存,解码采用特化的维特比后向算法.相较于<最大熵依存句法分析器的实现&g ...

  8. MAC上使用Enterprise Architecture,附带安装步骤及破解链接

    绪论 网上找了半天这个主题也没有详细的步骤的昂,所以自己来造轮子了. 还有,百度搜EA破解版不靠谱,大搜狗更给力哦! 一.背景 穷逼只有一台存储空间不大MACAir,分给虚拟机Virtual Box的 ...

  9. EXCEL 将网络图片地址插入为锁定的图片单元格宏

    Sub InsertPic2(ByVal 图片链接 As String, ByVal 插入图片表名 As String, ByVal 插入图片单元格地址 As String) On Error Res ...

  10. 使用php生成数字、字母组合验证码

    项目中经常会遇到一些登陆验证,支付验证等等一系列安全验证的策略.实现方法多种多样,下面就来讲解下如何用php生成简单的文字+数字组合的验证码: 所用语言php,gd库 原理解释: a>实质上是在 ...