虚幻4引擎引擎问题

当前位置 & &
& 除了虚幻4还谁有?十大最牛游戏引擎
除了虚幻4还谁有?十大最牛游戏引擎
18:46:55&&出处:&&
编辑:小路 &&)
让小伙伴们也看看:
阅读更多:
好文共享:
文章观点支持
当前平均分:0(0 次打分)
[11-18][11-18][11-18][11-17][11-17][11-17][11-17][11-17][11-16][11-14]
登录驱动之家
没有帐号?
用合作网站帐户直接登录看虚幻引擎技术大神分享烧脑干货《克服VR眩晕之帧数:提升UE4内容实时渲染效率》
在10月24日精彩落幕的2015创领发现VR DAY的活动中,主办方创领发现(UCCVR)有幸邀请到了虚幻引擎的原厂技术大牛来现场与各位VR相关的制作人/开发者进行面对面的交流与分享。下面让我们来仔细解读一下该场分享的技术内容。
?VR已经成为了当今最火热的一个话题,带上头盔之后,从此进入一个奇妙的世界,在这里你不再是观众,你参与这个世界发生的每一件事件。整个世界从此与众不同。在赛道上飞驰,在战场上纵横。
但是生理机制让我们的大脑在身体并没有移动,而视觉在不断告诉我正在飞速前行的迷惑中产生了晕眩。如何解决因为VR而产生的眩晕,就成为每一位设计师需要面对的问题。
引起VR眩晕有很多原因,比如设计上的,技术上的。渲染的帧数高低必定是其中一个最主要的原因之一。关于UE4里对VR内容的优化方法和思路大部分是和传统的3D游戏优化是一致的,有部分是VR尤其相关的。接下来就以Oculus为平台和大家一起分享一下在UE4里常见内容的一些设置和优化的思路和方法。
首先我们来看一个优化过程的实例,先有个大概的了解。打开一个UE4下载的项目,particle cave,VR preview,带上眼镜就能体验了,对,就这么简单,虽然说这个并不是一个针对VR的项目。
这里做了一些简单的设置:?1.发现摄像机是以预设轨道在飞,而且明显感觉帧率不高,哦,好晕。为了比较方便衡量接下来优化,我做了一些摄像机的设置,让摄像机开始游戏后固定在一个我认为帧数最低的画面。
2.确保帧数没有被限制住,关闭垂直同步,把最高帧数限制上限提高好了,再run一下,固定住了,转转头可以,真的挺卡的。
再接个命令证实一下,最直接和GPU渲染效率有关的就是分辨率。
HMD SP 100 54FPS?帧数立马提高不少,果然是GPU渲染瓶颈!
降低渲染品质?Adjust scalability to medium 72FPS?成功了? 还没有哦,这个太暴力了,这个肯定不是最优的优化结果了。因为肯定有些可以进一步做大量的优化,有些和视觉相关比较大的调整可以提高质量。而非粗暴的都调低了,那接下来就得找原因了。
打开GPUprofiling: (Ctrl+Shift+,)?看下最大的GPU开销在哪里:
Base pass: Deferred Decals
Lighting: ReflectionEnvironment:
Translucency: Postprocessing:
从最大开销的几个点入手:?BASEPASS:敲入几个渲染选项命令行:?r.Earlyzpass 1:增加draw calls和一部分GPU的消耗,但大大降低base pass的消耗?关闭了一些不需要的PP效果?一套最优POP设置组合:
Postprocessing setting:
Fringe intensity 0
Grain intensity 0
Color grading intensity 0
Bloom setting
Ambient occlusion 0
DOF Method Gaussian,其他参数 全部0
Motion blur all 0
SSR 0 MAX roughness 0.01
Ambient cubemap 0
再VR preview,?嗯,还是75,当然了,DK2上顶格是75,再优化看不出效果?13.39ms 75FPS?
把品质调高成high Scalability high,还是75,哈哈,没问题!?现在算优化完了吧? 其实还可以再优化,这时候的优化就是以尽量提升画质但不降低帧数为目标。?
看看哪些还可以优化的?当然有!之前的Translucency花费好高。?Viewmode:shade complexity好红,一堆overdraw?Decal的花费也很高,Stat scenerendering, decals in view?环境反射的花费很高:选中sphere reflection capture, 看一下总共有几个,观察他们影响范围是否重叠严重。
Vertex intensity: 好密啊。高密度的三角面几乎看上去就像一个实体了, 一个三角面的大小在屏幕上的面积小于2*2个像素就会极大的增加开销。
还有Particle。?现在基本上已经定位到可执行层面的原因了,一些原因也已经通过可接受的渲染参数调整解决了;另外一些就必须要artist来优化Assets本身了。哪些工作最快,质量损失最小,能够换其他更能提升品质的选项。
启示他们并不需要这么多面,assets的优化需要更多的时间。把scaleability有些选项提升到EPIC,当然他们并不是全部。
一些引起DRAW CALL数量多的原因:
同屏看到的Actor太多,如果材质复杂这个因素还会加成。 合并Actor,尤其是中远处
材质ID太多(or S Mesh elements)。重用材质贴图,尽量把同一材质物体合成为一个物体
每个actor上的feature太多。主要是增加投影的属性,增加custom depth的属性
太多灯光投影(这里投影的消费来自于需要计算哪些物体需要被投影)
MESH DRAW CALL往往是个大头,MESH ID的数量可以在STATISTICS统计可以很方便的查看,从经验判断哪些资源制作不合理。
? ?关于ACTOR设置feature会增加DRAW CALL数的是投影和custom depth,可以通过一些工具来检查这些设置。使用property matrix来过滤,检查,并修改。?
?另外一个经常使用的查找原因的方法排除法:?通过隐藏各种元素,寻找哪个是导致DRAW CALL数量的大头?记得隐藏HUD,有的时候HUD也是个大头之一。
Showflag.slate 1?如果是GPU瓶颈,最快速的验证方式就是改变分辨率,降低分辨率可以极大提高帧数。为了抵消畸变纠正而产生的图像模糊,或者分辨率的丢失,在渲染的的buff里往往是实际屏幕尺寸的120-130%,这样增加了图像的锐利度,但降低了渲染的速度。
?HMD SP全称是HMD的screen percentage, 这个参数就是来修改渲染buff的尺寸的,HMD SP 120是默认值,改成100看看。
?如果像刚才例子看到的,帧数有大幅度的提高,那就是GPU负担太大的问题了,如果分辨率的改变对于帧数影响不大,很有可能是因为面太多了。??
对这些内容重点做检查,看看有没有超标的现象出现:
面数/点数(灯光的多少,阴影的设置,多少物体)
LOD,关闭shadow,灯光屏幕面积
面数密度太高,高到一个三角面小于2*2的像素,这个往往发生在远处物体
点处理,点太多
点动画的shader太复杂
tessellation太复杂
太多UV,太多SG
查看staticmesh editor里点和面数的差别是否大
点没有合并等
view cost(HZB occlusion culling)
Precumputed visibility volume
Scene cost GPU particle simulation
材质复杂度
quality switch,sin, pow, cos, divide, Noise很费
由于Texture太多,太大Texture caching反复的page in and out of显存
遮挡的culling计算
Precumputed visibility volume
当使用lighting function,IES,接受投影,区域光,复杂shading modes的时候会变得更贵。?反射ssr有问题,关掉。 后期,AO,很费。?
?知道哪里有问题了,接下来就可以着手行动了,但之前做个目标规划还是可以事半功倍的。最小化图像质量妥协,是一种有的放矢的妥协策略。比如高质量的阴影对于高品质的抗锯齿而言对于最终项目实际的表达效果次要。减小阴影品质来换取高品质AA就是一种有的放矢的妥协策略。因此尽量大的减小不是非常关心的渲染品质部分,增加更可见的渲染品质部分。
?从容易做起,从开关一些渲染选项,品质参数调整,到直接删东西,优化一个用到几百次的物件,这些都是立竿见影的方式,这样可以做允许的时间计划内完成目标,如果有更多时间和预算可以对相对低性价比的。目标75帧是必须的,不要说68,70,都不行,必须75,做实际体验中有很大区别。?
最常见的问题所在:
测试环境不合适,灯光没有build
Actor或者材质ID太多
面太多,没有任何的LOD设置
灯光使用没有节制: 各种动态投影,灯光类型随意
没有合理的设置CULL的条件
Postprocess太高级了
这些原因又互相影响,一方面的增加也会增加另外方面的开销:?
其他一些VR的特有行为:
VR需要畸变色差纠正
VR需要双屏
VR需要更大的渲染分辨率
VR需要传递传感器信息
比如对于Oculus部分是在驱动层级做掉了,比如如何纠正畸变,如何双屏,如何传递传感器信息。对于传感器信息和视频匹配的准确性,以及渲染的屏幕覆盖率,在UE4里是可以根据需要来修改的,除了这些,其他就和以往的优化思路一致了。
创建测试环境,找原因:
Testing in a stable enviroment
run Standalone game
use pause or slomo 0.001 to prevent random numbers
Measuring few times
确保帧数不封顶
profileGPU(ctol+shift+,)
面数/点数(灯光的多少,阴影的设置,多少物体)
LOD,关闭shadow,灯光屏幕面积
面数密度太高,高到一个三角面小于2*2的像素,这个往往发生在远处物体
点处理,点太多
点动画的shader太复杂
tessellation太复杂
太多UV,太多SG
查看staticmesh editor里点和面数的差别是否大
点没有合并等
view cost(HZB occlusion culling)
Precumputed visibility volume
Scene cost GPU particle simulation
材质复杂度
quality switch,sin, pow, cos, divide, Noise很费
遮挡的culling计算
Precumputed visibility volume
当使用lighting function,IES,接受投影,区域光,复杂shading modes的时候会变得更贵
反射ssr有问题,关掉,后期AO,很费
cup瓶颈,CUP GAME瓶颈
CUP RENDER瓶颈
stat scenerendering
材质ID太多
重用材质贴图,尽量把同一材质物体合成为一个物体
actor太多,如果材质复杂这个因素还会加成
合物体,尤其是中远处
每个actor上的feature太多,比如增加投影的属性,增加custom depth的属性
太多灯光投影(这里投影的消费来自于需要计算哪些物体需要被投影)?
找到瓶颈的方法:
disable一些stuff,然后看效率上的区别
一些可调的show flag
开关屏幕反射
开关延迟灯光
开关灯光类型
开关动态阴影
开关环境反射
开关半透明
开关tessellation
ProfileGPU
ProfileCPU
stat scenerendering
后期优化首选项:
ambient cubemap,
Grain intensity,
or roughness 0.01;
Motion blur off
最后选择的参数需要应用到DEVICE PROFILES里或者BP里:?
?减小shader的instruction的数量:?减少Texture sample的数量:把经常使用到同一个物体上的Pattern合在一张贴图上;去掉对质量影响很小的贴图,比如Specular,AO在实际情况中平衡来使用quality switch,sin, pow, cos, divide, Noise,多向量的计算总是大于单向量的计算。
??UE4里由于使用了延迟灯光,所以灯光的优化比前向渲染方便的多。最快速最有效的方法:使用静态光源。如果使用的是动态光减小Lighting cull,半径,衰减,Z INTERSSECTION, cone大小角度。总之尽量减少重叠。?
投影的开销最大往往不是来自于pixel shader,而是来自于被投影的mesh面数太多,还会被灯光数量,投影物体数量放大。?关闭投影的灯光;减小范围或张角;减面,加LOD? r.Shadow.MaxResolution?
创造性作假:
远处mattinpaiting
投影面片,画在贴图上
一个作品的优化不是一朝一夕的事情,需要确定目标配置:确定最低配置,配置范围小,这样的优化才更有针对性,并且学会在开阔的视野在设计时需要巧妙的避免不必要的内容,学会如何制定Budget:质量优先驱动;快速原型制作;分析制定。
对内容制作者前期的培训花费是值得的,完成这些工作之后,一个高品质的VR作品就会诞生。
2015创领发现VR/AR行业大赛,举办的宗旨是为了更好的寻找和发现优秀的VR/AR制作人/开发者,我们将围绕着与开发相关的任何需求,打造国内最专业的VR/AR社区与孵化平台。大家可以登录官方网站进行提前报名,不限于Demo或者成品,大赛截止时间安排在于明年3月,感兴趣的伙伴们可以抓紧啦!
{{news.title}}在手游品质越发上扬的如今,已经有不少厂商开始使用一些性能更好的引擎,去尝试游戏制作了。而虚幻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:需要翻墙)。[文章来源:4Gamer,游戏葡萄编译整理]原网页已经由ZAKER转码以便在移动设备上查看
原网页已经由 ZAKER 转码排版
17173游戏4小时前
机核网7小时前
机核网昨天
机核网9小时前
游戏时光VGTIME6小时前
178游戏网4小时前
超好玩5小时前
网易游戏昨天
178游戏网5小时前
空中网2小时前
任玩堂16小时前
空中网2小时前
网易游戏昨天
空中网2小时前
当乐网手机游戏19小时前

参考资料

 

随机推荐