原文|《Unreal Engine 4 Tutorial: Painting With Render Targets》
作者|Tommy Tran Jun 18 2018 | 翻译 开发游戏的老王
阅读时长|15分钟 内容难度|入门级
本教程将介绍如何使用材质和渲染目标(Render Target)在模型上进行多样的绘制

文章目录

  • 开始吧
  • 绘制方法
  • 创建画布材质
  • 创建渲染目标
  • 显示渲染目标
  • 创建笔刷材质

简单来讲,渲染目标(Render Target)就是一种可以在运行时写入的纹理。从引擎的角度讲,渲染目标会存储颜色、法线以及AO等信息。

从用户的角度讲,渲染目标可以视为第二个摄像机。我们可以让一个scene capture组件指向某处,并将图像存储到一个渲染目标上。然后让渲染目标显示在模型上。我们可以用这个技术实现类似监控摄像机的效果。

在4.13版本以后,UE4允许用户通过蓝图直接在渲染目标上绘制材质。这个机制可以实现诸如流体模拟和雪痕等很多高级特效。听起来很刺激,是吧?然而在实现高级效果之前,最好还是先从简单的入手。

本教程中吗,我们将介绍:

  • 使用蓝图动态创建渲染目标
  • 将渲染目标显示到网格上
  • 在渲染目标上绘制纹理
  • 游戏中改变笔刷大小和纹理

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

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

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

开始吧

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

下载并解压范例工程,找到CanvasPainterStarter文件夹,打开CanvasPainter.uproject。点击Play,你将会看到如下画面:

中间的方块(画布)就是我们要花花的地方。左边的UI就是绘制的材质。

接下来,咱们一起了解一下绘制原理。

绘制方法

首先,我们需要一个渲染目标作为画布。为了找到绘制渲染目标的位置,需要先沿着摄像机的前方朝向进行一下射线检测。如果射线碰到了画布,那么我们就可以获得撞击位置的UV坐标。

例如,假设画布的UV映射非常完美,那么射线撞击到其中心点将返回 (0.5, 0.5);如果撞击到其右下角将返回**(1, 1)**。使用简单的数学计算就可以通过撞击位置计算出UV坐标。

为什么使用UV坐标?为什么不使用实际的世界坐标?如果使用世界坐标,我们得先计算出撞击点和画布平面的相对位置,还得考虑画布平面旋转和缩放。

使用UV坐标,就无须这些计算了。在一个UV完美映射的平面,无论如何旋转缩放,其中心点的位置永远是 (0.5, 0.5)

注:本篇教程中的方法一般仅用于平面或者类平面的表面。其它类型的几何体,将会使用一种更加高级的方法,我们将会在以后的教程中介绍它。

接下来,我们要创建显示渲染目标的材质。

创建画布材质

找到Materials文件夹,打开M_Canvas

本教程中,我们会使用蓝图动态创建渲染目标。这就意味着,我们得设置一个纹理作为参数,并将它传给渲染目标。那么,创建一个TextureSampleParameter2D并命名为RenderTarget,然后将它连接到BaseColor

别着急设定纹理,因为我们会在蓝图中做这事。点击应用,然后关闭M_Canvas

下一步就是创建渲染目标,并在画布材质中使用它。

创建渲染目标

创建渲染目标的方法有两种。第一种是在编辑器中通过Add New\Materials & Textures\Render Target。这种方法允许我们在不同的actor之间引用相同的渲染目标。然而,如果有多个画布,我们就得为每个画布手动创建渲染目标了。

更好的办法就是使用蓝图创建渲染目标。优点就是需要的时候就创建并且不会增加你的项目文件。

来,我们创建一个渲染目标并将其保存起来备用。在Blueprints文件夹中,打开BP_Canvas。在Event BeginPlay上添加如下高亮的节点:

WidthHeight 都设为1024。这样渲染目标的分辨率就是1024×1024。更高的值能够提升画质,同时也会消耗更多的显存。

接下来是Clear Render Target 2D节点,我们用它来设置渲染目标的颜色。将Clear Color设为 (0.07, 0.13, 0.06)。这样整个渲染目标会呈现绿了吧唧的颜色。

下面,我们让渲染目标显示到画布网格(canvas mesh)上。

显示渲染目标

当前,画布网格使用的是默认材质。要显示渲染目标,我们得创建M_Canvas的动态实例(dynamic instance)并使其支持渲染目标。然后,再把动态材质应用到画布网格上。按下图高亮所示连接节点:

Create Dynamic Material Instance节点的Parent设为M_Canvas。这样就为M_Canvas创建了动态实例。

然后将Set Texture Parameter Value节点的Parameter Name设为RenderTarget。这样就把渲染目标传递给了刚才我们创建的纹理参数。

这时画布网格就会显示渲染目标了。点击编译并回到主编辑器,点击Play查看画布颜色变化。

现在画布有了,我们得创建一个材质当笔刷。

创建笔刷材质

Materials文件夹中创建一个材质并命名为M_Brush。打开它,将Blend Mode 设为 Translucent。这样我们就可以使用带透明通道的纹理了。

和画布材质一样,我们也得在蓝图中为笔刷设置纹理。创建TextureSampleParameter2D并命名为BrushTexture。如下图连接节点:

点击应用,并关闭M_Brush

接下来,创建笔刷材质的动态实例,这样就可以更改笔刷纹理了。打开BP_Canvas然后添加高亮节点。


Create Dynamic Material Instance节点的Parent设为M_Brush

笔刷材质搞定以后,我们需要实现将笔刷画到渲染目标上的函数。

Unreal Engine 4 渲染目标(Render Target)教程之 使用渲染目标绘制(上)相关推荐

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

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

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

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

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

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

  4. pyecharts源码解读(10)渲染包render之templates目录:渲染模板

    当前pyecharts版本为1.9.0 概述 render包结构 render包位于pyecharts包顶级目录中,用于渲染图表.render包结构如下: ├─render # 渲染设置包 │ │ d ...

  5. 深度学习和目标检测系列教程 19-300:关于目标检测AP、IoU和mAP简介

    @Author:Runsen R-CNN 和YOLO等对象检测模型,使用了平均精度 (mAP).mAP 将真实边界框与检测到的框进行比较并返回分数.分数越高,模型的检测就越准确. Precision ...

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

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

  7. UNREAL ENGINE 4.13 正式发布!

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

  8. keyshot渲染图文教程_KeyShot渲染教程,KeyShot渲染基础教程步骤图文详解

    KeyShot渲染教程,KeyShot渲染基础教程步骤图文详解 KeyShot渲染教程,在我们导入了项目之后,接着我们就要输出图片或者动画了.这里有许多动态的方式来完成,在开始渲染之前,我们来设置我们 ...

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

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

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

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

最新文章

  1. 基于OHCI的USB主机 —— 结束语
  2. give root password for maintenance 启动异常的解决
  3. Asp.Net中MVC缓存详解
  4. 操作系统第二章作业(2020@usc)
  5. Content Aware ABR技术
  6. kafka使用_kafka使用Interceptors实现消息端到端跟踪
  7. Linux网络编程——黑马程序员笔记
  8. 如何将h5网页改成微信网页
  9. [html] HTML为什么要语义化?语义化有什么好处?
  10. ASP.NET MVC5 与EF6学习系列
  11. 表单提交Post方法、Get方法
  12. 蓝桥杯评分标准_新闻 | 人工智能学院创新创业实践中心开展蓝桥杯国赛经验分享会...
  13. python gridview_Python笔记
  14. 教你如何在STM32中使用DSP指令
  15. 尝试Python的websockets库的最基础功能
  16. 【UI】关于如何画设计稿(基础篇)
  17. 尚学堂视频笔记五:IO流
  18. “应用程序配置不正确,程序无法启动”的解决方法资料收集
  19. linux+pid的管理,Linux 进程管理
  20. 投中5G+IoT时代的操作系统,TCL凭什么?

热门文章

  1. SpringBoot项目配置明文密码泄露问题的处理方式
  2. Redis的安装及其使用
  3. 项目管理团队协作工具
  4. excel图表美化:堆栈式柱状图让趋势变化更明显
  5. NR-LDPC码知识
  6. Oracle EBS 术语解释-中文版
  7. OMS系统是什么?主要功能和优势有哪些?
  8. Windows制作U盘在Thinkpad T60上安装Debian 7 (Wheezy)
  9. 程序员的乐趣,那些可爱的 Linux 命令
  10. HyperSnap 7进行网页截图