前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >UE4流动的箭头曲线实现原理

UE4流动的箭头曲线实现原理

原创
作者头像
Jean
发布于 2021-10-27 07:40:24
发布于 2021-10-27 07:40:24
3.7K0
举报
文章被收录于专栏:Web行业观察Web行业观察

作者:旺仔好喝

如何能制作出流动的箭头曲线

为什么要做这个箭头

当我们需要表达一个路径的时候,使用路径箭头的方式可以进行一个很好的表达。我们制作一个静态的路径箭头是很容易的,但是我们怎么能做一个流动的箭头路径呢?这里面需要解决的问题:怎么制作出可以动态调整路径的曲线?怎么解决路径上的箭头会受到拉伸、平面中断影响导致箭头不连续的问题?

解决思路

一、可以动态调整路径的曲线

1.创建曲线平面

一般情况下一个平面只有一个四边面如下图:

利用UE4中的SplineMeshActor可以把模型进行弯曲处理,如右图:一个普通平面是不能绘制成曲线的平面。

原因是一个面只有1一个四边面不能做出弯曲的效果。

我们需要对此进行改进。改进的方法是将平面的面数进行提升。如下图:

同上方法使用SplineMeshActor对模型进行弯曲,可以看到很好的利用一个矩形绘制出了一个曲线的效果。而且该组件还能支持Runtime下对Actor的点位进行编辑而达到修改弯曲程度的功能。

2.根据样条线创建曲线平面

首先我们来认识一下样条线,蓝图样条组件只是用于定义和使用位置数据的一个路径。可使用它在世界场景中移动 Actors(或其他 组件),或沿样条放置一系列的 Actors(或其他 组件)。它们可在蓝图视口和关卡编辑器中进行完整编辑,并能添加/移除/复制样条点,变更其切线类型、甚至按 tick 对其设置动画。此外,使用 蓝图构造脚本 也可对它们进行编辑,接受蓝图视口或关卡编辑器中进行的编辑并对它们进行进一步修改。

样条线是一个两点一线的组件,并且可以根据需要增加多个点。如下图:

根据样条线生成曲线平面

一个样条线假设有N条线段,根据N条线段创建N个SplineMeshActor。每个SplineMeshActor的起点都放在这根线段的起点、终点放在这根线段的终点,而且配置对应的旋转。从而达到如下效果:

二、流动的箭头材质

  1. 制作一个静态箭头,中间为箭头、边缘为透明,准备PNG格式的图片、将箭头外部的Alpha通道给予到透明层
  2. 默认的纹理UV分布是[0,0]~[1,1],使用Panner节点给予纹理UV时刻向右移动达到箭头流动效果
  3. 纹理分布不均的解决,如图可以看到在短的线段上纹理被压缩了,在长的线段上纹理被拉伸了。需要在SplineMeshActor中进行解决。

3.1网格被压缩

假设SplineMeshActor两端的切线为长度为200,SplineMeshActor分别在100、200、600长度下的面片分布情况,如下图:

由上图可知,当SplineMeshActor的长度比起点和终点的切线短时,模型网格中间比两端压缩严重;当SplineMeshActor的长度与起点和终点的切线相当时,模型网格比较一致不压缩;当SplineMeshActor的长度比起点和终点的切线长时,模型网格两端比中间压缩严重。

距离端点越远的地方,面片被缩放的程度越严重。

修改SplineMeshActor起点和终点的切线与线段长度保持一致,保证纹理头尾不被压缩

3.2.纹理被压缩

修改切线后,面片分布均匀,但是纹理还是进行了压缩,是因为纹理还是按照0~1进行分布,对UV进行缩放处理后即可解决。

假设设定箭头的长度为100为单位,当SplineMeshActor长度为50时,UV缩放为2倍;当SplineMeshActor长度为100时,UV设定为1倍;当SplineMeshActor长度为200时,UV缩放为0.5倍,得到如下结果:网格与纹理均匀分布

4.线段间首尾不连贯

将纹理均匀的材质赋予SplineActorMesh后,会发现线段间箭头首尾不连贯。

出现这个问题的原因:每一段样条线的起点都是以为自己的起点开始计算,导致每一段箭头起点处都是蓝色或者浅蓝色。既然已经知道了问题,下一步就是解决问题,我们需要对每一段箭头的起点UV进行偏移,偏移距离是当前线段的起点在整段线段的位置,假设第2段箭头的起点(也就是第2个点)距离起点216单位,再假设我们要做到视觉上箭头长度以100为单位,可以算出第2个点的UV需要向反方向偏移16单位。同理后面的每一段箭头UV都进行偏移达到以下效果。

用途

流动的箭头曲线可根据业务需求表达行动轨迹、维养路线、救援车路径、迁徙路径、逃生路线展示等。

参考:https://docs.unrealengine.com/4.27/zh-CN/BuildingWorlds/BlueprintSplines/Overview/

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
跟牛老师一起学WEBGIS——GIS基础(空间数据)
空间数据模型可以分为三种: 场模型:用于描述空间中连续分布的现象; 要素模型:用于描述各种空间地物; 网络模型:可以模拟现实世界中的各种网络;
牛老师讲GIS
2020/08/10
1.5K0
【笔记】《游戏编程算法与技巧》7-12
本篇是看完《游戏编程算法与技巧》后做的笔记的下半部分. 这本书可以看作是《游戏引擎架构》的入门版, 主要介绍了游戏相关的常见算法和一些基础知识, 很多知识点都在面试中会遇到, 值得一读.
ZifengHuang
2022/08/30
2.2K0
【GAMES101】Lecture 11 贝塞尔曲线
很早之前说过的这种矢量图是不会随着放大而失真的,像这种字体,就是用了逐段的三次贝塞尔曲线实现的
叶茂林
2024/01/29
2180
【GAMES101】Lecture 11 贝塞尔曲线
进阶渲染系列(七)——三向贴图(任意表面纹理化)【进阶篇完结】
执行纹理映射的通常方法是使用网格中每个顶点存储的UV坐标。但这不是唯一的方法。有时,没有可用的UV坐标。例如,当使用任意形状的过程几何时。在运行时创建地形或洞穴系统时,通常无法为适当的纹理展开生成UV坐标。在这些情况下,我们必须使用另一种方式将纹理映射到我们的表面上。其中一种方法是三向贴图。
放牛的星星
2020/07/13
2.6K0
基础渲染系列(六)——凹凸
(温馨提示:本系列知识是循序渐进的,推荐第一次阅读的同学从第一章看起,链接在文章底部)
放牛的星星
2020/07/10
4K0
基础渲染系列(六)——凹凸
UE4 微笔记 之 HitResult
FHitResult 结构对应于蓝图中有一个 Break Hit Result 节点,我们可以参照该节点来了解 FHitResult 中各个成员数据(为了便于理解,下面记录的成员数据顺序有所调整):
用户2615200
2021/09/10
3.5K0
CINEMA 4D Studio R2023.1.3(c4d超强三维动画设计)
CINEMA 4D Studio2023是Mac上知名的3D动画设计制作软件,包含 GPU 渲染器 Prorender、生产级实时视窗着色、超强破碎、场景重建等诸多新功能,C4D mac为用户提供高端的3D内容创建,非常适合专业的设计认识,软件拥有最全面的工具和超级快速的速度,让你分分钟得到惊人的结果。
用户10121095
2023/03/07
1.7K0
个人塔防游戏Demo开发思路(UE4)
游戏为本人毕业设计,功能实现较为简陋,这里只是简要描述下开发思路,不包含深入的Gameplay框架分析,项目可无缝升级至UE4.26,素材全部来源于虚幻商城与互联网。完整项目下载,提取码:demo 游戏主体逻辑采用蓝图系统实现,支持多平台运行,包含存档功能,进入游戏后玩家可以在预先设置好的摆放位置购买和升级防御塔。游戏共有5波敌人,包括最终的BOSS关卡。在击败BOSS通关后即可进入无尽模式,此时游戏难度会不断提高,直到游戏结束。
LonelyEnderman
2023/08/09
1.2K0
个人塔防游戏Demo开发思路(UE4)
Unity 水、流体、波纹基础系列(二)——方向流体(Directional Flow)
这是流体材质的第二篇,继上一篇纹理变形之后,讲述如何对齐流体而不再是将它们进行扭曲。
放牛的星星
2020/08/28
4.7K0
基础渲染系列(二十)——视差(基础篇完结)
这是有关渲染的系列教程的第20部分。上一部分介绍了GPU实例化。在这一部分中,我们将添加到目前为止尚不支持的标准着色器的最后一部分,即视差贴图。
放牛的星星
2020/07/10
3.4K0
基础渲染系列(二十)——视差(基础篇完结)
自动驾驶运动规划-Dubins曲线
如下图所示,Simple Car模型是一个表达车辆运动的简易模型。Simple Car模型将车辆看做平面上的刚体运动,刚体的原点位于车辆后轮的中心;x轴沿着车辆主轴方向,与车辆运动方向相同;车辆在任意一个时刻的姿态可以表述为(x, y, )。车辆的运动速度为s;方向盘的转角为 ,它与前轮的转角相同;前轮和后轮中心的距离为L;如果方向角的转角固定,车辆会在原地转圈,转圈的半径为 。
YoungTimes
2022/04/28
1.1K0
自动驾驶运动规划-Dubins曲线
Unity Mesh基础系列(一)生成网格(程序生成)
本教程假设你已经熟悉Unity Scripting的基本知识了。如果不清楚的可以看 时钟 的章节学习Unity的基础知识。而 构建分形 的章节里也提供了协程的基本介绍。
放牛的星星
2020/08/21
10.8K0
Unity Mesh基础系列(一)生成网格(程序生成)
【图形学】贝塞尔与B样条曲线曲面笔记
这篇文章是看中国农大的图形学公开课的笔记, 简单介绍了贝塞尔Bezier曲线曲面和B样条B-Spline曲线曲面, 希望能够带来一个大概视角和总览. 本文同步存于我的Github仓库, 字数长度3.2k(https://github.com/ZFhuang/Study-Notes/tree/main/Content/%E4%B8%93%E9%A1%B9%E7%AC%94%E8%AE%B0/%E6%A0%B7%E6%9D%A1%E6%9B%B2%E7%BA%BF%E6%9B%B2%E9%9D%A2).
ZifengHuang
2021/03/07
5.3K0
Unity通用渲染管线(URP)系列(八)——复杂的贴图(Masks, Details, and Normals)
这是有关创建自定义可编程渲染管道的系列教程的第八部分。通过增加对遮罩,细节和法线贴图的支持,可以创建复杂的表面。
放牛的星星
2020/12/24
4.6K0
如何在WPF绘图中(通过贝塞尔曲线)绘制平滑曲线
GDI图形系统已经形成了很多年。它提供了2D图形和文本功能,以及受限的图像处理功能,在传统的Windows Form 编程中,我们经常使用Graphics图形对象的DrawCurve方法绘制平滑的曲线。
程序你好
2020/11/19
3.2K0
如何在WPF绘图中(通过贝塞尔曲线)绘制平滑曲线
【笔记】《计算机图形学》(11)——纹理映射
这系列的笔记来自著名的图形学虎书《Fundamentals of Computer Graphics》,这里我为了保证与最新的技术接轨看的是英文第五版,而没有选择第二版的中文翻译版本。不过在记笔记时多少也会参考一下中文版本
ZifengHuang
2020/12/08
4.6K0
图形编辑器开发:钢笔工具功能说明书
只有理解了需求,尤其是复杂的需求,才能更好地进行功能开发,写出诗一样的高鲁棒性代码。
前端西瓜哥
2024/01/26
3250
图形编辑器开发:钢笔工具功能说明书
基于UE4/Unity绘制地图基础元素-线(上篇)
这篇文章是使用游戏引擎探索地图可视化的开篇。传统的地图渲染通常是在iOS/Android/Web平台进行的,为了探究更酷炫的地图展示,会记录基于UE4/Unity进行地图渲染的探索过程。
腾讯位置服务
2020/10/23
1.2K0
MLINE-VINS:基于光流曼哈顿与线特征的鲁棒单目视觉惯性SLAM
文章:MLINE-VINS: Robust Monocular Visual-Inertial SLAM With Flow Manhattan and Line Features
点云PCL博主
2025/03/19
1260
MLINE-VINS:基于光流曼哈顿与线特征的鲁棒单目视觉惯性SLAM
Unity 水、流体、波纹基础系列(一)——纹理变形(Texture Distortion )
如果液体不动时,在视觉上是无法与固体区分开的。你看的到底是水,果冻还是玻璃杯呢?水池是结冰的吗?但可以肯定的是,如果干扰它并观察它是否会变形,以及变形多少就可以区分。仅从创建上看起来像流体的材质是远远不够的,实际上它必须要能动起来。否则,它就是看起来像是水的玻璃雕塑或已经结冰的水。当然,这对于一张照片来说已经足够了,但对于电影或游戏来说远远足够。
放牛的星星
2020/08/28
4.6K0
推荐阅读
相关推荐
跟牛老师一起学WEBGIS——GIS基础(空间数据)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档