原文|《Unreal Engine 4 Tutorial: Creating Snow Trails in Unreal Engine 4》
作者|Tommy Tran Jun 3 2018 | 翻译 开发游戏的老王
阅读时长|25分钟 内容难度|入门级
本教程将介绍如何使用 scene capture渲染目标(render target) 雪地足迹效果

所谓 scene capture 简单讲就是一种可以向渲染目标输出的摄像机。

文章目录

  • 开始吧
  • 实现雪地足迹
  • 从底部拍摄
  • 创建深度检测材质
  • 创建Scene Capture

最近如果你在玩AAA游戏,你可能会在有雪景的游戏中发现一种趋势,典型的例子比如:《地平线:黎明时分》、《古墓丽影:崛起》以及《战神》。在这些游戏中,最引人注目的一件事就是:可以在雪地上产生足迹了!

允许玩家和环境发生交互是提升沉浸感(immersion)的极好方法。它会让环境看起来更加真实而且真的太有趣了。如果能让玩家在地上蹦跶蹦跶画画雪天使就乐在其中,还非花好几个小时设计各种机制干嘛呢?

本教程将会介绍:

  • 使用scene capture对近地面物体进行遮罩,从而实现足迹
  • 在场景材质中使用遮罩实现可形变的雪
  • 通过只显示角色附近的足迹进行优化

注意:本教程假定读者已经掌握了Unreal Engine的基本用法。

注意:本教程渲染目标系列教程四部曲之一:

  • 第一部分:使用渲染目标绘制
  • 第二部分:实现雪地足迹(当前位置!)
  • 第三部分:可交互的草(敬请期待)
  • 第四部分:网格模型绘制(敬请期待)

开始吧

译者注: 本教程提供了范例工程,如果需要可以到原文网站免费注册并下载

下载工程并解压后,找到SnowDeformationStarter文件夹,并打开SnowDeformation.uproject。本教程中,我们将会在这个第三人称角色和几个箱子的场景中实现雪地足迹。

在开始之前,必须声明一下本教程中的方法仅能够存储一个限定区域的足迹而不是整个世界的。因为区域大小依赖于渲染目标的分辨率(render target’s resolution)。

例如,如果我们想为一个很大的区域存储足迹,那就必须增加分辨率。这样做的同时,scene capture的性能影响以及渲染目标的内存占用量也会加大。因此,我们得通过限制有效区域和分辨率来进行优化。

接下来,咱们看一下如何实现雪地足迹。

实现雪地足迹

首先,我们要为足迹创建渲染目标。这里的渲染目标是一个灰度遮罩,其中白色代表着足迹,褐色代表非足迹。我们将渲染目标投影到地面,然后用它来混合纹理以及置换顶点。

接着,我们得找到一种方法只遮罩那些可影响雪的物体。我们可以先把对象渲染到自定义深度(Custom Depth),再使用一个带有后期处理材质的scene capture对所有渲染到自定义深度的对象进行遮罩,然后再把遮罩输出给渲染目标。

scene capture的关键是它放置的位置。下图是一个由自顶向下视角记录场景并输出给渲染目标的例子(下文简称顶视角)。这里,第三人称角色和箱子都被遮罩了。

第一感觉,这种顶视角的效果还不错吧,形状都很准确貌似没什么问题。

其实不然,顶视角的问题在于它无法记录宽点下面的内容,如图所示:

假想一下,黄色的线箭头会一直延申到地面。对于立方体和锥体箭头会一直保持在物体内部。然而,对于球体箭头会在趋近于地面的时候离开球体。而从摄像机的角度看,箭头依然在球体内部。以下就是摄像机眼中的球体:

尽管近地面的部分很小,这会使得球体的遮罩大于它的应有大小。并且使我们很难判断出物体是否接触地面。

译者注:下文简称这个问题为“大肚子问题”。

解决上述问题的方法就是从底部开始拍摄。

从底部拍摄

所谓从底部记录就是像下图这样:

如我们所见,摄像机从底部也就是接触地面的角度拍摄。这样就解决了顶视角的“大肚子问题”。

要判断物体是否接触地面,我们可以使用后期处理材质进行深度检测。这个检测会告诉我们物体是否高于地面深度且低于指定的偏移量。如果这两个条件均为true,我们就可以为这一像素遮罩。

以下是一个高于地面20个单位的拍摄区域的例子。注意遮罩仅仅在物体通过某个点时才产生,并且物体越接近地面遮罩也变得越宽。

下面,我们创建一个后期处理材质进行一下深度检测。

创建深度检测材质

要进行深度检测,我们需要两个深度缓冲区。一个针对地面;另一个针对影响雪的物体。因为scene capture仅能看到地面,场景深度(Scene Depth)缓冲区 将会输出地面的深度。要获取物体的深度,我们只需要将它们渲染到 自定义深度(Custom Depth)缓冲区

注意:为了节省时间,原作者已经将角色和盒子渲染到了自定义缓冲区。如果你还要添加影响雪的物体,请确保开启它们的Render CustomDepth Pass

首先,我们需要计算每个像素到地面的距离。打开Materials\PP_DepthCheck并创建如下连接:


接下来,我们需要创建拍摄区域(capture zone),请按下图高亮所示连接:

现在,如果某像素距地面25个单位以内,那么它将被遮罩。遮罩的强度(masking intensity)依赖于像素和地面的距离。点击应用并回到主编辑器。

接下来,我们将创建scene capture

创建Scene Capture

首先,我们需要一个用于场景记录写入的渲染目标。在RenderTargets文件夹中创建新的Render Target 并命名为 RT_Capture

现在我们创建scene capture。本教程中,我们要在蓝图中创建场景记录以便后续对它进行编程。打开Blueprints\BP_Capture 添加Scene Capture Component 2D组件并命名为SceneCapture

首先,设置scene capture的朝向使它向上对着地面。在细节面板上将Rotation设为**(0,90,90)**.

应为遮罩是2D的,所以我们要去除所有透视干扰,因此将Projection\Projection Type设为 Orthographic

Scene Capture\Texture Target 设为 RT_Capture,从而告诉scene capture写入到那个渲染目标。

最后,我们需要使用深度检测材质。将PP_DepthCheck添加到 Rendering Features\Post Process Materials中。为了使后期处理正常工作,我们还要把Scene Capture\Capture Source改为Final Color (LDR) in RGB


现在scene capture就设置完毕了,我们需要指定拍摄区域的大小。

Unreal Engine 4 渲染目标(Render Target)教程 之 实现雪地足迹(上)相关推荐

  1. Unreal Engine 4 渲染目标(Render Target)教程 之 使用渲染目标绘制(下)

    本文是<Unreal Engine 4 渲染目标(Render Target)教程之 使用渲染目标绘制>的下半部分,上半部分请见<Unreal Engine 4 渲染目标(Rende ...

  2. Unreal Engine 4 渲染目标(Render Target)教程 之 实现雪地足迹(下)

    本文是<Unreal Engine 4 渲染目标(Render Target)教程 之 实现雪地足迹>的第三部分 第一部分请见<Unreal Engine 4 渲染目标(Render ...

  3. Unreal Engine 4 渲染目标(Render Target)教程 之 可交互的草地(上)

    原文|<Unreal Engine 4 Tutorial: Creating Interactive Grass in Unreal Engine 4> 作者|Tommy Tran Aug ...

  4. Unreal Engine 4 渲染目标(Render Target)教程之 使用渲染目标绘制(上)

    原文|<Unreal Engine 4 Tutorial: Painting With Render Targets> 作者|Tommy Tran Jun 18 2018 | 翻译 开发游 ...

  5. 【学习笔记】Unreal Engine 4 虚幻引擎蓝图中级教程物理碰撞教程

    教程链接:Unreal Engine 4 虚幻引擎蓝图中级教程物理碰撞 想共享的小伙伴可以E-mail我:lxbcolorgalaxy@qq.com 目录 第一章 常见的物理现象及分析 1蓝图模板中的 ...

  6. ArcGIS Maps SDK for Unreal Engine通过UI方式显示地图教程

    前言 一个 UE 项目,可以包括多个关卡(level),关卡可以在菜单栏中新建(文件->新建关卡). 使用快捷键 Ctrl+S 可以保存当前关卡,你可以保存到上面提到的演示文件放置的位置,你可以 ...

  7. Unreal Engine 4(UE4)下载教程

    首先登陆到UE官方网站https://www.unrealengine.com  下载EpicGamesLauncherInstaller-2.1.3-2533468.msi文件 按照提示进行安装 如 ...

  8. 什么是渲染目标(render target) 渲染到纹理(Render To Texture, RTT)详解

    渲染到纹理(Render To Texture, RTT)详解 RTT是现在很多特效里面都会用到的一项很基本的技术,实现起来很简单,也很重要.但是让人不解的是网上搜索了半天只找到很少的文章说这个事儿, ...

  9. UNREAL ENGINE 4.13 正式发布!

    这次的版本带来了数百个虚幻引擎 4 的更新,包括来自 GitHub 的社区成员们提交的 145 个改进!感谢所有为虚幻引擎 4 添砖加瓦贡献的人们: alk3ovation, Allegorithmi ...

最新文章

  1. 热议:这样的开源项目,你会支持吗?
  2. Android 导航栏如何轻松搞定
  3. 无法打开此修补程序包”或“这个产品的安装来源无法使用”解决(转)
  4. 电源功耗压力测试软件,开关电源负载测试经验分享——这篇三分钟小文章着实令人“心动”...
  5. Java-File-文件操作
  6. Eclipse — 如何导入包
  7. OpenCV读取网络摄像头视频并保存到本地
  8. 如何在微信小程序内使用外部字体
  9. 正交法设计测试用例时可以使用的工具allpairs---生成正交表
  10. 不能为属性:[commandName]找到setter 方法
  11. Toast基本使用方法
  12. linux上使用drive从google drive 下载文件和文件夹
  13. Silverlight 4 - MVVM with Commanding and WCF RIA Services
  14. vue实现点击按钮调用摄像头扫码
  15. 问题解决:[/usr/lib/systemd/system/etcd.service:6] Missing ‘=‘.
  16. zke电池测试 软件,EBC-X系列电池测试仪使用说明.pdf
  17. Java泛型中的桥方法(Bridge Method)
  18. ibm服务器进不去系统怎么回事,IBM X3400服务器故障开机进不去系统
  19. 元祖python_python元祖和列表
  20. 易语言制作计算软件简单步骤_视频解说不想自己录,用什么简单好用的配音软件制作?...

热门文章

  1. jupyter和spider;Anaconda、Python、Jupyter、Pycharm、Spyder、conda、pip
  2. MySQL高级:索引优化之防止索引失效
  3. Python全栈(三)数据库优化之10.MySQL高级-表优化和索引优化
  4. P3939 数颜色 (权值线段树)
  5. 查找最小的k 个元素
  6. linux动态压缩硬盘,VirtualBox 压缩VDI硬盘
  7. ttkefu怎么取消英文版?显示中文版
  8. 编写函数 int fac(int x)计算 x!的值。在主函数中输入 n 和 m 的值,通过调用函数 fac 计算m Cn 的值(要求分别用递归和非递归的方法编写函数 fac)
  9. 多核机器上多线程内存敏感程序的可伸缩性
  10. Linux如何设置邮件消息大小,sendmail限制用户发送的邮件的大小