找回密码
 立即注册
查看: 601|回复: 0

[译文]Unreal Engine 4 渲染目标(Render Target)教程 之 使用渲染目标绘制(上)

[复制链接]
发表于 2021-4-14 14:27 | 显示全部楼层 |阅读模式
原文|《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




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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-26 03:38 , Processed in 0.089120 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表