精华内容
参与话题
问答
  • UE4渲染系统代码量庞大,复杂,我们写UE渲染相关的功能需求的时候,经常需要反复翻阅它里面的数据结构,pipeline,这里用一张图,把UE4渲染系统的脉络梳理进来,让大家都能更方便的修改UE引擎的渲染功能 ...

    UE4的渲染系统代码量庞大,复杂,我们写UE渲染相关的功能需求的时候,经常需要反复翻阅它里面的数据结构,pipeline,这里用一张图,把UE4的渲染系统的脉络梳理进来,让大家都能更方便的修改UE引擎的渲染功能

    (你需要点下放大镜)

     

     

    展开全文
  • UE4 渲染流程

    万次阅读 2018-07-18 18:03:14
    在手游品质越发上扬的如今,已经有不少厂商开始使用一些性能更好的引擎,去尝试游戏...日本网站4Gamer曾刊登一篇文章,分享了使用UE4在图像渲染中会遇到的难点以及解决方法,分享人是该引擎的开发商Epic Games日本分...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Z值的预阶段"Z预阶段"的注意点

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    负荷率大小:蓝>绿>红

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

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

    光照反射存在最优解吗?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

     

    关于半透明的各种问题

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

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

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

    将特效配置在场景中

    但深度值没有变化

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

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

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

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

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

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

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

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

    对比两种处理效果的区别

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    结语

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

    感兴趣的读者可以访问下面的链接(PS:需要翻墙)。

    http://www.slideshare.net/EpicGamesJapan/cedec2016-unreal-engine-4

    展开全文
  • UE4 渲染优化

    千次阅读 2017-08-25 17:49:44
    《使用UE4开发VR项目-性能优化》系列文章将分成三篇分别介绍使用UE4开发VR项目的一些工具使用和VR优化思路。目的是总结UE4开发VR项目中常用的一些调试工具和使用方法。本文是第一部分,主要介绍UE4中常用的分析和优化...

     

    《使用UE4开发VR项目-性能优化》系列文章将分成三篇分别介绍使用UE4开发VR项目的一些工具使用和VR优化思路。目的是总结UE4开发VR项目中常用的一些调试工具和使用方法。本文是第一部分,主要介绍UE4中常用的分析和优化工具。 

    VR项目初始化设置请参考我的另一篇文章《基于UE4的VR项目基础环境配置和MotionController控制配置》来进行配置。http://gad.qq.com/article/detail/7167914


    · 调试分析工具


    · GPUProfiling(GPU性能分析)

      GPU分析工具可以快速确定VR项目中的多通道GPU性能消耗,更可精确到绘制调用。

      适用于PC平台GPU相关数据

      控制台命令: ProfileGPU

      快捷键: Ctrl+Shift+,


     


    · Profile 分析工具

      Profile 分析工具用来分析

    STATStartFile

    STATStopFile

      生成的Profile数据。

     


    1、完整数据图表

    2、过滤预设窗口

    3、数据图表

    4、事件图表

      **双击即可追踪STATS**

     

    · 视图模式

    · 着色器复杂度

      着色器复杂度视图模式基于每个像素着色的像素着色器指令来描绘场景。

      红色:意味着性能消耗非常高

      绿色:意味着性能消耗最低

      半透明:意味着增加性能消耗



    · 光照复杂度

      光照复杂度视图模式基于动态光源的数量来对场景进行着色。

      黑色:意味着没有收到动态光源影响。

      不同颜色:从绿到红,表示受到动态光源的影响逐步增加。

      最终目标是使得整个关卡显示为黑色(虽然很难实现)。



    · 光照贴图密度



    · 统计工具



    · 调试分析命令

    · STATUNIT

      STAT UNIT 这是性能分析的第一步。

      显示 帧/线程/GPU事件(STAT UNIT)

      STAT UNIT 用来判断帧时间瓶颈出现的地方。

      帧时间、

      游戏线程事件、

      渲染线程(描画)时间

      GPU时间

      使用 STAT FPS 命令来在屏幕上显示帧频率和帧时间 



    · STATSLOW

      STAT SLOW 用来找到性能波动问题

      它可以通过报告运行一帧中特定时间段(默认10毫秒)来逐步定位帧停顿的位置。

      运行速度较慢的数据将会在HUD上显示一段时间,从而判断性能波动。

      参数以秒为单位(所以10ms也就是0.01秒)

      参数可设置持续的时间,默认值是 10秒。

      例:STAT SLOW 0.01 10

      这将会渲染在过去的10秒内所有运行时间超过10毫秒的循环统计数据。



    · STATStartFile,STAT StopFile

      把统计数据捕获到磁盘上(推荐):

      控制台:STATStartFile 开始捕获数据到磁盘中

      控制台:STATStopFile  停止记录和完成统计数据文件

      参数:-StartStatsFile 在应用程序启动时立即捕获统计数据



    · r.SetRes

      调整渲染分辨率

    · r.MaxQualityMode

      最高质量 

    · r.MipMapLODBias

      Mipmap Bias

    · r.MobileContentScaleFactor

      画面缩放比

    · r.ScreenPercentage

      用于减小内部实际渲染分辨率,画面会在重新放大

    · r.ShadowQuality

      移动端Stationaary灯光动态阴影质量,调整其值查看帧速变化,以判断瓶颈

    · r.Shadow.MaxResolution

      移动端Movable灯光动态阴影质量,调整其值查看帧速变化,以判断瓶颈 

    · statSceneRendering


    · statGame



    · statDumpFrame -ms=0.1

    · statSceneupdate

    · STATLEVELS

      STAT LEVELS 命令查看内存中加载的关卡数。

      红色:关卡已加载并且可见

      橘黄色:正在使关卡可见的过程中

      黄色:关卡已加载但不可见

      蓝色:关卡没有被加载,但是处在内存中,当发生垃圾回收时,它将会被清除。

      绿色:关卡没有被加载

      紫色 :正在预加载关卡。

      黄色的关卡是不需要进行加载及推迟加载的最好备选项

      如果一个大的动态载入的关卡,尽量把它进行分隔或者进行优化。



    · STATMEMORY

      STAT MEMORY  提供关卡中内存使用情况

      Audio Memory(音频内存)

      NovodexAllocation(Novodex内存分配) 动画

      Vertex Lighting(顶点光照)

      StaticMeshVertex/Index(静态网格物体顶点/索引)

      SkeletalMeshVertex/Index(骨架网格物体顶点/索引)

      DecalVertex/Index(Decal 顶点/索引)

      VertexShader(顶点着色器)

      PixelShader(像素着色器)

      Texture Pool Size(贴图池大小)

      FaceF

    · ShowFlags

    Show Flag 可以用来对渲染特性进行开关。

    Show showflagname 可以开关某个具体的特性。

      有些渲染特性即便是在不渲染的时候,也仍然会消耗性能。

      比如 show particles

      能隐藏粒子,但计算模拟时间仍然会运行以便于之后重新打开时功能正确。

      x.freezeparticlesimulation 则能够彻底禁止模拟更新的计算

      how tessellation 会禁用三角形放大,但依然会使用 tessellation shader。

      分析起点应该从下面两点着手

    show StaticMeshes

    show tessellation

      常用的Show Flag 如下:

    ScreenSpaceReflections

      切换屏幕空间的反射效果,可能会非常影响性能,对那些达到一定粗造度的像素有效

    AmbientOcclusion

      屏幕空间环境遮罩

    AntiAliasing

      切换各种抗锯齿(TemporalAA 和 FXAA,FXAA更快,但效果较差)

    Bloom

      影响那些受到 lensflares 和 bloom 功能的画面。

    DeferredLighting

      切换所有延迟光照通道。

    DirectionalLightsPointLightsSpotLights

      切换不同的光照类型(检查光照类型影响性能时有用)

    DynamicShadows

      切换所有的动态阴影(阴影贴图的渲染,以及阴影的过滤和投影) 

    GlobalIllumination

      切换预烘培和动态间接光照(LPV) 

    LightFunctions

      切换光照函数渲染

    PostProcessing

      切换所有后处理效果

    ReflectionEnvironment

      切换环境反射效果

    Refraction

      切换折射效果

    Rendering

      切换整体渲染

    Decals

      切换贴花渲染 

    LandscapeBrushes StaticMeshesSkeletalMeshes Landscape

      轮询切换几种不同的几何体的渲染

    Translucency

      切换透明度渲染

    Tessellation

      切换曲面细分(仍将运行曲面细分 shader,但生成更多三角面)

    IndirectLightingCache

      切换是否动态物体或者静态物体具有使用间接光照 Cache 时无效的光照贴图。

    Bounds

      显示编辑器中当前选中物体的边界框。

    VisualizeSSR

      屏幕空间反射像素显示为亮橙色是计算较慢的区域


     

      命令行:

      r.SSR.MaxRoughness 0.9= 最佳质量(左)

      r.SSR.MaxRoughness 0.1= 运行较快(右)

      Unlit(上)

      show VisualizeSSR(下)

     


    · StartFPSChart,StopFPSChart

      用一段时间来获取状态数据并生成图表(比如用游戏内的过场,或者设置一段摄像机路径作为测试案例)。用Excel打开结果文件.csv

      [ProjectFolder]\Saved\Cooked\Android_ES31\SubwayPatrol\Saved\Profiling\FPSChartStats


    · 和优化相关的工具

    · MergeActors(融合Actor)

      合并多个Actor以及它们的材质和贴图,可以减少材质数量和材质复杂程度。


    · PrecomputedVisibilityVolume(预遮挡计算)

      遮挡较多的地方可以大幅度提高渲染效率


    · CullDistanceVolume(裁剪体积)

      根据尺寸裁剪模型


    · DeviceProfile(设备概述文件)

    对不同设备设置不同的渲染参数以节省性能



    · RenderingDetail Mode(渲染细节模式)

    设置显示细节模式和配置



    · ParticleEmitor 设置


     

    · ModelLOD 设置

      LOD模型不同细节,根据距离参数优化渲染效率

    · HLOD

      自动合并静态模型材质减少DrawCall,可以大幅度提高渲染效率

    · Material指令及Sampling监控

      最终的指令数量和采样数量会影响性能,尽量优化其数值



    · CSM联级动态阴影

      CSM 阴影不会出现调制阴影中的双重阴影,在为多个物体投射阴影时此方法速度较快。

      CSM使用了额外的纹理采样器,可通过项目设置将其禁用:

      Rendering -> Mobile-> Combined Static and CSM Shadowing,

      即可将采样器空出供材质使用。

      接收组合阴影的组件需要勾选

      Receive CombinedStatic

      CSM Shadows fromStationary Lights 标记。

     

     

    · VR 实例化立体渲染

      实例化立体渲染,可以减轻 UE4 中的 VR 性能影响。

      双眼画面同时渲染运算,能大量降低 CPU 的开销,并改进 GPU 的利用率。

      编辑 -> 项目设置 -> Rendering -> VR ->Instanced Stereo

     


    VR项目中常用的工具基本就这么多,接下来将会介绍VR项目性能优化的一些思路和流程。

    展开全文
  • UE4渲染线框

    千次阅读 2017-05-10 18:04:06
    最近遇到一个需求:在UE4中可以渲染出模型的线框,且可以控制颜色等属性。于是做了一些探索,法线其实实现起来也非常简单。  首先新建一个材质:搜索Wireframe属性并勾选,激活该选项后物体就变为了线框模式。同时...

        最近遇到一个需求:在UE4中可以渲染出模型的线框,且可以控制颜色等属性。于是做了一些探索,发现其实实现起来也非常简单。

        首先新建一个材质:搜索Wireframe属性并勾选,激活该选项后物体就变为了线框模式。同时为BaseColor端口连接颜色即可。效果如下:

       

        其余材质选项都可以按照自己的需求进行控制。

    展开全文
  • UE4渲染概述

    2019-02-01 10:43:00
    虚幻引擎4拥有全新的、DirectX 11通道的渲染系统,包括延迟着色,全局光照,半透明光照,后处理以及使用矢量场的GPU粒子模拟。 延迟着色 虚幻引擎4中所有光照均为延迟光照,这点与虚幻引擎3的直向光照完全不同...
  • UE4 渲染分析

    2019-11-11 20:20:16
    内存中的mesh是如何进行渲染的,主要涉及几个重要的数据结构 UPrimitiveComponent PrimitiveSceneProxy FMeshBatch FMeshDrawCommand #存在于Game Thread内的数据UPrimitiveComponent UPrimitiveComponent 继承自...
  • UE4渲染模块

    2018-08-31 13:19:27
    https://www.jianshu.com/p/4d1be6c2b4ef
  • UE4渲染笔记

    2017-11-28 09:50:00
    实时渲染光影效果对性能有很大影响,可利用lightmass预先生成光影贴图,然后在游戏中使用。 将场景光照结果完全烘焙到模型贴图上,从而完完全全的假冒现实光照效果。 文档上是 lightmass global illumination,可见...
  • UE4渲染系统

    2020-04-02 17:34:49
    https://zhuanlan.zhihu.com/p/72509370 https://zhuanlan.zhihu.com/p/72768828
  • UE4 渲染基础概念

    千次阅读 2017-03-02 11:39:09
    UE4 渲染基础概念本文总结于ue4 4.9官方文档转载请注明文章出处,作者信息,原文链接场景基本对象 UWorld : 世界,相当于一个包含了所有角色和组件的容器,世界中的关卡可以动态载入载出,游戏中的多个世界可以被...
  • UE4渲染引擎设置

    2019-10-09 10:32:59
    UE4渲染干货 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明 ben’wen 首先:在项目设置中搜索 forward shading去掉勾选;这个选项勾上后会屏蔽所有后处理效果 这是...
  • UE4 渲染性能设置

    千次阅读 2017-04-25 22:39:15
    本文介绍 ue4 4.14的世界设置 在编辑器最上端点击“设置”(Settings)按钮, 选择“项目设置”(Project Settings)打开“项目设置”面板, 在项目设置面板左边的 “引擎”(Engine)中选择Rendering 打开渲染设置...
  • UE4 渲染数据传输

    2020-02-17 11:36:22
    内存中的mesh是如何进行渲染的,主要涉及几个重要的数据结构 UPrimitiveComponent PrimitiveSceneProxy FMeshBatch FMeshDrawCommand 存在于Game Thread内的数据UPrimitiveComponent UPrimitiveComponent ...
  • UE4渲染模块分析

    2020-06-14 07:28:04
    UE4渲染模块分析 https://www.jianshu.com/p/4d1be6c2b4ef UE4的渲染模块是一个独立的模块,这篇文章从该模块的设计理念和思路进行剖析。 通常渲染模块由如下几个部分组成: 场景的描述 场景遍历和拣选 渲染的...
  • UE4渲染学习——2.渲染

    千次阅读 2018-09-24 18:07:59
    UE4渲染管线有前向渲染、延迟渲染等,本文主要分析延迟渲染。 找到Engine\Source\Runtime\Renderer\Private\DeferredShadingRenderer.h,可以看到这些函数 虚幻是通过这些函数来一步步完成渲染的。 官方说的渲染...
  • ue4渲染学习资料收集

    2019-12-12 22:55:42
    原理 深入理解UE4宏定义—— GENERATED_BODY (持续更新中)
  • UE4渲染用到的Bounds

    2019-03-19 11:20:11
    官方介绍: Testing Visibility with an Actor's Bounds Each Actor placed in a Level has a set of bounds using a box and a spherethat is used for various things in the Engine.One of those being ...
  • UE4渲染模块学习笔记

    2019-11-23 17:46:40
    图形工程师一直在追求渲染质量、性能、功能这三者的平衡。一个空场景性能必然是最佳的,但这没有意义,另一方面若场景都用最高精度的图片或是堆砌各种功能点,游戏卡得根本玩不了,也是不行的。 在图形优化的路上有...
  • ue4 渲染编程资料链接

    2019-08-01 20:10:02
    第三卷:虚幻4渲染编程第二卷自定义global shader代码例子详细解释 第四卷:虚幻4C++层和Shader层的简单数据通讯 第五卷:虚幻4 高级数据传输UniformBuffer 第六卷:虚幻4FTexture ,UVA,RT,Resource这些资源的...
  • ue4 渲染该怎么学习

    2020-06-06 08:31:20
    bing ue4 渲染该怎么学习 UE4渲染模块分析 https://www.jianshu.com/p/4d1be6c2b4ef
  • 为 VR 优化 UE 4 渲染

    千次阅读 2016-06-22 14:19:57
    为 VR 优化 UE 4 渲染
  • UE4渲染设置介绍(Rendering Setting)

    万次阅读 2017-02-26 17:36:25
    Useful Properties Of UE4 渲染设置(Rendering Setting) 在编辑器最上端点击“设置”(Settings)按钮, 选择“项目设置”(Project Settings)打开“项目设置”面板, 在项目设置面板左边的 “引擎”(Engine)中...
  • 渲染和图形质量一直是首屈一指的水准,但是相对于unity来说UE4基本上是一套完整方案提供,不通过源码修改对渲染进行定制的可能性比较小,而且同时UE4这方面的文档很少,因此这篇文章就是想通过分析UE4渲染过程,来...
  • UE4渲染任务的产生及入队

    千次阅读 2016-10-31 19:55:24
    渲染任务是如何产生并压入到渲染队列的呢 还记得ENQUEUE_UNIQUE_RENDER_COMMAND_ONEPARAMETER宏吗,该宏的作用就是生成渲染任务并压入渲染队列。 这是笔者知道的一种方式,应该还有其他方式。 ENQUEUE_UNIQUE_...

空空如也

1 2 3 4 5 ... 20
收藏数 530
精华内容 212
关键字:

ue4渲染