想用好虚幻4引擎做游戏,你需要避免这些扰人的坑(备忘)

2023-11-15

在手游品质越发上扬的如今,已经有不少厂商开始使用一些性能更好的引擎,去尝试游戏制作了。而虚幻4引擎(以下简称UE4)就是其中之一,在这款引擎中已经诞生了诸如《铁拳7》《地狱之刃》《帕拉贡》等一系列大作。对玩家而言,这些作品都是不折不扣的视觉盛宴。

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

日本网站4Gamer曾刊登一篇文章,分享了使用UE4在图像渲染中会遇到的难点以及解决方法,分享人是该引擎的开发商Epic Games日本分公司的高级工程师篠山範明。

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

在研讨会上,篠山首先展示了虚幻4的整体流程图,随后他对和流程图上各功能板块有关的技术进行了介绍。

绘制物体缓冲的“Base Pass”时要注意的问题

我们先来把整个流程分为不同的单元,在各个单元里进行深入解读。

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

首先从上图左起第二个板块“Base Pass”开始。Base Pass等同于产生了物体缓冲(G-Buffer)。

众所周知,UE4的绘制引擎采用了延迟渲染(Deferred Rendering)。所谓延迟渲染,是指将一个场景的几何体(3D模型、多边形)的光照、阴影、质感搁置到一旁,先着手于绘画,然后在后半段再对光照、阴影、质感进行处理的处理方式。

即给人一种把原本的多边形先绘制出来的印象,实际上不仅要绘制多边形,前者的参数还需要配合后面光照和阴影的处理。其输出目标,在成为复数缓冲时具有普遍性,但是这里的缓冲我们称之为“物理缓冲”。

为何要做这么麻烦的事情?其实延迟渲染有两个优点。第一个优点就是能将十分复杂的光照、阴影以每次一像素的方式进行处理。第二个优点是并不明确限定用于光照的动态光源数,所以可以进行丰富的光照渲染。

现代游戏图像在绘制复杂的场景时需要大多的光源,而在移动复杂着色器的时候,最终其结果不是在画面上输出,而是通过像素着色器,处理像素的编写和撤销,导致耗时严重、性能下降。为了全力回避这一点而开发出的就是延迟渲染。

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

物体缓冲是指使用后照明和后处理特效的中间过渡环节

根据以上提到的这些,使用Base Pass输出物体缓冲需要注意的两点。

第一点简而言之即“不绘制没进入视线的对象”。

这种“投影剔除”(Frustum Culling),一般是通过CPU端来处理;为了整体覆盖被称为“包围球”(Bounding sphere)的各个3D对象,对象是否在视野内的判定标准,是通过预先设定的包围球来实行的。

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

举一个包围球被错误(或是正确)设定的案子。这种情况下如果绘制没有被正确地剔除,会导致最终明明没有绘制,但作为GPU的绘制对象却投入了渲染管道(rendering pipeline),造成GPU产生多余的负担。

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

什么程度的剔除会成功,可以通过Stat初始视图(Stat InitViews)指令的“视锥体裁剪基元(Frustum Culled Primitives)”进行确认。

另外,实行强制冻结渲染(FreezeRendering)指令后移动镜头,就能够确认视野外绘制了什么。如果那个时点上,视野外本应剔除的3D对象被描绘了出来,就会显示出不能被剔除的理由。在这种情况下需要特别注意确认包围球的设置。

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

强制冻结渲染能够看到此时点摄像机提出的结果

Base Pass要注意的第二点,是“不计算多余的像素”。

在图像处理的流程中,使用像素着色器实际处理前,会有运行深度测试(Z 测试)的“Pre Z 测试”这一步骤。从这里着手处理的像素,会因为被某个东西所遮挡而无法绘制出来,这时可以进行撤销处理。

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

但是,像半透明对象这种会伴随α测试的绘制、视差遮蔽映射这种像素着色器处理后会重新编写深度值的情况,就不进行Pre Z测试,而通过处理实行分路迂回。

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

运行α测试的隐藏(Masked)材料

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

像素深度撤销(Pixel Depth Offset)可以变更像素深度(Pixel Depth)

但是,就算是不透明的对象,设定回避Pre Z测试之后,便无法撤销本来能够撤销的Pre Z 测试。这种情况是因为虽然用了像素着色器处理,但是(之后的)Z测试失败,这一操作被撤销了,虽然绘制结果没有变得奇怪,不过性能会跌落到最坏结果。

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

Z值的预阶段“Z预阶段”的注意点

下一个主题是“Z预阶段(Z Pre Pass) ”。UE4的渲染管道,是在Bass Pass的物体缓冲写出来之前,在仅预处理深度值(Z值)之后,运行Z预阶段。

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

事先预处理深度值的目的,是将最终影像和同一深度缓冲的内容结果,在透视前获得。Z预阶段之后的Base Pass则是,参考预先得出的深度值缓冲进行Z预测试,因此通过在最终的画面里不留下像素痕迹(即编写后又被消去的像素),以回避像素着色器的运行。

虚幻4只将背景对象这种静态对象计入Z预阶段,而动态对象则不计入Z预阶段,以上设定为默认设定。但是虚幻4可以按照客户要求来设定项目文件“早Z阶段(Early Z-pass)”和“动态早Z阶段(Movables in early Z-pass)”。

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

或者通过勾选“作为遮光板使用(Use as Occluder)”可以设定各对象单位是否计入到Z预阶段之中。

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

各项目的关闭渲染选项里面,有“作为遮光板使用”这一项目。在设定为默认为ON时,勾选为off,就能够调整各项目单位是否参与早Z

通常默认设定应该就可以了,但是在多边形数很多的场景中,Z预阶段的运行本身会对GPU造成很大负担,所以这种场景下,上面提到的两个设定,通过选择on/off来比较性能可能会比较好。

光照的前段处理“预照明”需要注意的点

虚幻4中通过血溅和弹痕这种投射材质贴图来实行的印花式绘制,是在光照(Lighting)之前,即通过“预照明(Pre-Lighting)”部分来处理并设计的。对于后段的光照处理,可以将印花式绘制囊括在光照对象里。

和印花绘制相同,“从所有方向插入有关假想环境光的遮蔽率”(Ambient Occlusion,环境光遮蔽)的处理,也能通过预照明来完成。

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

与这种预光照绘制相关的麻烦已经成了常见问题,比如“印花被描绘得照明颜色过深”、“设置天窗后,印花下面变透明了”等等。

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

从结论来说,这是“虚幻4的做法”,当然《虚幻4》也提供了回避此类问题的对策。那就是“延迟贴花(DBuffer Decals)”功能。

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

所谓延迟贴花(或称Deferred Decal),是指和将印花进行物体缓冲不同,而是使用被称作“延迟贴花”这一印花专用特殊缓冲来进行绘制,用物体缓冲进行光照和阴影处理之后,延迟贴花的内容也反映并实行了出来。印花的绘画结果统合到了物体缓冲之中后,也因此出现了上文提到的问题。为了回避这个问题,要准备专用的缓冲。

但是,加上利用物体缓冲这一条件,绘制比之前的处理线程更多,绘制负担变高也成为其瓶颈。

虽然导致负担变高了,但是应该实行印花表现而导入物体缓冲吗?还是说应该选择别的表现方式来回避延迟贴花,这需要开发者好好考虑后再做决定。

通过光源周围的处理而改变性能的“照明”阶段

接下来,篠山说明的是光照的阶段。虚幻4的光照分为“静态光照(Static)”、“固定光源(Stationary)”、“动态光照(Movable)”三种光照范畴。

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

最先提到的静态光照,为通过全部事先计算过的光线映射来处理的静态光照。这一事先计算,可以使用专用的光照烘培,来计算将间接光都考虑在内的光照。

其次是固定光源,固定光源的光照本身是以实际时间来运行的,但是只有阴影计算是事先进行了处理的。

具体而言,固定光源在UE4的图像引擎内部会被当作一般的动态光源,但配置到场景里又成了基本不动的光源。因为它不动,所以也可以在阴影贴图中用于预先生成阴影。

虽然有点复杂,但这种做法有个好处,就是配置的固定光源一组最多可以放置4个,其内部处理是稍有限制。

固定光源预生成的阴影贴图中,一个光源能够分别对应αRGB中4条通道的像素格式。也就是说,第一个光源对应α通道,第二个光源对应R通道,以此类推。所以在αRGB中最多对应四个光源,一组光源的上限也就是四个。

如果设置第五个固定光源,那么它将被当作动态光源来处理,即便是定义为固定光源,也不会提升其性能。

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

固定光源在一张阴影贴图上最多设置4个,超过第五个将被视作动态光源

而动态光源如前文所述,包括阴影生成在内,它将完全在运行时进行处理。

我们之前说过延迟渲染下动态光源的数量不受限制,再来看它实际的性能。

设置两组对比场景,一是将100个照射范围狭小的动态光源放置到同一场景内,二是将8个照射范围较大的光源放置到同一场景内,对比两者的负荷大小。

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

得出的结果是后者的负荷更高。这里的负载大也可以看作是计算量大。而计算量的大小,取决于场景内各个像素受到多少个光源的照射。所以比起处理八个像素各自被一个光源照射,处理一个像素被八个光源照射的负荷要更高。

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

负荷率大小:蓝>绿>红

UE4可以通过光效复杂性(Light Complexity)功能来查看光源的处理负荷,所以在设计的时候,可以不依赖延迟渲染的特性,而通过精确计算光源负荷来构建场景。

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

通过光效复杂性功能,就可以查看已设置的光源的负荷率

光照反射存在最优解吗?

不仅限于UE4,在所有即时游戏的美术中,需要不少设计技巧的就是光照反射(Reflection)。

如果反射的材料是镜面反射更强的金属类,那么周围的场景就应该被映入其中,如果以材料的角度来看,就相当于受到了周围所有光源的照射。光照反射要应对的就是周围所有的光源,所以它是在表现材料材质的时候,关于真实程度的关键要素。

在UE4当中,有三种反射生成方法来处理会引起镜像、映照等情况的材料,如下图所示。

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

第一种是采用反射探头来生成静态反射。

在场景的任意位置都可以预先设置坐标,然后可以进行全方位的透视,最后会生成立方环境贴图(CubeMap)材质。而这里的预生成坐标点,被称作反射探头(Reflection Probe)。

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

静态反射就好比是反射探头处拍下的360°照片

关键的问题在于:在反射探头处获得的全方位场景,应该影响到场景内多大的范围。

依然采用对比分析,首先在一个场景里配置一个静态反射,将其设置为影响整个场景;再配置200个静态反射,设定为只能影响非常狭小的范围,可以看到两者的绘制负荷差距不大。

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

但是在设置了200个静态反射的例子中,如果将各自的影响范围调大,符合就会急速增大。

其原因与动态光源的例子相同。如果将多个静态光源的影响范围扩大,那么在绘制一个像素的时候,就必须参考计算多个静态光源的参数,负荷自然就增大了。

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

稍微调大200个静态反射的影响范围,负荷就立刻增大

其实,已经配置了相邻的反射探头时,再将两者的影响范围重叠的意义并不大。反射探头的设置以及其影响范围的设定如果不合情合理,那么就会增加很多无效的计算负荷。

如下图实例的配置就更为合理:

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

红圈:让整个场景都处于光照反射的影响范围内。

覆盖各个房间的蓝圈:主要的静态反射,在这里可以定义大致的统筹性参数。

绘制物件细节的绿圈:仅配置在能产生光照反射的特殊物件上。

第二种是屏幕空间反射(Screen Space Reflection,简称SSR)。

屏幕空间反射会根据透视图的结果,在画面坐标系中进行局部的光线跟踪,在运行时刻(Runtime)上实时生成计算结果。

这种处理方式的好处是,即便仅截取场景中任意一瞬间的画面,也会精确地反映出动态角色以及动态光源影响下的光照反射。相对的缺点,就是对于画面外场景的影响,会被完全无视掉。

使用SSR最典型的报错,就是暴露了这个缺点所造成的。弥补它的有效方法,就是结合静态反射来做处理。

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

如右图,岩壁左侧被画面隔断的地方,应该在水面中被反射,但是因为岩壁被隔断在画面之外,所以无法被正确反射

第三种是平面反射(Planar Reflection)。

这是将场景准确的映入平面的光照反射处理手段。如下图实例,以水平面为反射面,从视点E来看右侧的岸边,那么相当于在水下的视点E'来透视上下颠倒的岸边的场景。所以被反射的场景需要进行两次绘制,光照反射处理的负荷必然会高出不少。

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

又因为处理负荷比较高,所以平面反射常限定在水面等平面上使用,同时画面的品质非常高。由于这些特性,比较推荐在过场动画中使用平面反射的处理。比如《地狱之刃》在GDC 2016上放出的宣传片,其中就使用了平面反射的处理技术。

关于半透明的各种问题

不仅限于UE4,半透明物件的绘制在实时图形绘制领域都算是很难处理的问题。UE4在绘制半透明物件时也会遇到不少棘手的问题。

离我们最近的问题,可以说就是粒子效果,可能是因为日本的画师都特别喜欢粒子效果,所以对它比较关心吧。

UE4在绘制半透明粒子效果时,不会更新深度值(Depth)。

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

将特效配置在场景中

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

但深度值没有变化

这种情况下会产生的问题就是,将深度值设为关键值时,后期处理会变得很奇怪。

如下图所示,聚焦到中间的火焰时,利用景深来让图像增加朦胧感,但火焰的粒子效果在地平线上方的都被模糊了,下方则没有变模糊,这样的图像就非常奇怪。

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

这就是因为火焰的粒子效果没有深度值,所以Z缓存(Z buffer)里只存在地面的制图深度值。再加上地平线上的背景里镜头非常的遥远,所以背景和火焰都被判断为离镜头非常遥远,就被做了模糊处理。模糊处理器是无法判断有没有火焰粒子效果的,于是就成了这副样子。

为了解决这类问题,就要使用到独立透明度(Separate Translucency)功能。

使用时,半透明粒子效果在绘制时仍然不会更新深度值,但它被分离到别的缓存中,与景深等后期处理分开。

换句话说,就是将半透明物件与不透明物件的绘制分开,在后期处理时优先应用于不透明物件。

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

在通常的后期处理中,粒子效果的绘制与普通场景的绘制是在同一缓存里处理的

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

而利用独立透明度功能,就可以将粒子特效分离到另一个缓存里,并将其与后期处理分隔开

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

对比两种处理效果的区别

利用这个功能的确能够避免半透明粒子效果出现一些奇怪的模糊情况,但是却没法给它添加适当的模糊处理。所以即便能够避免问题,但解决不了实际的困难。

所以即便是UE4,也会存在很多限制,而引擎的开发方还在试图解决这些问题。

而在半透明绘制方面,还存在一个很棘手的问题,也就是绘制的负荷过高。首先可以思考一个问题:让画面整体的颜色都改变的后期处理,与近让画面一部分出现冒烟的粒子效果,哪边的处理负荷更高?

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

简单的看,可能因为画面整体的像素数很多,所以可能是前者更高,但其实答案恰恰相反。

乍一看,半透明粒子效果的烟雾仅占画面的一小部分,实际上它是经过多次重叠绘制而成的。查看粒子的驱动线的框架,原因就一目了然了。在画面的同一部分,烟雾的粒子改变大小并反复绘制了多次。

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

我们可以用着色复杂性(Shader Complexity)功能的排错视图,来查看。

在这个视图中,重复绘制的区域会用红色表示,可以借此判断产生问题的部分。越红则表示改区域中,粒子绘制的负荷越高,需要调整。

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

降低粒子绘制负荷最有效且最简单的手段,就是用独立透明度功能,将粒子绘制分离到别的缓存重,用低分辨率进行绘制。

可以将反复绘制、重合的半透明粒子用低分辨率绘制,再调整好合适的大小,与主透视图合成就可以了。如果将绘制半透明粒子的缓存降低为纵横各半的分辨率,那么简单算下来绘制负荷就能变为原先的1/4,要是再将其减半,就能变为1/16。

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

在低分辨率的缓存里绘制,然后扩大并合成,就意味着粒子的轮廓会变得更加模糊,而原本就是半透明的粒子即便更模糊一些,产生的影响也不会有多少。但分辨率调得过低,也会暴露出分辨率不高的问题,所以选择缓存分辨率的时候要相当慎重,与负荷变化放在一起寻找最佳的配置。

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

以上三张图就是在半透明物件的缓冲分辨率在100%、50%、10%的绘制状态下,绘制负荷的变化

粒子绘制的符合降低方法还有一种,就是在粒子动画中,完全透明区域更多的时候可以用到的粒子剪影(Particle CutOut)功能。

通常的粒子是由两个多边形构成的,而粒子剪影的原理,就是为了避开完全透明的区域,由多个多边形自动分割来进行绘制。

虽然这样一来多边形的数量会增加,但由于能够避免像素着色器的无意义运行,所以在大量的粒子进行绘制时,这或许会减轻负荷。

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

粒子剪影会自动分割多边形

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

利用着色复杂性功能的排错试图,可以看到左侧的四边形粒子,与右侧的多边形粒子,在绘制时产生的重复绘制区域更少

UE4中顺序被固定的后期处理

后期处理就好比相片修饰一样,需要对最后的绘制结果进行加工处理。

相片修饰通常是针对2D的照片,在3D游戏内的图像方面,由于需要利用透视图中附带的多种信息,对图像进行三维的加工,所以两者差距非常大。

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

不进行后期处理(左)与进行后期处理(右)的区别

UE4中预设了诸如色调、景深、光晕等加工图像的多种表现形式。

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

而UE4比较有特色的是,能够将后期处理的效果,设置到3D场景内的指定位置,或者是特定的摄像头上,所以能够实现诸如“进入3D场景某个位置的时候就会有景深的表现”,或是“在这个摄像头上绘制图像的时候需要棕色调”等效果处理。

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

所以在用UE4的后期处理时,建议最好熟记处理的顺序,因为处理顺序无法改变,只能按部就班地进行。

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑-触手游戏

结语

尽管文章到此结束了,但其实还有很多内容没有提到(几百页ppt),仅从提到的内容来看,也能发现,对于想要用UE4做好游戏的开发者来说,花时间打磨游戏的细节是必不可少的,而这份指南能切实的解决很多使用上的问题。

原文链接:http://game.sohu.com/20161115/n473280606.shtml

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

想用好虚幻4引擎做游戏,你需要避免这些扰人的坑(备忘) 的相关文章

  • 修改UE4缓存路径,免得太多占用c盘空间

    UE4系列文章目录 文章目录 UE4系列文章目录 前言 一 修改默认缓存路径 打开Epic Games 自定义缓存位置 前言 在安装好了UE4之后 UE4引擎会默认生成缓存路径 C Users ASUS AppData Local Unre
  • 用Java开发贪食蛇小游戏

    用Java开发贪食蛇小游戏 一 实验内容 1 实现贪吃蛇游戏基本功能 屏幕上随机出现一个 食物 称为豆子 上下左右控制 蛇 的移动 吃到 豆子 以后 蛇 的身体加长一点 得分增加 蛇 碰到边界或 蛇头与蛇身相撞 蛇死亡 游戏结束 为游戏设计
  • 【图形与渲染】相机平面镜反射与斜裁剪矩阵(下)-斜裁剪矩阵

    上一篇文章分析了平面镜反射效果实现中 如何计算镜像矩阵 我们已经可以得到镜像相机并渲染出镜像后的效果了 但是只是纯粹的镜像会遇到以下问题 如图 当相机镜像到C 位置后 其视锥体裁剪范围是A B 但实际应该位于反射贴图中的区域仅仅只有A区域
  • 【unity】【jit】【游戏开发】讲解ios系统不支持JIT的来龙去脉,以及unity在IOS上需要使用反射时候的替代方案

    标题有点长啊 很彪 所以我们叫彪题 咋地 东北地 你瞅啥 1 带有增高垫IL的c c 语言作为一种高级语言 是不能直接在我们的CPU上来直接运行的 需要编译成IL语言 Intermediate Language 即中间层语言 就是这么高冷
  • UE4:自定义Slate 点击保存 出现USlot ReleaseSlateResources() 异常

    Error AssetLog Test uasset Leak Detected CustomWidget 43 CustomWidget still has living Slate widgets it or the parent Ca
  • UE4 实现用鼠标旋转场景中的物体

    本文实现的是用在UE4 中用鼠标旋转场景中的物体 点击到物体时开始物体旋转功能 移动鼠标物体跟着旋转相应的角度 松开鼠标左键物体停止旋转 下面介绍实现此功能的蓝图逻辑 由于比较简单就不一一介绍了 直接贴上蓝图代码 如有问题欢迎交流
  • 【待续】【UE4笔记】 L10地形编辑器

    一 地形界面 包含了管理 雕刻和描画功能 1 创建新项 2 雕刻 改变地形高度 顶点位置 3 描画 分层地形材质 二 编辑样条 调节参数 添加材质 效果如下
  • UE4_积分相同排名显示问题

    找了一下ue4 rank 函数相关 没找到合适的 自己简单写了个 解决积分相同时名次要一样 之后顺位排序 中国式排名 蓝图实现 c 原理一样 1 2 3 4 5
  • UE4安卓打包配置(大陆内网络整顿后,Android打包时AndroidWorks无法使用的解决方法)

    由于国内进行了网络整顿 UE4官网上用CodeWorksforAndroid下载安卓打包工具配置的方法已经不能使用了 开了VPN也链接不上 这使得用UE4打包配置安卓游戏变得非常麻烦 博主捣鼓了好几天才打包成功 深感在中国学习UE4的艰难与
  • 【UE4】搭建局域网内VR直播 UE4.27

    前言 英伟达显卡 UE4 27的内网搭建360 相机直播 并在内网任意设备使用VR观看 理论上性能足够效果越好 此处使用的VR设备为Vive 梳理了整体构建流程 希望能帮到你 多图警告 图片教程比较直观 1 准备工作 下载UE和OBS所需安
  • unity中通过touch旋转、放大和缩小物体以及滑动方向的判断

    unity中通过touch旋转 放大和缩小物体以及滑动方向的判断这个需求在游戏开发中也是非常频繁 话不多说直接上代码 using System Collections using System Collections Generic usi
  • ue4_timeline时间轴

    1 给一个cube添加蓝图 需要修改的是z轴方向移动位置 将z轴传入时间轴 时间轴蓝图如下 z轴时间轴修改为 第一个节点 time 0 value 300 物体的z轴初始位置 第二个节点 time 1 value 600 z轴移动300个单
  • unity期末个人作品-落笔洞寻宝探险之旅(寻宝游戏)

    落笔洞寻宝探险之旅 unity寻宝游戏 下载链接在文章下方 为了增添生活的乐趣开发的这款落笔洞寻宝游戏 主要内容为人物在落笔山脉寻找金币 右上角有金币计数器 找到所有金币则获胜 山中有障碍物 触碰会掉血50 人物生命值为100 血量为0则游
  • 【Unity Shader】Shadow Caster、RenderType和_CameraDepthTexture

    当我们制作某些屏幕特效时 需要取到屏幕的深度图或法线图 比如ssao 景深等 另外像是制作软粒子shader 体积雾等也需要取到深度图 以计算深度差等 unity提供了两个内置的纹理 CameraDepthTexture和 CameraDe
  • Unreal Engine4蓝图编程学习(一)

    学习内容主要介绍了蓝图进行对象交互 升级玩家技能 升级AI敌人 跟踪游戏状态完成游戏体验等内容 内容来源于 Unreal Engine4蓝图可视化编程 书籍为2017年 与现在版本有一定区别 一 制作移动标靶 1 1 首先 我们想先创建一个
  • UE4 UE4 C++ Gameplay Abilities 的AttributeSet和GameplayEffect

    UE4 UE4 C Gameplay Abilities 的AttributeSet和GameplayEffect GAS参考文档 仅是个人理解 参考 AttributeSet是设置玩家属性的比如生命值 最大生命值 GameplayEffe
  • 游戏引擎:打造梦幻游戏世界的秘密武器

    介绍 游戏引擎是游戏开发中不可或缺的工具 它为开发者提供了构建游戏世界所需的各种功能和工具 本文将介绍游戏引擎的概念 使用方法以及一个完整的游戏项目示例 游戏引擎的概念 游戏引擎是一种软件框架 它提供了游戏开发所需的各种功能和工具 包括图形
  • 【UGUI】2D头顶血条制作

    前言 近期因为需要制作玩家和敌人头顶的2D血条 查找了很多博客 发现很多都拘束于Canvas的渲染模式必须要设定为ScreenSpace Overlay 还有应该是版本原因 我的是unity2019 1 11f1 用RecttTransfo
  • mac下搭建cocos2d-x3.2开发环境

    1 软件 Xcode Ant apache ant 1 9 4 bin tar gz Jdk jdk 8u45 macosx x64 dmg 有的mac系统上没有自带 Ndk android ndk r10d darwin x86 64 b
  • 微信游戏如何开发

    中懿游游戏软件开发 微信游戏开发通常涉及使用微信小游戏平台进行开发 微信小游戏是一种在微信平台上运行的轻量级游戏 用户可以在微信中直接体验 无需下载安装 以下是在微信平台上开发小游戏的一般步骤 1 注册微信开发者账号 访问 微信开放平台 注

随机推荐

  • 12.荔枝派 zero(全志V3S)-使用新版本的buildroot

    上面是我的微信和QQ群 欢迎新朋友的加入 1 下载新版buildroot 我下载了19年2月份发布的buildroot 2 文件系统配置 make menuconfig 设置target option 设置编译链 其中Toolchain p
  • nginx实现动静分离

    nginx实现动静分离 1 什么是动静分离 2 nginx反向代理与负载均衡 3 nginx实现负载均衡 4 nginx实现动静分离 1 什么是动静分离 动静分离主要是通过nginx PHP FPM来实现 其中nginx处理图片 html等
  • 89C51七段数码管显示“12345678”

    1 延时模块 void Delay ms unsigned int xms 11 0592MHz延时模块 unsigned char i j while xms nop i 2 j 199 do while j while i 2 显示模块
  • linux + gitee配置教程

    用gitee管理小红迟早50迈的项目 上手教程 1 git安装 sudo apt get update sudo apt get install git 检查一下git版本 看看是否安装成功 git version 2 git配置 下面两行
  • 该用什么软件分割音频?这些软件可以帮助你分割音频

    大家都知道想要制作一个好的视频是需要进行后期各种剪辑的 不仅视频需要后期剪辑 其实音频也是需要剪辑的 比如合并音频 裁剪音频片段 调整音频的速度 分割音频等等 那么这个时候挑选一款合适的音频剪辑软件就很重要了 今天我整理了一些简单好用的音频
  • Strapi之Entity Service API

    Query Engine API 和 Entity Service API 都是 Strapi 平台提供的 API 但是它们的功能和用途有所不同 Entity Service API 主要用于管理实体对象的创建 读取 更新和删除操作 它是对
  • Vue.js学习记录-4-Vue基础:条件渲染 +列表渲染

    4 条件渲染 根据条件进行元素展示 v if v if v else if 2 1 0新增 v else三大指令必须紧贴使用 否则指令将不被识别 指令举例 div This is A div div This is B div div Th
  • P1218 [USACO1.5]特殊的质数肋骨 Superprime Rib【普及】

    USACO1 5 特殊的质数肋骨 Superprime Rib 题目描述 农民约翰的母牛总是产生最好的肋骨 你能通过农民约翰和美国农业部标记在每根肋骨上的数字认出它们 农民约翰确定他卖给买方的是真正的质数肋骨 是因为从右边开始切下肋骨 每次
  • sklearn机器学习:高斯朴素贝叶斯GaussianNB

    认识高斯朴素贝叶斯 class sklearn naive bayes GaussianNB priors None var smoothing 1e 09 如果Xi是连续值 通常Xi的先验概率为高斯分布 也就是正态分布 即在样本类别Ck中
  • 让生活充满快乐

    文章目录 一 效果图以及素材 二 制作步骤 一 效果图以及素材 效果图 素材 二 制作步骤 打开素材 拷贝一份 找到滤镜 camera Raw滤镜 拷贝一份 ctrl t 自由变换 逆时间90度 确定 不透明度调50方便查看效果 多边形工具
  • 处理大并发之四 libevent demo详细分析(对比epoll)

    处理大并发之四 libevent demo详细分析 对比epoll libevent默认情况下是单线程 每个线程有且仅有一个event base 对应一个struct event base结构体 以及赋予其上的事件管理器 用来安排托管给它的
  • html获得url参数

    得到url搜索串 function getURLSearch isParent var strSearch if isParent strSearch window parent location search else strSearch
  • 工厂模式+策略模式的使用

    项目中会有这样的情形 通过某个参数进入不同的if分支 但是if分支太多就会导致项目难以维护 可读性也会降低 如下情形 public class Test public static void main String args String
  • git push提交报错文件过大,且去掉大文件也报同样的错误(转)

    错误原因 大文件存在没有被提交的commit记录里面 解决方案 删除有大文件的commit记录即可移除大文件的正确姿势 git rm cached giant file 文件名 Stage our giant file for remova
  • 三种常见的卷积概述(线性卷积周期卷积圆周卷积)

    note 2020 07 26搬运 下面的内容来自我的公众号 yhm同学 upd 2020 10 18 推荐学习辅助用书 江志红的 深入浅出数字信号处理 有别于学院派的教材 这本书讲得比较易懂清楚 upd 2020 10 18 数字信号处理
  • 【收藏向】一文弄懂什么是ERC20

    本文只做技术探讨 谨防数字加密货币炒作风险 Token Token 即通证 是以数字形式存在的权益凭证 它代表的是一种权利 一种固有和内在的价值 货币 积分 股票等权益证明 都可以由通证来代表 它代表着数字资产 下图就是在 opensea
  • 搜索引擎算法系列-BloomFilter算法解析及扩展算法

    通常存在下面的一些存在性检查方法 1 使用Set
  • QT--emit

    本文为学习记录 若有错误 请联系作者 谦虚受教 文章目录 前言 一 emit 二 相关代码 1 h文件 2 cpp文件 总结 前言 要努力 但是不要急 繁花锦簇 硕果累累都需要过程 一 emit emit是不同窗口 类间的触发信号 当对象改
  • 主线科技拿下数亿元新融资,自动驾驶卡车迎来拐点

    自图森未来敲响了自动驾驶公司上市的第一钟后 自动驾驶卡车赛道似乎迎来了非常不错的拐点 一批科技公司在产品落地 商业模式上也形成了独特的竞争优势 比如主线科技 其不仅率先实现了超百台港口无人驾驶集卡的交付 港口无人驾驶 去安全员 的常态化运营
  • 想用好虚幻4引擎做游戏,你需要避免这些扰人的坑(备忘)

    在手游品质越发上扬的如今 已经有不少厂商开始使用一些性能更好的引擎 去尝试游戏制作了 而虚幻4引擎 以下简称UE4 就是其中之一 在这款引擎中已经诞生了诸如 铁拳7 地狱之刃 帕拉贡 等一系列大作 对玩家而言 这些作品都是不折不扣的视觉盛宴