[{"data":1,"prerenderedAt":705},["ShallowReactive",2],{"page-Profiling-1":3,"page-count-Profiling":704},[4],{"id":5,"title":6,"body":7,"date":681,"description":13,"extension":682,"meta":683,"navigation":686,"path":698,"seo":699,"stem":700,"tags":701,"__hash__":703},"blogs\u002F_legacy\u002F2017\u002F2017-07-30-ue4-profiling-preview.md","初探UE4中的Profiling",{"type":8,"value":9,"toc":633},"minimark",[10,14,17,34,37,42,45,52,55,58,61,66,69,77,81,84,87,90,94,97,102,107,110,113,116,119,122,125,129,132,137,140,144,147,152,156,159,164,168,176,182,185,188,191,195,198,201,204,207,213,216,221,224,251,259,262,267,271,274,277,280,283,286,290,293,296,301,304,309,312,318,321,324,327,332,335,338,341,344,347,350,353,356,359,363,366,369,372,376,379,382,385,389,392,396,402,405,408,411,414,419,422,425,428,431,435,438,444,449,457,460,464,467,470,473,477,480,483,487,490,496,499,505,508,512,515,518,522,525,528,531,534,537,544,547,550,553,557,560,563,567,570,574,577,580,583,586,590,593,596,600,603,606,609,612,615,618,621,624,627,630],[11,12,13],"p",{},"Profililng是成品制作过程中非常重要的一个步骤，通过Profiling才能提高运行效率使得作品达到用户能够运行从程度。",[11,15,16],{},"UE4本身有提供用于Profiling的工具，但是要正确的将其用于优化却需要经过一些学习。在掌握基础之后，要很好的完成优化，需要的是更多的实践所累积的经验了。",[11,18,19,20,27,28,33],{},"本文的主要内容来自对Tech Art Aid的[",[21,22,26],"a",{"href":23,"rel":24},"https:\u002F\u002Fwww.youtube.com\u002Fplaylist?list=PLF8ktr3i-U4A7vuQ6TXPr3f-bhmy6xM3S",[25],"nofollow","Profiling系列视频","]的总结和官方的[",[21,29,32],{"href":30,"rel":31},"https:\u002F\u002Fdocs.unrealengine.com\u002Flatest\u002FCHN\u002FEngine\u002FPerformance\u002Findex.html",[25],"性能分析文档","]。",[11,35,36],{},"不过由于Profiling本身的覆盖范围较广，所以这里也只是记录刚刚开始接触的内容。同时，由于并没有很深入的了解过渲染相关的知识，文中有的术语可能存在翻译不正确的现象：D",[38,39,41],"h2",{"id":40},"scalability","Scalability",[11,43,44],{},"UE4中有提供所谓的可延展性功能，这个功能可以用于快速的调整引擎的工作性能-效率平衡。",[11,46,47],{},[48,49],"img",{"alt":50,"src":51},"image","\u002Fwp-content\u002Fuploads\u002F2017\u002F07\u002Fimage_thumb.png",[11,53,54],{},"但是这个功能并不是为优化而设计的，虽然其中使用到的一些设置可以用于优化，但是Scalability本身更多的是为了让开发者为用户提供一个快速的配置。",[11,56,57],{},"通常在游戏配置界面中能够看到的配置就是从Scalability入手的。",[11,59,60],{},"可以在蓝图中看到一些类似这样的函数",[11,62,63],{},[48,64],{"alt":50,"src":65},"\u002Fwp-content\u002Fuploads\u002F2017\u002F07\u002Fimage_thumb-1.png",[11,67,68],{},"社区中也有共享简单的游戏配置的实现，在设置窗口中可以对不同的渲染等级进行预览，以评估游戏在目标渲染等级上的表现。",[11,70,71,72,33],{},"更多的关于Scalability的内容可以参考[",[21,73,76],{"href":74,"rel":75},"https:\u002F\u002Fdocs.unrealengine.com\u002Flatest\u002FCHN\u002FEngine\u002FPerformance\u002FScalability\u002Findex.html",[25],"官方文档",[38,78,80],{"id":79},"profiling","Profiling",[11,82,83],{},"通常性的优化目标就是提高帧率，降低每帧消耗时间。由于现代的CPU通常比较强大，只要不是在游戏逻辑中进行复制的物理模拟或者高强度的AI逻辑运算，性能的瓶颈都会出在与渲染相关的地方。",[11,85,86],{},"在进行优化的时候需要注意的是，要在项目配置中关闭Smooth Frame Rate，否则没有办法很好的对性能进行分析。对于打包优化，官方的建议是至少在Development以上的级别下进行，因为Debug下有很多东西非常的影响性能。",[11,88,89],{},"同时关闭垂直同步在某些情况下也是必要的，使用r.VSync指令就可以了，在打包版本中也可以使用命令行参数-NoVSync。",[91,92,93],"h3",{"id":93},"常用指令",[11,95,96],{},"官方的stat指令集中提供了大量的用于性能优化的指令，其中比较常用的是通用的问题定位指令，在找到性能瓶颈之后，可以进一步的使用相关的指令进行问题的查看。",[98,99,101],"h4",{"id":100},"stat-unit","stat unit",[11,103,104],{},[48,105],{"alt":50,"src":106},"\u002Fwp-content\u002Fuploads\u002F2017\u002F07\u002Fimage_thumb-2.png",[11,108,109],{},"使用stat unit就可以粗略的对问题的来源进行定位。",[11,111,112],{},"为了差分渲染与游戏逻辑的性能消耗，可以通过r.SetRes或者r.ScreenPercentage来有效的降低渲染消耗来辅助定位。",[11,114,115],{},"这里面Frame与stat fps输出的帧时间是一样的，其他的三项则对应不同的性能瓶颈：",[11,117,118],{},"Game为CPU游戏线程，如果是这里有问题的话通常就是游戏逻辑本身设计太消耗性能了。",[11,120,121],{},"Draw为CPU渲染线程，这里是负责向GPU发送DrawCall的，已经是渲染相关的优化。",[11,123,124],{},"GPU就是GPU的帧时间了，完全的渲染相关。",[98,126,128],{"id":127},"stat-scenerendering","stat SceneRendering",[11,130,131],{},"指令可以用于更加详细的对性能瓶颈进行分析",[11,133,134],{},[48,135],{"alt":50,"src":136},"\u002Fwp-content\u002Fuploads\u002F2017\u002F07\u002Fimage_thumb-3.png",[11,138,139],{},"通过寻找性能消耗较大的pass，对其进行针对性的优化就好了。",[98,141,143],{"id":142},"stat-gpu","stat gpu",[11,145,146],{},"则可以用于查看gpu上的性能消耗比例",[11,148,149],{},[48,150],{"alt":50,"src":151},"\u002Fwp-content\u002Fuploads\u002F2017\u002F07\u002Fimage_thumb-4.png",[98,153,155],{"id":154},"startfirestat-stopfile","StartFire\u002Fstat stopfile",[11,157,158],{},"这组指令可以将性能分析文件生成到Saved\u002FProfiling文件夹中。这些文件可以使用Front End中的分析器进行加载并分析：",[11,160,161],{},[48,162],{"alt":50,"src":163},"\u002Fwp-content\u002Fuploads\u002F2017\u002F07\u002Fimage_thumb-5.png",[98,165,167],{"id":166},"gpu-visualizer","GPU Visualizer",[11,169,170,171,175],{},"在优化中最常使用的工具还是GPU Visualizer，按快捷键",[172,173,174],"span",{},"Ctrl+Shift+,","就会出来了。",[11,177,178],{},[48,179],{"alt":180,"src":181},"SNAGHTMLbe577a","\u002Fwp-content\u002Fuploads\u002F2017\u002F07\u002FSNAGHTMLbe577a_thumb.png",[11,183,184],{},"性能优化从这里入手的话就比较直观一些。",[91,186,187],{"id":187},"渲染优化",[11,189,190],{},"渲染上会产生的瓶颈通常分为三大类别，Pixel-bound、Vertex-bound、Memory-bound。",[98,192,194],{"id":193},"pixel-bound","Pixel-bound",[11,196,197],{},"Translucent的材质物体的大规模使用，半透明粒子都会导致在像素渲染级别上出现瓶颈。",[11,199,200],{},"在材质的使用上，Opaque的性能是最高的，因为可以有效的进行Z-buffer裁剪，其次是Masked材质，性能消耗最高的是Translucent。尤其是场景内出现大规模的半透明物体叠加的时候，就会产生大量的绘制负担。",[11,202,203],{},"在场景布局上，利用Opaque的物体进行遮蔽，尽量的避免镜头内出现大量半透明物体，有效的利用LOD都是非常重要的。",[11,205,206],{},"还有一个方面就是Quad Overdraw，这个似乎是由于GPU的渲染机制引起的，直接引用视频中看到的图片：",[11,208,209],{},[48,210],{"alt":211,"src":212},"clip_image001","\u002Fwp-content\u002Fuploads\u002F2017\u002F07\u002Fclip_image001_thumb.png",[11,214,215],{},"在优化上，要尽量避免屏幕空间内出现小而长的三角形，将其分割为更多的三角形反而更加有效。同时，将屏幕内足够小的物体进行LOD，也可以有效的避免性能消耗。对于Foliage上的叶子，可以使用Particle Trimming来避免过度绘制，据说Speed Tree是自带这个功能的，不过由于没有使用过所以无法确认。particle trimming如其名，在粒子的优化中也有作用。",[11,217,218],{},[48,219],{"alt":50,"src":220},"\u002Fwp-content\u002Fuploads\u002F2017\u002F07\u002Fimage_thumb-6.png",[11,222,223],{},"不过没有实际使用过这个功能，按照介绍的话，性能提升还是比较明显的：",[225,226,227,230,233,236,239,242,245,248],"blockquote",{},[11,228,229],{},"Original: 100%",[11,231,232],{},"Aligned rect: 69.23%",[11,234,235],{},"Optimized 3 verts: 70.66%",[11,237,238],{},"Optimized 4 verts: 60.16%",[11,240,241],{},"Optimized 5 verts: 55.60%",[11,243,244],{},"Optimized 6 verts: 53.94%",[11,246,247],{},"Optimized 7 verts: 52.31%",[11,249,250],{},"Optimized 8 verts: 51.90%",[11,252,253,254,33],{},"这个数据来自于[",[21,255,258],{"href":256,"rel":257},"http:\u002F\u002Fwww.humus.name\u002Findex.php?page=Comments&ID=266",[25],"这里",[11,260,261],{},"Quared OverDraw可以通过调整为检查模式来对场景中的物体进行检查",[11,263,264],{},[48,265],{"alt":50,"src":266},"\u002Fwp-content\u002Fuploads\u002F2017\u002F07\u002Fimage_thumb-7.png",[98,268,270],{"id":269},"vertex-bound","Vertex-bound",[11,272,273],{},"通常受到影响的就是场景中三角形的数量，如果印象没有错的话，当前UE4内部所有的面应该都是三角形的。会在这里产生瓶颈的还有阴影投射与曲面细分，关于曲面细分，官方有建议是尽量不要使用，在建模阶段直接进行细分是更加具有效率的。",[11,275,276],{},"UV Seam和Hard Edges会额外的增加计算的顶点计算的负担，要尽量避免减少使用的频度。",[11,278,279],{},"同时Morph Target与WolrdPostionOffset也会产生更多的顶点计算，Skinned Mesh也是如此，不过这些方面，除了WorldPostionOffset可以尽量避免使用之外，只能从游戏逻辑本身的设计上入手了呢。",[11,281,282],{},"如果有使用LandScape的话，尽量减少LandScape的面数可以很好的提高性能。",[11,284,285],{},"为了避免过量的顶点计算负担，对于远景物体尽量使用BillBoard或者Imposter meshes、Skyboxe texture来代替3D物体。",[98,287,289],{"id":288},"memory-bound","Memory-bound",[11,291,292],{},"如果有大量的材质使用了不同的贴图，导致Texture Sample的数量爆炸的话，就会自然的变成瓶颈。",[11,294,295],{},"UE4有使用Texture Streaming，如果存储空间爆炸了的话，就会出现贴图模糊的情况，这时候可以使用Stat Streaming指令进行分析。",[11,297,298],{},[48,299],{"alt":50,"src":300},"\u002Fwp-content\u002Fuploads\u002F2017\u002F07\u002Fimage_thumb-8.png",[11,302,303],{},"对于使用相同的材质的情况，可以通过材质中的设定让他们共享Texture。同时在材质中启用GPU本身支持的压缩可以有效的减少存储空间的占用，尽量的使用Texture Packing也是非常的重要的。载入的时候尽量使用Mip级别较低的图片，可以有效的减少存储占用。在材质的贴图使用中，尽量的进行优化的配置也非常的重要。",[11,305,306],{},[48,307],{"alt":50,"src":308},"\u002Fwp-content\u002Fuploads\u002F2017\u002F07\u002Fimage_thumb-9.png",[11,310,311],{},"对于不需要太精细的贴图可以限制其最大尺寸",[11,313,314],{},[48,315],{"alt":316,"src":317},"clip_image0014","\u002Fwp-content\u002Fuploads\u002F2017\u002F07\u002Fclip_image0014_thumb.png",[11,319,320],{},"另外，光照贴图等也是被算作贴图占用存储空间的，因此也有在这里产生瓶颈的可能性。因此尽量的调低光照贴图的分辨率可以很好的提高性能。",[11,322,323],{},"使用Alt+0\u002FLight Map Density可以对场景中的光照贴图密度进行分析。",[11,325,326],{},"在窗口>统计总也能进一步的对当前的存储使用状况进行分析",[11,328,329],{},[48,330],{"alt":50,"src":331},"\u002Fwp-content\u002Fuploads\u002F2017\u002F07\u002Fimage_thumb-10.png",[98,333,334],{"id":334},"前向渲染与延迟渲染",[11,336,337],{},"UE4面向VR可以区分前向渲染与延迟渲染，两方各有优劣，在优化上也会有所不同。引擎采用的前向渲染方式是Cluster Forward Shading(Forward+)，详细的技术细节并没有关注过，不过通常前向渲染的光照计算成本会高些，尤其是光照数量较多时会产生明显的性能下降。",[11,339,340],{},"使用缓存区可视化功能，可以对延迟渲染使用的缓存进行查看。",[38,342,343],{"id":343},"按通道优化",[11,345,346],{},"优化的过程，通常是在玩家通常的地点放置观察摄像，然后通过这个固定点使用GPU Visualizer进行优化。",[11,348,349],{},"在使用GPU Visualizer时，会看到各个通道的性能消耗比例，这样就可以针对不同的通道进行优化了。",[11,351,352],{},"在打包模式下按下GPU Visualizer后，不会出现界面，但是相关数据会被记录到Log中。",[11,354,355],{},"在GPU Visualizer中对帧时间消耗进行排序可以帮助快速找到当前消耗的瓶颈，不过有的pass的消耗可能是不得已的，这里大概就是需要经验的地方了。pass根据工作方式大体上分别工作于屏幕空间和运算空间，像是PostProcess这样的后期处理以及延迟渲染的光照都是工作在屏幕空间的。而像是Z-Buffer的生成这一类的操作则是通过运算空间进行的。一般工作在屏幕空间的通道受到渲染分辨率的影响就会比较大，例如SSAO、AA等。而在运算空间的Pass就会受到Mesh的数量、面数、shader的复杂度的影响。",[91,357,358],{"id":358},"光照",[98,360,362],{"id":361},"lightcompositiontasks_prelighting","LightCompositionTasks_PreLighting",[11,364,365],{},"这个通道被SSAO以及非D-Buffer类型的Decals使用。",[11,367,368],{},"这里的性能消耗在屏幕空间上，通过在PostProcess中降低AO的半径和消退距离可以减少其产生的运算负担。",[11,370,371],{},"同时，非D-Buffer类的Decals也会对其产生影响。",[98,373,375],{"id":374},"composition-after-lighting","Composition After Lighting",[11,377,378],{},"只影响Subsurface Profile的Shading Model的SSS效果的通道。",[11,380,381],{},"由于工作于屏幕空间，减少其在屏幕中的占比就可以有效的减少消耗。比如使用LOD之类的。",[11,383,384],{},"使用Subsurface的Shading Model或者Matcap之类的来进行替代也可以降低这里的消耗。",[98,386,388],{"id":387},"compute-light-grid","Compute Light Grid",[11,390,391],{},"用于计算光照相关性的pass，减少动态光照的数量就可以减低消耗。",[98,393,395],{"id":394},"lights","Lights",[11,397,398],{},[48,399],{"alt":400,"src":401},"clip_image0016","\u002Fwp-content\u002Fuploads\u002F2017\u002F07\u002Fclip_image0016_thumb.png",[11,403,404],{},"延迟渲染的光照是基于DBuffer在屏幕空间呢进行演算的，因此受屏幕分辨率的影响也比较大。",[11,406,407],{},"无论是静态光照还是动态光照，都会受到光照本身的数量以及范围的影响。",[11,409,410],{},"而动态光照的效率额外的受到光照影响到的面数的影响。",[11,412,413],{},"光照的优化应该尽量的减少光照范围的重叠，避免大范围的动态光照，关闭没有太大必要性物体的动态阴影投射。光照的重叠等的查看可以通过调整视图",[11,415,416],{},[48,417],{"alt":50,"src":418},"\u002Fwp-content\u002Fuploads\u002F2017\u002F07\u002Fimage_thumb-11.png",[11,420,421],{},"来进行有效的排查。",[11,423,424],{},"光照类型的性能消耗是点光源>直线光源>聚光灯，在使用光照时，如果能用IES或者光照函数进行替代的话，不要使用很多个光源组合成类似的效果。",[11,426,427],{},"同时光照函数通常的性能消耗大于IES，其消耗受到光照材质本身的复杂度的影响比较大。",[11,429,430],{},"在对光照范围进行优化时，可以通过关闭Use Inverse Squared Falloff，并自己设置Light Falloff Exponent来达到减小光照范围达到类似光照效果。",[98,432,434],{"id":433},"filter-translucent-volume","Filter Translucent Volume",[11,436,437],{},"这是半透明物体的光照计算时会用到的pass",[11,439,440],{},[48,441],{"alt":442,"src":443},"clip_image0018","\u002Fwp-content\u002Fuploads\u002F2017\u002F07\u002Fclip_image0018_thumb.png",[225,445,446],{},[11,447,448],{},"带光照的半透明物体的光照大多数来源于一系列面向视锥体的cascade处理过的体积贴图。 这样在体积内的任意点，光照均为单次，但缺点就是体积贴图的分辨率比较低，而且从观察者角度来说，只涵盖了有限的深度范围。",[11,450,451,452,33],{},"详细的说明可以参考官方文档：[",[21,453,456],{"href":454,"rel":455},"https:\u002F\u002Fdocs.unrealengine.com\u002Flatest\u002FCHN\u002FEngine\u002FRendering\u002FLightingAndShadows\u002FLitTranslucency\u002Findex.html",[25],"带光照的半透明物体",[11,458,459],{},"这里产生了瓶颈的话要检查光照的数目、范围和影响到的物体的数量。",[98,461,463],{"id":462},"shadowdepths","ShadowDepths",[11,465,466],{},"这个生成通过光源进行阴影投射的深度数据的pass。",[11,468,469],{},"作用与这里的消耗主要受到开启了投影的光的数目、动态光照影响的面数、以及阴影的质量的影响。",[11,471,472],{},"阴影的质量可以通过Sg.shadow quality进行全局的调节。",[98,474,476],{"id":475},"shadow-projection","Shadow Projection",[11,478,479],{},"实际的阴影投射，工作于屏幕空间，所以受分辨率影响，同时也会受到投影的光照数量和范围的影响。",[91,481,482],{"id":482},"基础通道",[98,484,486],{"id":485},"prepass-dom_","PrePass DOM_",[11,488,489],{},"EarlyZPass，对非透明物体进行的早期的深度计算。",[11,491,492],{},[48,493],{"alt":494,"src":495},"clip_image00110","\u002Fwp-content\u002Fuploads\u002F2017\u002F07\u002Fclip_image00110_thumb.png",[11,497,498],{},"数据似乎被用于遮蔽计算，如果不使用Dbuffer Decals的话可以关掉。虽然视频中是这样建议的，但是早期的深度计算可以在BasePass之前进行遮蔽计算，能让basepass以及之后所有的通道的计算减少很多。而且即便在这里不进行深度计算，会影响这里的运算量的变量依然会作用与后面的深度计算阶段，因此关闭EarlyZPass还是需要多做考虑的。另外要使用DBuffer Decals的话必须使用Opaque and masked的zpass计算，否则应该会出现奇怪的现象。",[11,500,501],{},[48,502],{"alt":503,"src":504},"clip_image00112","\u002Fwp-content\u002Fuploads\u002F2017\u002F07\u002Fclip_image00112_thumb.png",[11,506,507],{},"性能上受到非透明物体的面数的影响，同时根据上面的选项不同也受到Masked的材质的影响。",[98,509,511],{"id":510},"hzb","HZB",[11,513,514],{},"Hierarchical Z-Buffer，用于计算HZB遮蔽，同时也会被屏幕空间内的射线演算使用，例如屏幕空间反射计算、AO等。同时被用于Mip的设置。",[11,516,517],{},"受屏幕空间的大小影响。据官方描述，HZB拥有较高的固定性能消耗，每个物体所造成的消耗较小。可以通过r.HZBOcclusion来调整运算的类型。",[98,519,521],{"id":520},"base-pass","Base Pass",[11,523,524],{},"对非透明的物体进行演算并填充到GBuffer，使用缓冲区可视化模式可以在视图中看到效果。几乎所有的延迟渲染都受到其影响，因此才叫基础通道。",[11,526,527],{},"其计算结果包括base color, metallic, specular, roughness, normal, sss profile，并且Decals、Fog以及Velocity的计算也在此处。",[11,529,530],{},"其开销受到屏幕空间尺寸、物体数量、面数、Decals的数量、Shader的复杂度，生成的过程中包含光照贴图的推送，因此也会受到光照贴图的大小的影响。",[11,532,533],{},"可以通过Stat rhi指令检查各种贴图和triangle的消耗。",[11,535,536],{},"另外，前向渲染的光照也在这里进行，此时光照的数量也会影响到这里的消耗。",[98,538,540],{"id":539},"translucency",[541,542,543],"strong",{},"Translucency",[11,545,546],{},"半透明的材质以及光照演算，通过Stat gpu中的Translucency and Translucent Lighting可以进一步查看。",[11,548,549],{},"消耗受到屏幕空间大小以及屏幕内的半透明物体的数量影响，半透明物体的光照计算要尽量减少过度绘制。以及避免过多的需要进行半透明光照计算的光的数量。",[91,551,552],{"id":552},"其他",[98,554,556],{"id":555},"particle-simulationinjection","Particle Simulation\u002FInjection",[11,558,559],{},"粒子模拟，这里只展示GPU粒子的消耗，性能主要受粒子数量以及是否开启了基于深度的粒子碰撞影响。",[11,561,562],{},"粒子的优化主要通过LOD以及设计上的优化进行。",[98,564,566],{"id":565},"post-process","Post process",[11,568,569],{},"UE4的后期处理功能比较多，AA、DOF、自动曝光以及很多其他的功能都在其中。每种PP特效都会产生额外的性能消耗，如果使用了PP材质的话，其复杂度也会影响性能。",[98,571,573],{"id":572},"relection-envirionment","Relection Envirionment",[11,575,576],{},"反射捕捉控件的计算缓存",[11,578,579],{},"可以将显示模式调整为Reflections来查看各个控件对缓存的影响",[11,581,582],{},"通常的建议是，放一个大范围的低精度反射捕捉，然后在需要的地方尽量不重叠的放置高精度的捕捉控件。",[11,584,585],{},"影响性能的主要就是捕捉控件的数量及范围，也受屏幕空间的大小影响。",[98,587,589],{"id":588},"render-velocities","Render Velocities",[11,591,592],{},"速度主要用于TAA以及Motion Blur，受到移动物体的数量以及其面数的影响。",[11,594,595],{},"主要的优化策略是使用LOD。",[98,597,599],{"id":598},"screen-space-reflections","Screen Space Reflections",[11,601,602],{},"屏幕空间反射通过以下连个指令来进行调节：",[11,604,605],{},"r.ssr.maxroughness 0.0-1.0",[11,607,608],{},"r.ssr.quality 0..4",[11,610,611],{},"其中Maximum roughness决定着计算的范围的大小。",[38,613,614],{"id":614},"第三方工具",[11,616,617],{},"要使用第三方工具进行Profiling，一般需要打包。在进行捕捉之前，打开Toggle draw event的话可以让UE4提供更多的信息给第三方Profiling工具，捕捉完之后则使用同一个命令关闭就好。",[11,619,620],{},"第三方工具有Intel的GraphicsPerformance Analyzers、AMD的GPU PerfStudio以及开源的RenderDoc等。",[11,622,623],{},"使用第三方工具可以提供一些在硬件层次上获得的细节，在使用UE4本身的Profiling工具无法定位问题时可以进行尝试。",[38,625,626],{"id":626},"总结",[11,628,629],{},"总体而言，Profiling是一个复杂的过程。由于是面向最终用户的，需要花费很多精力在上面。",[11,631,632],{},"通常的策略包括LOD、裁剪、避免重叠以及低性能的近似替代等，很多的问题还需要在实践中才能发现和解决。",{"title":634,"searchDepth":635,"depth":636,"links":637},"",2,3,[638,639,655,679,680],{"id":40,"depth":635,"text":41},{"id":79,"depth":635,"text":80,"children":640},[641,649],{"id":93,"depth":636,"text":93,"children":642},[643,645,646,647,648],{"id":100,"depth":644,"text":101},4,{"id":127,"depth":644,"text":128},{"id":142,"depth":644,"text":143},{"id":154,"depth":644,"text":155},{"id":166,"depth":644,"text":167},{"id":187,"depth":636,"text":187,"children":650},[651,652,653,654],{"id":193,"depth":644,"text":194},{"id":269,"depth":644,"text":270},{"id":288,"depth":644,"text":289},{"id":334,"depth":644,"text":334},{"id":343,"depth":635,"text":343,"children":656},[657,666,672],{"id":358,"depth":636,"text":358,"children":658},[659,660,661,662,663,664,665],{"id":361,"depth":644,"text":362},{"id":374,"depth":644,"text":375},{"id":387,"depth":644,"text":388},{"id":394,"depth":644,"text":395},{"id":433,"depth":644,"text":434},{"id":462,"depth":644,"text":463},{"id":475,"depth":644,"text":476},{"id":482,"depth":636,"text":482,"children":667},[668,669,670,671],{"id":485,"depth":644,"text":486},{"id":510,"depth":644,"text":511},{"id":520,"depth":644,"text":521},{"id":539,"depth":644,"text":543},{"id":552,"depth":636,"text":552,"children":673},[674,675,676,677,678],{"id":555,"depth":644,"text":556},{"id":565,"depth":644,"text":566},{"id":572,"depth":644,"text":573},{"id":588,"depth":644,"text":589},{"id":598,"depth":644,"text":599},{"id":614,"depth":635,"text":614},{"id":626,"depth":635,"text":626},"2017-07-30","md",{"layout":684,"status":685,"published":686,"author":687,"author_login":689,"author_email":690,"wordpress_id":691,"wordpress_url":692,"date_gmt":693,"excerpt":694},"post","publish",true,{"display_name":688,"login":689,"email":690,"url":634},"风铃","flinkor","flinkor@foxmail.com",1845,"\u002F\u002F?p=1845","2017-07-30 08:10:34 +0000",{"type":8,"value":695},[696],[11,697,13],{},"\u002F2017-07-30-ue4-profiling-preview",{"title":6,"description":13},"_legacy\u002F2017\u002F2017-07-30-ue4-profiling-preview",[702,80],"UE4","WoD3ma-Xm1UBlc5-o8OYia9aLOKDskWvsGgKObwEBA0",1,1788763179919]