精华内容
下载资源
问答
  • 希望能您分享一下在UE4 VR项目优化的基本思路方法和技巧。  前篇请参考这里: http://gad.qq.com/article/detail/7170307 http://gad.qq.com/article/detail/7173658 (四)GPU渲染线程分析  如果遇到...

      本文是《使用UE4开发VR项目-性能优化》的第三篇。希望能和您分享一下在UE4 VR项目优化的基本思路方法和技巧。
      前篇请参考这里:

    (四)GPU渲染线程分析
      如果遇到GPU瓶颈最快的验证方法是改变分辨率 降低分辨率可以极大提高帧数
      如果帧数有大幅度提高 即是GPU瓶颈。如果影响不大,可能是面数太多。
      一般GPU渲染线程问题大多数可能性是像素着色器(Pixel Shader)
      ProfileGPU 命令可快速确定多个通道的 GPU 消耗
      快捷键:Ctrl+Shift+,
    r.ProfileGPU.ShowUI 对 UI 进行抑制
       建议不要在编辑器里运行,开关编辑器也是有渲染开销的。渲染数据会产生误差。最好建立单独游戏(Standalone)运行环境

    几个值得注意的数据项:
    Base Pass
    Deferred Decals
    Lighting
    SSR(环境反射)
    Translucency(半透明)
    Postprocessing(后期处理效果)
    Particle(粒子)
      **当Base Pass很高,可以使用命令行打开Early Z Pass 可以降低 Base Pass 但同时会少量增加DRAW CALL**
      检查影响GPU效率的内容查看有无超标现象
      比如分辨率、HMD SP、投影贴图大小

    ViewMode检查
      当三角面密度太高(高到三角面小于2*2像素 往往发生在远处物体上) 很容易出现问题。
      分别查看三角面、顶点、灯光数量、阴影设置、Actor数量
      LOD 关闭Shadew 、灯光屏幕面积
      顶点太多
      点动画的Shader处理过于复杂
      Tessellation 过于复杂
      多重UV、过多的SG
      查看Staticmesh Editor里点和面数的差别是否大
      点没有合并、场景GPU粒子模拟数量过多

    材质复杂度
      Quality、Switch、Sin、 Pow、 Cos、Divide、Noise 这些节点很耗费资源
      减少材质Shader的指令的数量。减少Texture Sample的数量:把经常使用到同一个物体上的图案合在一张贴图上;去掉对质量影响很小的贴图,比如Specular、AO等。尽量使用QualitySwitch,Sin, Pow, Cos, Divide, Noise节点。多向量的计算量总是大于单向量的计算量。
       遮挡的culling计算
      使用预算可见性剔除遮挡的对象。

    延迟灯光
      当使用lightingfunction、IE、接受投影、区域光、复杂shadingmodes的时候会变得更昂贵。反射SSR如果有问题,请关掉它。另外后期AO也很耗费资源。

    (五)CPU逻辑线程分析
      引起Draw Call 数量增多的原因
    1、同屏Actor过多、材质复杂性过于复杂。 (合并Actor、降低材质复杂度)
    2、材质ID太多、重用材质贴图(把同一材质合并成一个物体)
    3、每个Actor上的Feature 太多(主要增加投影属性 增加Custom depth属性)
    4、过多灯光投影(检查投影计算来自哪些物体被投影)

    Mesh Draw call 可以检查静态模型统计器来解决问题
      Actor 设置 Feature 会增加DrawCall数量的是 custom depth
      通过检查工具来设置Showflag 使用Property matrix 来过滤
      使用排除法,隐藏各种元素 查找Draw Call 数量过多的因素
      隐藏HUD (HUD占用很多性能,Showflag.slate 1)
      还可以使用移动设备上的CMS增强阴影(4.12)
      Rerdring>Mobile>Combined>StaticandCSM shadrring
      接收物体选项:ReceicvCombined Static CSM shadows from stationary lights
      UE4里由于使用了延迟灯光,所以灯光的优化比前向渲染方便的多。最快速最有效的方法:使用静态光源。如果使用的是动态光源,要减小Lighting Cull、半径、衰减、 Cone大小角度等等。总之尽量减少重叠。
      投影的开销最大不是来自于PixelShader,而是来自于被投影的Mesh面数太多,还会被灯光数量,投影物体数量放大。关闭投影的灯光;减小范围或张角;减面,加LOD
      可以使用r.Shadow.MaxResolution 命令用来查看阴影分辨率数据。

    Stat Game
    Stat Scenerendering
      命令可以显示
      DrawCall数量 (计算公式:Mesh数量 * Mesh ID * 投影灯光数量)
      Particle粒子
      复杂的UI 
      Decal 贴花
      静态Mesh
      动态Mesh 
      查看影响最大的部分 ,再次使用Show Flag 开关渲染特性来查看这些特性对DRAW CALL和帧数的影响

    DrawCall优化:
      打开Statistics统计面板,按使用次数排序Actor。查找使用次数最多的MESH 的ID ,如果ID是负数,那么就可以做优化。
      例:如果有60个MESH 资源 其中有一半使用同一资源,那么就需要考虑需要用Merge Actors(融合Actor)来降低ID数量。优先减少使用频率最高的Mesh ID。这个操作可以减少这60个MESH中50%以上的DrawCall.(优化模这步骤建议放在最后才去考虑)
      Staionary灯光和动态灯光要尽量的少,并且能不投影的尽量不要投影。并且减少光源间Overlaid(覆盖)
      控制台:r.VisualizeOccludedPrimitives 1
      命令主要用来判断场景中哪些遮挡掉的物体是被渲染的。
      绿色的框就是没有绘制的对象.,如果有Actor在遮挡后面但是并没有被绿色的框画出来,这时候引擎认为这个Actor是可见的,造成消耗。这种情况一般是边界(Bounds)设置太大,一些非Root Motion的动画要注意。当Actor从A点移动到B点,边界会自动变大。就可能出现Actor 在遮挡物体后,但引擎仍然认为Actor是可见的并将它绘制出来。

    粒子优化:
    StatParticle
      把占屏幕面积较大的,靠视点较近的,半透明较多的,材质复杂的,边界盒较大的,粒子数量多的进行集中优化。离视点较远的,可以使用LOD减少粒子绘制。当GPU进行立体渲染(Stereo Rendering)的时候,当视点越近,视差看到位移的位置就越远。离视点近的粒子很容易出错。引擎里的粒子大多数都是面向摄像机的一个片。当引擎进行立体渲染的时候,粒子片总是朝向左边摄像机。这时候右眼摄像机就出现了视差错误。离视点越近的粒子,立体化渲染时错误越明显。为了避免这种错误,可以把粒子做成实体模型。

    后期优化:
    下面是一组后期优化组合:
      Post processingsetting
      Scene color
      Fringe intensity 0
      Grain intensity 0
      Color gradingintersity 0
      Bloom setting
      LPV 0
      Ambient occlusion 0
      DOF Method Gaussian0
      Motion blur all 0
      AA FXAA
      SSR 0 Max roughness0.01
      Ambient cubemap 0

    Profiler
      最后可以使用Profiler将数据捕获到磁盘上进行分析。

    (六)可能遇到的问题和优化方法
    最常见问题的原因包括:
      测试环境不合适,比如灯光没构建。
      双目渲染Actor太多,多材质ID
      模型面数太多并且没有使用LOD,没有合理使用剔除
      灯光类型使用没有规划,大面积动态投射阴影
      大面积使用透明
      HMD(头显)刷新频率

    使用的灯光类型
      构建 VR 项目时使用静态光照 和 光照图。如需使用动态光照,应尽量减少动态灯光的数量。如场景为室外,须将定向光照设为动态而非静态,然后开启级联阴影贴图(CSM)并尽量进行简单设置,即可生成阴影。

    VR & VFX
      在 VR 项目中多数情况下,需要使用静态网格体替代 2D 粒子模拟 VFX(如爆炸或烟雾拖尾)。近场特效或离摄像机非常近的特效在 VR 项目中效果上佳,但特效须由静态网格体粒子组成。

    VR 和透明度
      在 3D 图形渲染中,透明度的开销非常之大,因为每帧都需对其进行整体再次求值,以确保未发生变化。正因为再次求值的存在,VR 项目中透明度的渲染开销极大,大于其带来的效果增益。然而,使用 DitherTemporalAA 材质函数可解决解决这一难点。此材质函数将使材质拥有外观上的透明度,并避免常见透明度问题(如自我排序)。

    多边形减面
      在 VR 游戏中,玩家观察的自由度更高,执行减面操作可能导致玩家看到不应该看到的物体,因此不能进行此操作。

    阴影投影
      去掉大部分动态着色器(DynamicShader),
      用BP控制角色脚步离地面远近来缩放脚下阴影片面大小。
      Reflection Capture  减少 尽量不要重叠
      关掉场景SSR  用材质模拟SSR效果
      打开SM联级动态阴影

    创造性作假:
      三角面:
      远处mattinpaiting
      投影面片,渲染在贴图上

    使用PrecomputedVisibilityVolume(预遮挡计算)
      遮挡较多的地方可以大幅度提高渲染效率

    使用CullDistanceVolume(裁剪体积)
      根据Mesh在屏幕上所占像素尺寸裁剪模型

    内存分配
      CUP RENDER瓶颈
      stat scenerendering
      材质ID太多
      重用材质贴图,尽量把同一材质物体合成为一个物体
      actor太多,如果材质复杂这个因素还会加成
      合物体,尤其是中远处
      每个actor上的feature太多,比如增加投影的属性,增加custom depth的属性
      太多灯光投影(这里投影的消费来自于需要计算哪些物体需要被投影)
      除了以上的优化手段,有更多规范需要在制做之前进行测试并制定规范。

      比如目标硬件是什么?美术在制做原型的时候就去设置一些美术标准,根据标准来做,后期再做比较统一的优化,这样效率可能会比较高一点。在做了基本的性能优化和分析后,接下来更进一步的就要进行美术迭代资源了做LOD,做剔除,调整渲染参数,优化材质指令。等等VR既需要表现好的的效果,又要更高的流畅度,同时VR本身的开销又很高,所以对优化的要求就更大。本文粗略的整理了开VR项目中对于VR性能优化的一些思路流程和技巧。希望本文的分享能对您VR项目的优化有一点点的帮助。(后一篇文章将把文中流程整理成简表供大家参考)

    原文地址:http://gad.qq.com/article/detail/7173659

    展开全文
  • 华为:实现流程优化方法

    千次阅读 2019-05-13 17:09:25
    掌握速度优势,只有速度足够快的企业才能继续生存下去;打破惯性思维,正向逆向梳理;精简冗余,爱上分析工作流程图;合并同类项,去劣存优释放生产能力;多维度合理规划,时间地点人物都要考虑到。

    掌握速度优势,只有速度足够快的企业才能继续生存下去;打破惯性思维,正向逆向梳理;精简冗余,爱上分析工作流程图;合并同类项,去劣存优释放生产能力;多维度合理规划,时间地点人物都要考虑到。

    掌握速度优势——只有速度足够快的企业才能继续生存下去

    在建立IT系统前,华为发出货物就宣告万事大吉,并不会把货物的详细信息提供给客户,这导致客户在接到货物后必须重新填制收货单据。这种服务模式的影响是,入账重审、内部资产等后续环节停滞不前,时间耗费掉了不说,流程作业如泥牛入海连个浪花都没有产生,典型的白费工夫办瞎事。为解决这个问题,去除作业流程中的劣势,华为构建了电子化的客服流程服务,一方面让客户省时省心,另一方面己方也减少了等待时间,一举扭转乾坤,化劣势为优势。

    华为要求员工:一旦开始操作,就必须对各个关键环节的执行情况进行监控,以确保工作任务按照计划进度开展,并在此基础上提升效率。那么,如何掌控作业流程中的关键点呢?

    持久保持时间优势。时间优势保持得越长,其价值越大。俗话说,“知己知彼百战不殆”。为获得更高的价值,任务执行者应对建立这种优势需要多长时间、获得的优势会有多少及竞争对手掉转矛头做出有力反应的时间差等问题了然于胸。然后,在此基础上,不断默念紧箍咒,提升关键环节上占有的时间优势。

    扭转时间劣势。通过改变作业方式、引进新技术、强化员工熟练度培训等方式,来改变关键环节的劣势状态。“行到水穷处,坐看云起时”是一种境界,有时,劣势之处即是优势转化的灵感来源。

    争取更多机会。梳理作业流程,找出可以加以整合的环节,通过减除、合并、重排等方式优化流程,也可以采用新技术代替旧技术,以缩短作业时间。

    化解外部威胁。灵魂周围小鬼环伺,优势身边威胁相随。因此,对于影响时间优势的外部威胁要尽快化于无形。例如,一经发现竞争对手引入新技术后,要迅速掌握新技术的优劣势,将其优势之处纳为己用,并形成具有时间优势的技术手段。

     

    打破惯性思维——正向逆向梳理

    回溯到20世纪90年代初,华为以新兵姿态跻身电信设备制造商的行列。当时,摩托罗拉、思科、爱立信、北电等国外的老牌通信巨头,正以强大的产品供货能力牢牢占据着中国市场,因此华为内部滋生了一种观点:华为作为后来者,应尽快获得产品低成本的竞争优势。不过,华为决策者则认为,必须尽快优化生产管理、质量控制和物流体系,拉近与那些老牌通信巨头的距离。1993年初,华为在西门子公司相关技术人员的帮助下,重新设计了整体生产流程。华为希望通过内部统一的物流体系,保障完整的质量控制和生产管理,并减少物料流通环节和生产周期,以全面提高华为的产品供货能力。

    现在已无需再评价该项目对华为的深远影响,这一逆流而上、敢于挑战的思维方式,已经起到了为华为改头换面的巨大作用。华为于是一直坚持在流程优化中打破惯性思维。

    正向梳理。对已完成的流程进行正向梳理,以操作者的态度来预估实现过程中各个环节衔接的流畅度,或选择合适的思维工具分析各环节之间的联系,并预测可能产生的收益。

    逆向发现。最利于发挥创造力的流程优化方法是采用逆向思维方法,挑出流程中的缺陷。

    在华为,每条产品线上会组建两支队伍——红军和蓝军,红军在对某个流程进行规划时,蓝军就要想尽办法来“捣乱”,“吹毛求疵”,找出红军设计流程中存在的缺陷。这种逆向优化方式使流程规划者更简单明了地看到流程的可待改进之处,而改进后的流程将使作业完成期限更易于掌握。

     

    精简冗余——爱上分析工作流程图

    2009年,任正非向华为全体员工发出指示:让一线直接来决策!他曾经百般周折地将一个庞大的企业集团牢牢地控制在手中,但是此时,在一线上奔忙的员工却渐渐缺少了当年创业时的激情和敏锐。他恍然发现,企业中设置了过多流程控制点,冗余的环节阻碍了上传下达的流畅性,降低了工作效率的同时,也磨灭了员工的热情。

    任正非认为,去除流程中的冗余环节,让工作流程的各个环节得到精简,是优化工作程序、提高工作效率的第一步。

    已成为华为中层管理者的刘宁说:“我现在最大的爱好之一,就是分析工作流程的网络图,每一次能去掉一个多余的环节,就少一个工作延误的可能,这意味着大量时间的节剩。这两年来,我去掉的各种冗余工作环节达70个,粗略评估,省下的时间高达3000多个小时,也就是120多天啊!”

     

    合并同类项——去劣存优释放生产能力

    除冗的另一种方法是合并同类项。庄子云:“丘山积卑而为高,江河合水而为大。”合并的作用不仅在于化零为整,更在于能叠加优势,消除劣势。

    在华为,如果当前的工作环节皆不能被取消,那么,管理者就会换个思路,将各个环节适当加以合并怎么样?合并是指将两个或两个以上的事务或环节合为一个。例如,工序或工作任务的合并、工具的合并等。很多情况下,各个环节之间的生产能力不平衡,有的人手短缺,有的则人浮于事,忙闲不均,将这些环节加以调整和合并,往往能去劣存优,取得立竿见影的效果。

     

    多维度合理规划——时间地点人物都要考虑到

    任正非要求:“员工参加管理,不断地优化从事工作的流程与工作质量……改革一切不合理的流程。”那么,如何改进才能调整不合理的环节,保证流程的合理,达到化繁为简的目的呢?

    衡量各环节安排的合理度。华为通过“时间,地点,人物”3个问题,来确认流程中各个环节的安排是否合理,一经发现不合理之处,立即推倒重来,以使各个环节保持最佳的顺序,保证工作环节的有序性。

    时间:从第一个环节开始至最后一个环节结束的时间,包括在各个环节之间的移动时间、加工时间及由于机器故障、部件无法得到,等问题引起的延迟时间分别是多少?时间安排是否过于紧凑,使员工紧张、疲劳?或过于宽松,难以在交期前完成任务?

    地点:各环节的操作场所之间距离远近如何?是否便于工作交接?如果将某环节的操作场所加以调换,是否可以使工作交接时间更短?调整设备仪器的摆放位置后,操作者使用起来是否更方便、时间更短?

    人物:该环节由谁操作?操作技能是否娴熟?该环节是否为该员工最擅长的?是否存在岗位与员工能力不匹配的现象?如果让熟悉第一环节工作的员工从第二环节调回,可以节省多少时间?

    展开全文
  • 本文通过UE4项目开发中的一些流程和技巧来优化VR实时渲染效率。达到提升渲染效率降低延迟,从而降低导致晕动症人眼疲劳的机率。本文是《使用UE4开发VR项目-性能优化》的第二篇。希望能您分享
    原作者:Mullin-ぼくリん 


      目前VR行业发展迅速,VR性能逐步完善。但目前VR仍然存在一些技术瓶颈。 VR渲染效率和延迟是导致晕动症和人眼疲劳最重要的两个问题。本文通过UE4项目开发中的一些流程和技巧来优化VR实时渲染效率。达到提升渲染效率降低延迟,从而降低导致晕动症和人眼疲劳的机率。本文是《使用UE4开发VR项目-性能优化》的第二篇。希望能和您分享一下在UE4 VR项目优化的基本思路方法和技巧。

      前篇请参考这里:http://gad.qq.com/article/detail/7170307
      造成晕动症的原因很多,比如设计不合理,硬件技术瓶颈。CPU、GPU上的性能问题、内容优化不合理等等。 下面通过一套优化流程来说明VR性能优化的的思路和方法。

    (一)VR优化考虑的问题
    (二)VR测试环境准备
    (三)找到受到限制的瓶颈
    (四)GPU渲染线程分析
    (五)CPU逻辑线程分析
    (六)可能遇到的问题和优化方法

     (一)VR优化考虑的问题
      HMD(头显)刷新频率
      目前主流的VR设备对帧率的限制都在90FPS/120FPS
      DK275 FPS
      CV190 FPS
      HTCVive 90 FPS
      PS4VR 120 FPS

    VR双屏渲染
      简单的说双屏渲染就是把屏幕所见看成一个Mesh的两个Instance,可节省50%以上效率

    Instanced StereoRendering
      实例化立体渲染

    HMD DistortionMask
      HMD镜透变形




     
    VR多分辨率渲染(Multi-Resolution Shading)
      人眼只对中间的视距中心的位置较敏感,所以屏幕中间渲染分辨率更高,屏幕周围渲染相对较低。它可以让我们在不影响最终画面显示效果的前提下,提高计算资源的利用率

    VR SLI (Nvidia VR优化技术)
      这项技术是使用多块显卡协作,开发者可以自由定义显卡处理什么信息。


    场景比例
      须使 VR 世界中的物体比例与现实世界一致。大小不匹配会引起眩晕或模拟疾病。

    渲染品质压力
      比如材质复杂度、灯光数量、动态阴影、粒子系统(材质复杂度 +双目粒子面积+ 粒子数量)、贴图尺寸、双屏可见视野、模型面数等等。通过控制物件,特效数量,使用cull distance volume、instance等方式可以控制渲染量达到控制目的。

    DRAW CALL数量
      比如同屏看到的Actor数量、材质ID数量、每个actor上的feature数量、灯光投影面积过大导致Draw Call偏高,CPU逻辑线程和GPU 渲染线程都会发生问题。

    内存占用率
      通过限制贴图数量、尺寸、提高模型、材质、贴图的复用率、控制物件、特效数量、及UI相关资源数量,可以达到控制内存的目的。

    VR包体大小(VR移动端)
      通过提高模型、材质、贴图的复用率,使用压缩限制贴图数量和尺寸,必要时可取消mipmap等方式可以控制包体大小。

    卡顿问题
      我们首次加载地图的卡顿问题,视地图大小而定,若地图相对小;资源量不大,可用施明的预加载一遍的方式;若地图比较大;资源量也大,则不适用。需考虑修改newRenderPipelineState为异步来解决。另外的针对加载mipmap的卡顿点,也可以通过取消TextureStreaming来解决,取消TextureStreaming后存在显示延迟的问题,这个问题需要修改默认的显示顺序,可按照摄像机距离进行排序显示。

     (二)VR测试环境准备
      VR项目参考请参考《基于UE4的VR项目基础环境配置和Motion Controller控制配置》的VR项目基础环境配置(http://gad.qq.com/article/detail/7167914)
      创建测试环境
      暂停游戏
      跑单独游戏
      进行多次测试
      确保帧数不封顶 关闭垂直同步

     (三)找到受到限制的瓶颈
      目前的VR内容来看,CPU逻辑线程上出问题的比例很小。如果CPU逻辑线程出现了问题。一定是实现和设计上出现了问题。或者是代码写的有问题。大多数的问题出现在GPU渲染线程上。找到瓶颈的方法,第一步判断是CPU逻辑线程问题还是GPU渲染线程问题。第二步使用控制台Stat fps来看FPS,如果FPS已经满足就没必要进一步优化。如果不满足,接下来使用Stat Unit命令查看更详细数据来帮我们判断瓶颈所在。

    HMD SP 100 

      SP是屏幕比例,输出分辨率是固定的。但Render Buffer可以调整。默认120% 调整成100% 时候 画面会变糊,测试VR性能过程中,根据不同关卡、摄像机位置、来调整不同的值。在渲染压力很大,不能进行进一步优化的情况下,让画面变糊,让帧数有提升后,即可进一步优化。判断是Pixel Shader瓶颈,还是Vertex Shader瓶颈,只要调整HMD SP 会有帧数提升的时候,即可确认是GPU渲染线程瓶颈。这个命令在优化压力很大的情况下是最有效果的调整。

    Stat FPS
      显示FPS数据,查看当前帧数

    Stat unit
      这里面有三个有用的数据,GAME:游戏逻辑线程这一帧所耗费的时间。DROW:GPU渲染线程所耗费的时间。Gpu:GPU耗费的时间。
      可以查看几个模块每一帧耗费的毫秒数。如果Game这里毫秒数最高,首先查是否限制帧数上限。如果Game和Frame一样,那么可能不是游戏主线程瓶颈。很可能是限帧的原因。
      调整渲染质量Scale Ability设置
      关闭一些stuff,然后看效率上的区别
      一些可调的show flag(屏蔽渲染查找问题)
      开/关屏幕反射
      开/关AO
      开/关AA
      开/关bloom
      开/关延迟灯光
      开/关灯光类型
      开/关动态阴影
      开/关GI
      开/关后期
      开/关环境反射
      开/关折射
      开/关贴花
      开/关半透明
      开/关tessellation

    (四)GPU渲染线程分析
      如果遇到GPU瓶颈最快的验证方法是改变分辨率 降低分辨率可以极大提高帧数
      如果帧数有大幅度提高 即是GPU瓶颈。如果影响不大,可能是面数太多。
      一般GPU渲染线程问题大多数可能性是像素着色器(Pixel Shader)
      ProfileGPU 命令可快速确定多个通道的 GPU 消耗
      快捷键:Ctrl+Shift+,
    r.ProfileGPU.ShowUI 对 UI 进行抑制
       建议不要在编辑器里运行,开关编辑器也是有渲染开销的。渲染数据会产生误差。最好建立单独游戏(Standalone)运行环境

    几个值得注意的数据项:
    Base Pass
    Deferred Decals
    Lighting
    SSR(环境反射)
    Translucency(半透明)
    Postprocessing(后期处理效果)
    Particle(粒子)
      **当Base Pass很高,可以使用命令行打开Early Z Pass 可以降低 Base Pass 但同时会少量增加DRAW CALL**
      检查影响GPU效率的内容查看有无超标现象
      比如分辨率、HMD SP、投影贴图大小

    ViewMode检查
      当三角面密度太高(高到三角面小于2*2像素 往往发生在远处物体上) 很容易出现问题。
      分别查看三角面、顶点、灯光数量、阴影设置、Actor数量
      LOD 关闭Shadew 、灯光屏幕面积
      顶点太多
      点动画的Shader处理过于复杂
      Tessellation 过于复杂
      多重UV、过多的SG
      查看Staticmesh Editor里点和面数的差别是否大
      点没有合并、场景GPU粒子模拟数量过多

    材质复杂度
      Quality、Switch、Sin、 Pow、 Cos、Divide、Noise 这些节点很耗费资源
      减少材质Shader的指令的数量。减少Texture Sample的数量:把经常使用到同一个物体上的图案合在一张贴图上;去掉对质量影响很小的贴图,比如Specular、AO等。尽量使用QualitySwitch,Sin, Pow, Cos, Divide, Noise节点。多向量的计算量总是大于单向量的计算量。
       遮挡的culling计算
      使用预算可见性剔除遮挡的对象。

    延迟灯光
      当使用lightingfunction、IE、接受投影、区域光、复杂shadingmodes的时候会变得更昂贵。反射SSR如果有问题,请关掉它。另外后期AO也很耗费资源。

    (五)CPU逻辑线程分析
      引起Draw Call 数量增多的原因
    1、同屏Actor过多、材质复杂性过于复杂。 (合并Actor、降低材质复杂度)
    2、材质ID太多、重用材质贴图(把同一材质合并成一个物体)
    3、每个Actor上的Feature 太多(主要增加投影属性 增加Custom depth属性)
    4、过多灯光投影(检查投影计算来自哪些物体被投影)

    Mesh Draw call 可以检查静态模型统计器来解决问题
      Actor 设置 Feature 会增加DrawCall数量的是 custom depth
      通过检查工具来设置Showflag 使用Property matrix 来过滤
      使用排除法,隐藏各种元素 查找Draw Call 数量过多的因素
      隐藏HUD (HUD占用很多性能,Showflag.slate 1)
      还可以使用移动设备上的CMS增强阴影(4.12)
      Rerdring>Mobile>Combined>StaticandCSM shadrring
      接收物体选项:ReceicvCombined Static CSM shadows from stationary lights
      UE4里由于使用了延迟灯光,所以灯光的优化比前向渲染方便的多。最快速最有效的方法:使用静态光源。如果使用的是动态光源,要减小Lighting Cull、半径、衰减、 Cone大小角度等等。总之尽量减少重叠。
      投影的开销最大不是来自于PixelShader,而是来自于被投影的Mesh面数太多,还会被灯光数量,投影物体数量放大。关闭投影的灯光;减小范围或张角;减面,加LOD
      可以使用r.Shadow.MaxResolution 命令用来查看阴影分辨率数据。

    Stat Game
    Stat Scenerendering
      命令可以显示
      DrawCall数量 (计算公式:Mesh数量 * Mesh ID * 投影灯光数量)
      Particle粒子
      复杂的UI 
      Decal 贴花
      静态Mesh
      动态Mesh 
      查看影响最大的部分 ,再次使用Show Flag 开关渲染特性来查看这些特性对DRAW CALL和帧数的影响

    DrawCall优化:
      打开Statistics统计面板,按使用次数排序Actor。查找使用次数最多的MESH 的ID ,如果ID是负数,那么就可以做优化。
      例:如果有60个MESH 资源 其中有一半使用同一资源,那么就需要考虑需要用Merge Actors(融合Actor)来降低ID数量。优先减少使用频率最高的Mesh ID。这个操作可以减少这60个MESH中50%以上的DrawCall.(优化模这步骤建议放在最后才去考虑)
      Staionary灯光和动态灯光要尽量的少,并且能不投影的尽量不要投影。并且减少光源间Overlaid(覆盖)
      控制台:r.VisualizeOccludedPrimitives 1
      命令主要用来判断场景中哪些遮挡掉的物体是被渲染的。
      绿色的框就是没有绘制的对象.,如果有Actor在遮挡后面但是并没有被绿色的框画出来,这时候引擎认为这个Actor是可见的,造成消耗。这种情况一般是边界(Bounds)设置太大,一些非Root Motion的动画要注意。当Actor从A点移动到B点,边界会自动变大。就可能出现Actor 在遮挡物体后,但引擎仍然认为Actor是可见的并将它绘制出来。

    粒子优化:
    StatParticle
      把占屏幕面积较大的,靠视点较近的,半透明较多的,材质复杂的,边界盒较大的,粒子数量多的进行集中优化。离视点较远的,可以使用LOD减少粒子绘制。当GPU进行立体渲染(Stereo Rendering)的时候,当视点越近,视差看到位移的位置就越远。离视点近的粒子很容易出错。引擎里的粒子大多数都是面向摄像机的一个片。当引擎进行立体渲染的时候,粒子片总是朝向左边摄像机。这时候右眼摄像机就出现了视差错误。离视点越近的粒子,立体化渲染时错误越明显。为了避免这种错误,可以把粒子做成实体模型。

    后期优化:
    下面是一组后期优化组合:
      Post processingsetting
      Scene color
      Fringe intensity 0
      Grain intensity 0
      Color gradingintersity 0
      Bloom setting
      LPV 0
      Ambient occlusion 0
      DOF Method Gaussian0
      Motion blur all 0
      AA FXAA
      SSR 0 Max roughness0.01
      Ambient cubemap 0

    Profiler
      最后可以使用Profiler将数据捕获到磁盘上进行分析。

    (六)可能遇到的问题和优化方法
    最常见问题的原因包括:
      测试环境不合适,比如灯光没构建。
      双目渲染Actor太多,多材质ID
      模型面数太多并且没有使用LOD,没有合理使用剔除
      灯光类型使用没有规划,大面积动态投射阴影
      大面积使用透明
      HMD(头显)刷新频率

    使用的灯光类型
      构建 VR 项目时使用静态光照 和 光照图。如需使用动态光照,应尽量减少动态灯光的数量。如场景为室外,须将定向光照设为动态而非静态,然后开启级联阴影贴图(CSM)并尽量进行简单设置,即可生成阴影。

    VR & VFX
      在 VR 项目中多数情况下,需要使用静态网格体替代 2D 粒子模拟 VFX(如爆炸或烟雾拖尾)。近场特效或离摄像机非常近的特效在 VR 项目中效果上佳,但特效须由静态网格体粒子组成。

    VR 和透明度
      在 3D 图形渲染中,透明度的开销非常之大,因为每帧都需对其进行整体再次求值,以确保未发生变化。正因为再次求值的存在,VR 项目中透明度的渲染开销极大,大于其带来的效果增益。然而,使用 DitherTemporalAA 材质函数可解决解决这一难点。此材质函数将使材质拥有外观上的透明度,并避免常见透明度问题(如自我排序)。

    多边形减面
      在 VR 游戏中,玩家观察的自由度更高,执行减面操作可能导致玩家看到不应该看到的物体,因此不能进行此操作。

    阴影投影
      去掉大部分动态着色器(DynamicShader),
      用BP控制角色脚步离地面远近来缩放脚下阴影片面大小。
      Reflection Capture  减少 尽量不要重叠
      关掉场景SSR  用材质模拟SSR效果
      打开SM联级动态阴影

    创造性作假:
      三角面:
      远处mattinpaiting
      投影面片,渲染在贴图上

    使用PrecomputedVisibilityVolume(预遮挡计算)
      遮挡较多的地方可以大幅度提高渲染效率

    使用CullDistanceVolume(裁剪体积)
      根据Mesh在屏幕上所占像素尺寸裁剪模型

    内存分配
      CUP RENDER瓶颈
      stat scenerendering
      材质ID太多
      重用材质贴图,尽量把同一材质物体合成为一个物体
      actor太多,如果材质复杂这个因素还会加成
      合物体,尤其是中远处
      每个actor上的feature太多,比如增加投影的属性,增加custom depth的属性
      太多灯光投影(这里投影的消费来自于需要计算哪些物体需要被投影)
      除了以上的优化手段,有更多规范需要在制做之前进行测试并制定规范。
      比如目标硬件是什么?美术在制做原型的时候就去设置一些美术标准,根据标准来做,后期再做比较统一的优化,这样效率可能会比较高一点。在做了基本的性能优化和分析后,接下来更进一步的就要进行美术迭代资源了做LOD,做剔除,调整渲染参数,优化材质指令。等等VR既需要表现好的的效果,又要更高的流畅度,同时VR本身的开销又很高,所以对优化的要求就更大。本文粗略的整理了开VR项目中对于VR性能优化的一些思路流程和技巧。希望本文的分享能对您VR项目的优化有一点点的帮助。

    (后一篇文章将把文中流程整理成简表供大家参考)
    展开全文
  • Linux性能优化-内存性能优化思路

    千次阅读 2019-01-07 08:27:48
    内存优化思路

    目录

    内存性能指标

    内存性能工具

    如何快速分析内存的性能指标


     

    内存性能指标

    系统内存使用情况
    1.已用内存和剩余内存
    2.共享内存,通过tmpfs实现的,他的大小就是tmpfs使用的内存大小,这是一个特殊的缓存
    3.可用内存是新进程可以使用的最大内存,包括剩余内存和可回收缓存
    4.缓存包括,从磁盘读取文件页的buffer缓存,用来缓存从磁盘读取的数据加速再次访问
       还包括Slab分歧中的可回收内存
    5.缓冲区是对原始磁盘块的临时存储,用来缓存将要写入磁盘的数据,内核可以把分散的写集中起来,统一
       优化磁盘写入

    进程内存使用情况
    如进程的虚拟内存,常驻内存,共享内存,swap内存等
    1.虚拟内存,包括了进程代码段,数据段,共享内存,已经申请的堆内存和已经换出的内存等,注意,已经
      申请的内存,即使还没有分配物理内存,也算作虚拟内存
    2.常驻内存是进程实际使用的物理内存,不包括swap和共享内存,一般会换算成占系统总内存的百分比,
       也就是进程的内存使用率
    3.共享内存,包括与其他进程共同使用的真是的共享内存,还包括了加载的动态链接库以及程序代码段等
    4.Swap内存,是指通过Swap换出到磁盘的内存

    缺页异常
    系统调用内存分配请求后,并不会立刻为其分配物理内存,而是在首次访问时,通过缺页异常来分配,缺页
      异常包括两类
    1.可以直接从物理内存中分配时,称为次缺页异常
    2.需要磁盘I/O介入,比如Swap时,被成为主缺页异常,主缺页异常升高,意味着需要磁盘I/O,会导致
       内存访问变慢很多

    Swap的使用情况
    如swap的已用空间,剩余空间,换入速度和换出速度等
    1.已用空间和剩余空间很好理解,就是字面上的意思,已使用和没有使用的内存空间
    2.换入和换出速度,则表示每秒钟换入和换出内存的大小
     

    内存的性能指标相关的思维导图

     


    内存性能工具

    比如free 查看整体内存和swap情况
    top和ps 查看进程的内存情况
    在proc中还有很多内存指标的来源,如/proc/zoneinfo等
    通过vmstat可以动态观察内存变化情况
    通过cachestat 查看整个系统缓存的读写命中情况
    通过cachetop来观察每个进程缓存的读写命中情况
    memleak查看内存分配,找到内存泄露的位置
    通过sar也可以实时的查看内存使用情况
     

    性能指标和工具联系
    同CPU一样,可以从两个不同维度出发
    1.从内存指标出发,把工具和工作原理关联起来
    2.从性能工具出发,可以更快的利用工具,找出我们想观察的性能指标,特别是工具有限的情况下,得充分
       利用手头的每一个工具,挖掘更多问题

    根据指标找工具

    从性能工具出发,最大化利用已有的工具,找到想要的指标
    根据工具查找指标(内存性能)

     


    如何快速分析内存的性能指标

    在实际环境中,我们希望尽可能快的定位系统瓶颈,然后尽可能快的优化性能,就是要又快又准的性能相关的问题
    虽然内存性能指标很多,但都是魏了描述内存的原理,指标间自然不会完全孤立,一般都会有关联,反过来说,这些关联也正是源于系统的内存原理
    为了快速定位内存问题,可以先运行几个覆盖面比较大的性能工具,如free,top,vmstat,pidstat等
    具体粉丝思路如下
    1.先用free和top,查看系统整体的内存使用情况
    2.再用vmstat和pidstat,查看一段时间的趋势,从而判断出内存的问题类型
    3.最后进行详细分析,比如内存分配分析,缓存/缓冲区分析,具体进程的内存使用分析等

    相关流程图如下

    几个例子
    1.当通过free发现大部分内存都会缓存占用后,就可以使用vmstat或者sar观察缓存变化趋势,确认缓存的
      使用是否还在继续增大,如果继续增大,说明导致缓存升高的进程还在运行,再用cachestat和cachetop
      分析这些缓存到底被哪里占用
    2.用free发现可用内存不足,首先要确认内存是否被缓存/缓冲区占用,排除缓存/缓冲区后,可以继续用
       pidstat或top,定位占用内存最多的进程,找出进程后,再通过进程内存空间工具(如pmap)分析
       进程地址空间中内存的使用情况
    3.当通过vmstat或sar发现内存不断增长,可以分析是否存在内存泄露问题,使用memleak检查是否存在
       内存泄露,memleak输出内存泄露的进程以及调用堆栈

     


    虽然内存的性能指标和性能工具都很多,但理解其原理后,会发现他们之间有一定关联
    找到内存问题来源后,下一步就是相应的优化工作了,内存调优最重要的是,保证应用程序的热点数据放到内存中,并尽量减少换页和交换
    常见的优化思路如下
    1.最好禁止Swap,如必须开启Swap,降低swappiness的值,减少内存回收时Swap的使用倾向
    2.减少内存的动态分配,比如可以使用内存池,大页(HugePage)等
    3.尽量使用缓存和缓冲区来访问数据,比如可以使用堆栈明确声明内存空间,来存储需要缓存的数据,或
      用Redis这类的外部缓存组建,优化数据的访问
    4.使用cgroups等方式限制进程的内存使用情况,这样可以确保系统内存不会被异常进程耗尽
    5.通过/proc/[PID]/oom_adj,调整核心应用的oom_score,可以保证及时内存紧张,核心应用也不会被OOM
      杀死
     

     

     

    展开全文
  • Linux性能优化-网络性能优化思路

    千次阅读 2019-03-01 13:15:53
    网络性能优化思路
  • 秒杀系统架构优化思路

    千次阅读 2018-06-12 14:48:12
    3)秒杀系统,库存只有一份,所有人会在集中的时间读写这些数据,多个人读一个数据。 例如:小米手机每周二的秒杀,可能手机只有1万部,但瞬时进入的流量可能是几百几千万。又例如:12306抢票,票是有限的,库存...
  • SLAM流程优化后端

    千次阅读 2019-07-09 20:28:19
    优化后端: SLAM的优化后端完成工作主要是对视觉前端得到的不够准确的相机...因此,后端优化思路就是从全局(整个相机运动过程)中选取一些关键帧,利用这些关键帧之间的关系建立起时间空间跨度更大的、需要同时...
  • 数据库优化一般思路(个人经验之谈)

    万次阅读 多人点赞 2017-10-17 10:38:54
    随着系统规模的不断增加,数据量并发量不断增大,整个系统架构中最先受到冲击而形成瓶颈的,定然是数据库,因此数据库层面的优化,是一个程序员不可或缺的技能,以下是我在使用数据库中的一些心得,有不足之处,还...
  • 业务流程优化设计之思想原则

    千次阅读 2008-11-23 08:31:00
    大致都离不开“企业流程优化和再造”、但到底什么是“企业流程优化(再造)”,又应依据什么来对企业进行“流程优化”或者“流程再造”呢,下文将详细论述: 核心思想总体思路 业务流程优化的核心思想是减少非...
  • ERP业务流程优化设计之思想原则

    千次阅读 2010-09-01 13:14:00
    <br />核心思想总体思路 业务流程优化的核心思想是减少非增值活动,减少等待时间、重复工作、协调工作量,从而提高增值活动效率。 主要依据以下思想原则: v 实现从传统面向职能管理转变...
  • 秒杀系统优化思路

    万次阅读 2016-10-18 14:26:26
    原创:58沈剑 ...3)秒杀系统,库存只有一份,所有人会在集中的时间读写这些数据,多个人读一个数据。   例如:小米手机每周二的秒杀,可能手机只有1万部,但瞬时进入的流量可能是几百几千万。 又例如:1230
  • 缺陷驱动的流程优化和技术引进

    千次阅读 热门讨论 2011-06-27 22:12:00
    软件领域一个非常大的特点是流程和技术变化相当的快。作为一个软件企业,面对日新月异的开发流程和开发技术,何时、如何选择及引进新的流程和技术变得十分重要。这篇文章主要讨论的是进行选择引进时的出发点,我称...
  • 谈到ERP理论的核心思想,大致都离不开“企业流程优化和再造”、但到底什么是“企业流程优化(再造)”,又应依据什么来对企业进行“流程优化”或者“流程再造”呢,谈到ERP理论的核心思想,大致都离不开“企业流程...
  • 电商秒杀系统设计思路和实现方法

    万次阅读 多人点赞 2017-05-26 00:06:35
    正常电子商务流程 (1)查询商品;(2)创建订单;(3)扣减库存;(4)更新订单;(5)付款;(6)卖家发货 秒杀业务的特性 (1)低廉价格;(2)大幅推广;(3)瞬时售空;(4)一般是定时上架;(5)时间短、...
  • 游戏服务器之服务器优化思路

    千次阅读 2014-07-16 01:59:31
    游戏服务器之服务器优化思路
  • 企业微信组织架构同步优化思路

    万次阅读 2018-02-12 16:03:25
    写在前面企业微信在快速发展过程中,陆续有大企业加入使用,企业微信初版采用全量同步方案,该方案在大企业下存在流量性能两方面的问题,每次同步消耗大量流量,且在 iPhone 5s 上拉取 10w+...
  • 架构评审方法和思路总结

    千次阅读 2016-11-14 10:18:07
    在前期和业务产品,开发及运维的交流和准备材料过程中,发现虽然已经经过了一年的评审,沟通和交流,但大家对为什么要做架构评审,怎样做架构评审,其中的思路和流程都还存在一定的不了解的地方,所以这里自己先...
  • 为了支撑企业流程管理及流程穿越的实施,需要系统平台提供流程快速开发平台能力。
  • 弱覆盖的优化思路

    千次阅读 2018-12-13 14:11:00
    弱覆盖的优化思路: 1、 基于成本考虑,一般都是先查看网管系统,查看有没有告警,指标功率设置是否合理; 2、 如果后台参数都没有问题,则去现场差看覆盖是否合理(如果覆盖不合理,则需要塔工上站适当调节方位...
  • 业务流程管理模型优化设计

    千次阅读 2015-07-01 08:21:40
    在需求的驱动下,对业务流程管理模型进行优化,分析业务、表单、工作流三者关系,给出优化的设计方案。
  • 上行PHR余量提升优化思路

    万次阅读 2019-06-21 10:20:58
    低PHR(功率余量报告)处理流程思路 低PHR(功率余量报告)优化思路 1、覆盖优化:梳理出全网低PHR问题小区同时存在弱覆盖、重叠覆盖、过覆盖严重的小区,进行优先处理;并通过现场对问题小区进行勘查,根据实际...
  • 机器学习模型应用以及模型优化的一些思路

    万次阅读 多人点赞 2017-03-09 19:55:45
    本文会介绍如何应用机器学习模型来构建一个智能化应用的通用的过程以及过程中每个环节一些实践性的思路,包括问题界定定义、 label标注的定义、 数据样本的筛选构造、 选择机器学习算法、 确定模型性能的度量...
  • 使用RNN解决NLP中序列标注问题的通用优化思路

    万次阅读 多人点赞 2016-02-23 19:11:46
    /* 版权声明:可以任意转载,转载时请标明文章原始出处作者信息 .*/    author: 张俊林     (想更系统地学习深度学习知识?请参考:深度学习枕边书) 序列标注问题应该说是自然语言处理中最...
  • 数据分析的一般流程和方法

    万次阅读 多人点赞 2017-09-06 13:58:12
    一般情况下,回归分析的方法可以满足很大一部分的分析需求,当然你也可以了解一些数据挖掘的算法、特征提取的方法优化自己的模型,获得更好地结果。 5.数据可视化及数据报告的撰写 分析结果最直接的...
  • 优化后的秒杀业务流程 【总结】 秒杀实现的优化思路,能缓存就去redis缓存起来,然后放到队列中,让队列去处理。
  • 微服务构建思路方法

    千次阅读 多人点赞 2018-12-15 18:13:13
    网上对微服务的讨论更多是微服务开发框架的使用,较少深入讨论微服务拆分、设计构建。我们提出过采用主数据思想来构建微服务体系,目前也有采用DDD方式来设计微服务的,这里我们探讨下微服务构...
  • 原理:分为标记清除两个阶段:首先标记出所有的需要回收的对象,在标记完成以后统一回收所有被标记的对象。 特点:(1)效率问题,标记清除的效率都不高;(2)空间的问题,标记清除以后会产生大量不连续的...
  • SSM整合开发(四)—高并发优化思路首先感谢慕课网的老师,讲的真的很棒,学习很多书本上学不到的实用知识。学习课程的地址:https://www.imooc.com/learn/632老师的GitHub地址:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 114,988
精华内容 45,995
关键字:

优化流程的思路和方法