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

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

[复制链接]
发表于 2021-4-16 09:10 | 显示全部楼层 |阅读模式
本文是《Unreal Engine 4 渲染目标(Render Target)教程之 使用渲染目标绘制》的下半部分,上半部分请见《Unreal Engine 4 渲染目标(Render Target)教程之 使用渲染目标绘制(上)》
作者|Tommy Tran Jun 18 2018  | 翻译 开发游戏的老王
用笔刷在渲染目标上绘制

创建新的函数并命名为DrawBrush。首先,为笔刷纹理、笔刷大小以及绘制位置设置参数:
    BrushTexture: 类型Texture 2DBrushSize: 类型floatDrawLocation: 类型Vector 2D




在用笔刷绘制之前,实现如下连接,一定把Parameter Name设为BrushTexture


接下来,创建如下高亮节点,就可以在渲染目标上绘制了:


Begin Draw Canvas to Render Target节点会告知引擎我们要在某个渲染目标上开始绘制了。 Draw Material允许我们以指定的位置、大小和旋转来绘制材质。
计算绘制的位置需要两个步骤。首先,我们需要缩放DrawLocation来适应渲染目标的分辨率。将DrawLocation乘以Size就可以了:




默认情况下,引擎以左上角为原点绘制材质,这使得笔刷纹理就不在目标位置的中央了。所以,我们得把BrushSize除以2,然后从先前的步骤中减去这个结果:


接下来,完成如下链接:


最后,我们得告诉引擎什么时候结束绘制。按如下连接添加End Draw Canvas to Render Target 节点:


这样,只要调用DrawBrush,它就会先为BrushMaterial 设定指定的纹理,然后将BrushMaterial按指定的位置和大小绘制到RenderTarget上。
以上就是绘制函数。点击编译然后关闭BP_Canvas。下面就该实现从摄像机发出射线,并且当射线和平面发生碰撞就绘制的功能了。
摄像机射线检测

绘制到画布之前,我们要先指定笔刷纹理和大小。在Blueprints文件夹中打开BP_Player。然后将BrushTexture设为T_Brush_01并将BrushSize设为500。本例中笔刷纹理被设为猴子图片,大小为500×500像素。




接下来,进行射线检测。定位到InputAxis Paint节点并创建如下连接:


于是,只要玩家按下Paint事件的绑定按键(本例中为鼠标左键),射线就会沿摄像机的前方向检测了。
接下来我们要检查射线是否碰到了画布。添加如下节点:


这样,如果射线碰到了画布,DrawBrush函数就会以给定的笔刷参数和UV坐标执行。
想让Find Collision UV正常工作,我们得做两个设置。在LineTraceByChannel节点上开启Trace Complex


接下来Edit\Project SettingsEngine\Physics开启Support UV From Hit Results,然后重启项目。




重启完毕,点击Play然后按住左键就开始绘制了。




我们甚至可以创建多个画布并且分别绘制。因为每个画布都可以动态为自己创建渲染目标。




在下面的章节,我们将实现让玩家修改笔刷大小得功能。
修改笔刷大小

打开BP_Player定位到InputAxis ChangeBrushSize节点。这个轴事件(Axis)被绑定到了鼠标滚轮上。要修改笔刷大小,只需要让BrushSize的值依赖Axis Value就可以了。如下图创建连接:


每次玩家使用鼠标滚轮BrushSize都会增加或减少。上图的乘法节点会决定加/减的速度。为了安全度量,我们使用了一个Clamp (float) 来确保笔刷大小在0到1000之间。
点击编译并回到主编辑器。使用鼠标滚轮调整一下笔刷大小。




最后的章节,我们将实现玩家修改笔刷纹理的功能。
修改笔刷纹理

首先,我们需要一个数组来存储玩家可选的纹理列表。打开BP_Player然后创建一个array变量,将其类型设为Texture 2D并命名为Textures




Textures中添加3个元素。并分别设置为:
    T_Brush_01T_Brush_02T_Brush_03


这几个都是玩家可选的纹理,想要更多的纹理只需要把它们添加到数组就可以了。
接下来,我们需要一个变量来存储数组索引。创建一个整型变量并命名为CurrentTextureIndex




接下来,我们需要一种循环选择纹理的方法。本教程中,我们在输入设置中将右键点击设为NextTexture。玩家按下这个按键,就会切换到下一个纹理。定位到InputAction NextTexture节点创建如下连接:




这样每次点击右键CurrentTextureIndex 都会加1.如果索引到头了,就会被重置为0.最终BrushTexture会被设置为对应的纹理。
点击编译并关闭BP_Player。点击Play并按下鼠标右键就可以循环选择纹理了。


本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2024-11-15 04:28 , Processed in 0.092937 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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