[{"data":1,"prerenderedAt":2129},["ShallowReactive",2],{"blog-page-16":3,"blog-count":2128},[4,340,1005,1206,1964],{"id":5,"title":6,"body":7,"date":316,"description":13,"extension":317,"meta":318,"navigation":321,"path":333,"seo":334,"stem":335,"tags":336,"__hash__":339},"blogs\u002F_legacy\u002F2017\u002F2017-11-11-animatioinstarterpack-note-02.md","AnimatioinStarterPack的使用（下）",{"type":8,"value":9,"toc":302},"minimark",[10,14,17,20,25,28,31,35,38,41,48,51,57,60,63,66,69,72,75,81,84,90,93,97,100,103,106,109,199,202,208,211,217,220,226,229,235,238,244,247,253,256,259,262,265,268,274,277,280,284,287,290,293,296,299],[11,12,13],"p",{},"前面已经对官方的示例动画蓝图进行了还原，但是要作为原型测试时使用还是有些不足。",[11,15,16],{},"当前UE4版本为UE4.18.0。",[11,18,19],{},"这里继续对动画蓝图添加一些基本的功能。",[21,22,24],"h2",{"id":23},"dead","Dead",[11,26,27],{},"死亡动画也是可以放到状态机的，但是如果状态机的结构很复杂的话，就会陷入需要从每个状态拉到Dead状态的窘境。",[11,29,30],{},"这里就需要在制作之前对状态机进行规划，例如其实静止和移动这两个状态是可以合并到一个BlendSpace中去的，再加上下蹲动画的合并，同时，将Jump和RunJump状态进行统一，状态机的数量就会减少。这里由于是原型用的，之后动画资源可能会不一样，就不会进行详细的设计和修改了。",[32,33,34],"h3",{"id":34},"逻辑绑定",[11,36,37],{},"由于这里没有游戏逻辑，所以直接按下P键就判定玩家死亡。",[11,39,40],{},"在Character蓝图中，调用Disable Input来关闭玩家输入，设置标志位，3秒之后重置这些状态。在此就不做其他逻辑了。",[11,42,43],{},[44,45],"img",{"alt":46,"src":47},"clip_image001","\u002Fwp-content\u002Fuploads\u002F2017\u002F11\u002Fclip_image001_thumb-1.png",[11,49,50],{},"在动画蓝图的更新函数中，取得Character的死亡标记，并设置到动画蓝图中",[11,52,53],{},[44,54],{"alt":55,"src":56},"clip_image002","\u002Fwp-content\u002Fuploads\u002F2017\u002F11\u002Fclip_image002_thumb-1.png",[32,58,59],{"id":59},"动画蓝图",[11,61,62],{},"在状态机中添加Dead状态，随便拉一个Dead动画出来播放，不要循环。",[11,64,65],{},"然后从Idle->Dead设定条件为PawnDead，而从Dead->Idle为非PawnDead。",[11,67,68],{},"这样就有了基本的死亡动画逻辑。",[11,70,71],{},"其实官方总共准备了3种略有不同的站立死亡动画，这里可以选择随机的播放一种，使用名为Blend Poses by int的节点即可。",[11,73,74],{},"在Dead状态中，对动画进行操作",[11,76,77],{},[44,78],{"alt":79,"src":80},"clip_image003","\u002Fwp-content\u002Fuploads\u002F2017\u002F11\u002Fclip_image003_thumb-1.png",[11,82,83],{},"DeadAnimatType是新建的Int变量，需要在检测到死亡标志位时随机指定到0~2之间。",[11,85,86],{},[44,87],{"alt":88,"src":89},"clip_image004","\u002Fwp-content\u002Fuploads\u002F2017\u002F11\u002Fclip_image004_thumb-1.png",[11,91,92],{},"这样就有了随机死亡动画的功能了，不过这里由于没有添加Respawn的逻辑，3秒的Delay之后是直接原地站起来复活的:D",[21,94,96],{"id":95},"aimoffset","AimOffset",[11,98,99],{},"这也是UE4提供的动画Asset之一，其主要作用是在移动-静止动画上叠加的额外的瞄准动画。",[32,101,102],{"id":102},"资源准备",[11,104,105],{},"新建一个AimOffset打开编辑，能看到它和BlendSpace一样有两个轴向对动画进行Blend，不同之处在于AimOffset最终是叠加到已有的基础动作之上的。",[11,107,108],{},"要做AimOffset首先需要的是制作各个瞄准方向的基础动作，在AnimationStarterPack中，瞄准动画可以从Aim_Space_Hip的动画中取出，其中共有9个动作，帧数分别为：",[110,111,112,123],"table",{},[113,114,115],"thead",{},[116,117,118,121],"tr",{},[119,120],"th",{},[119,122],{},[124,125,126,135,143,151,159,167,175,183,191],"tbody",{},[116,127,128,132],{},[129,130,131],"td",{},"0",[129,133,134],{},"Aim_Center",[116,136,137,140],{},[129,138,139],{},"10",[129,141,142],{},"Aim_Center_Up",[116,144,145,148],{},[129,146,147],{},"20",[129,149,150],{},"Aim_Center_Down",[116,152,153,156],{},[129,154,155],{},"30",[129,157,158],{},"Aim_Left_Center",[116,160,161,164],{},[129,162,163],{},"40",[129,165,166],{},"Aim_Left_Up",[116,168,169,172],{},[129,170,171],{},"50",[129,173,174],{},"Aim_Left_Down",[116,176,177,180],{},[129,178,179],{},"60",[129,181,182],{},"Aim_Right_Center",[116,184,185,188],{},[129,186,187],{},"70",[129,189,190],{},"Aim_Right_Up",[116,192,193,196],{},[129,194,195],{},"80",[129,197,198],{},"Aim_Right_Down",[11,200,201],{},"操作上，对Anim_Space_Hip进行复制，通过最下方的帧导航到想要的帧。",[11,203,204],{},[44,205],{"alt":206,"src":207},"clip_image0015","\u002Fwp-content\u002Fuploads\u002F2017\u002F11\u002Fclip_image0015_thumb.png",[11,209,210],{},"然后在帧导航条上点击右键，先删除左边的所有帧，再删除右边的所有帧",[11,212,213],{},[44,214],{"alt":215,"src":216},"clip_image0024","\u002Fwp-content\u002Fuploads\u002F2017\u002F11\u002Fclip_image0024_thumb-1.png",[11,218,219],{},"这样就能得到9个只有一帧的动画了，全部选中，然后在右键菜单中使用集合编辑功能。",[11,221,222],{},[44,223],{"alt":224,"src":225},"clip_image0034","\u002Fwp-content\u002Fuploads\u002F2017\u002F11\u002Fclip_image0034_thumb-1.png",[11,227,228],{},"然后对AdditiveSettings属性进行调整",[11,230,231],{},[44,232],{"alt":233,"src":234},"clip_image0044","\u002Fwp-content\u002Fuploads\u002F2017\u002F11\u002Fclip_image0044_thumb.png",[11,236,237],{},"回到刚刚新建的AnimOffset，与BlendSpace类似，设定两个轴向的名称和范围",[11,239,240],{},[44,241],{"alt":242,"src":243},"clip_image005","\u002Fwp-content\u002Fuploads\u002F2017\u002F11\u002Fclip_image005_thumb-1.png",[11,245,246],{},"然后将刚刚生成的9个动作拖放到关键插值点上去",[11,248,249],{},[44,250],{"alt":251,"src":252},"clip_image006","\u002Fwp-content\u002Fuploads\u002F2017\u002F11\u002Fclip_image006_thumb-1.png",[11,254,255],{},"这样就可以了。",[32,257,59],{"id":258},"动画蓝图-1",[11,260,261],{},"接下来，到动画蓝图中对AnimOffset进行使用。",[11,263,264],{},"首先添加两个Float变量，分别命名Aim_Yaw和Aim_Pitch",[11,266,267],{},"然后到动画图表中，添加AnimOffset的使用",[11,269,270],{},[44,271],{"alt":272,"src":273},"clip_image007","\u002Fwp-content\u002Fuploads\u002F2017\u002F11\u002Fclip_image007_thumb-1.png",[11,275,276],{},"这时，在动画蓝图的预览中就可以对AimOffset进行调试了。",[11,278,279],{},"如果要实际使用的话，还要在BlueprintUpdateAnimation事件或者其他地方，对这两个值进行更新。由于我这边是做的TopDown，就不继续操作了。",[21,281,283],{"id":282},"montage","Montage",[11,285,286],{},"其他的一些动画，包括射击动画、装备切换动画都需要用到Montage。",[11,288,289],{},"这些动画都是与具体的资源相关性比较强的，在原型制作阶段制作的话就不会进行更多的时间投入了。",[11,291,292],{},"包括换枪、持枪、射击在内的动画要使用Motage，是因为身体的基本动作是一致的，不可能为每一个状态做一个对应的动画。",[11,294,295],{},"基本的装备切换，都是通过在Montage中添加动画通知，然后将物品切换Socket来做的。",[11,297,298],{},"由于只是要做一个动画蓝图来做原型用，而且要使用Montage的话，就必须从资源开始就有做好的规划，在没有进一步需求的情况下暂时就不会继续做下去了。",[11,300,301],{},"Montage的教程很多，直接搜索就可以了:D。",{"title":303,"searchDepth":304,"depth":305,"links":306},"",2,3,[307,311,315],{"id":23,"depth":304,"text":24,"children":308},[309,310],{"id":34,"depth":305,"text":34},{"id":59,"depth":305,"text":59},{"id":95,"depth":304,"text":96,"children":312},[313,314],{"id":102,"depth":305,"text":102},{"id":258,"depth":305,"text":59},{"id":282,"depth":304,"text":283},"2017-11-11","md",{"layout":319,"status":320,"published":321,"author":322,"author_login":324,"author_email":325,"wordpress_id":326,"wordpress_url":327,"date_gmt":328,"excerpt":329},"post","publish",true,{"display_name":323,"login":324,"email":325,"url":303},"风铃","flinkor","flinkor@foxmail.com",2091,"\u002F\u002F?p=2091","2017-11-11 02:52:21 +0000",{"type":8,"value":330},[331],[11,332,13],{},"\u002F2017-11-11-animatioinstarterpack-note-02",{"title":6,"description":13},"_legacy\u002F2017\u002F2017-11-11-animatioinstarterpack-note-02",[337,338],"UE4","Animation","yvxgzW9FrlIGR1YF3sTA3p7Scjk6Z2_J6JX0053oKt8",{"id":341,"title":342,"body":343,"date":989,"description":347,"extension":317,"meta":990,"navigation":321,"path":999,"seo":1000,"stem":1001,"tags":1002,"__hash__":1004},"blogs\u002F_legacy\u002F2017\u002F2017-10-21-ue4-lighting-troubleshooting-note.md","UE4光照问题排查指南",{"type":8,"value":344,"toc":956},[345,348,359,362,366,369,374,378,381,384,389,392,397,401,404,409,412,417,420,424,427,430,433,436,441,444,447,450,455,459,462,468,471,475,478,484,487,490,493,496,499,502,527,535,539,542,548,552,560,563,566,570,576,579,585,588,591,594,603,607,614,617,623,626,630,633,641,644,647,650,656,659,665,669,672,678,681,687,690,693,696,699,702,705,708,711,714,717,721,727,730,733,736,739,742,745,753,757,760,768,772,775,781,784,787,790,793,796,802,805,808,814,817,820,823,826,829,835,838,841,844,848,851,857,861,864,867,870,874,880,883,887,890,896,899,902,905,916,919,923,926,932,935,942,945],[11,346,347],{},"这个是官方Wiki中光照问题排查指南的总结，对于排查光照问题很有帮助。",[11,349,350,351,358],{},"由于文章实在太长，所以并不是逐字翻译。但是会尽量保留所有的内容，之前的文章有重复的部分会导向以前的部分。官方Wiki的原始文章地址在[",[352,353,357],"a",{"href":354,"rel":355},"https:\u002F\u002Fwiki.unrealengine.com\u002FLightingTroubleshootingGuide",[356],"nofollow","这里","]。",[21,360,361],{"id":361},"通用设定",[32,363,365],{"id":364},"为何我的阴影是黑色的","为何我的阴影是黑色的？",[11,367,368],{},"通常阴影纯黑是由于没有辅助的填充光照造成的，这种情况通常发生在开放场景中只有一个代替日光的直射光时。这时需要在场景中添加一个Sky Light作为全局光照，由于光照的反射模拟是有限的，天光可以有效的对现实中的光照进行模拟。",[11,370,371],{},[44,372],{"alt":46,"src":373},"\u002Fwp-content\u002Fuploads\u002F2017\u002F10\u002Fclip_image001_thumb.png",[32,375,377],{"id":376},"将bsp转化为static-mesh时光照贴图设置错误","将BSP转化为Static Mesh时光照贴图设置错误",[11,379,380],{},"这个似乎是早期版本的问题，现在（4.18）已经不会有这个问题了。不过光照贴图的自动设置Index是0，出现问题时可以排查这里。",[11,382,383],{},"当将BSP物体转化为模型体时，可能会看到这样的错误",[11,385,386],{},[44,387],{"alt":55,"src":388},"\u002Fwp-content\u002Fuploads\u002F2017\u002F10\u002Fclip_image002_thumb.png",[11,390,391],{},"这个是由于光照贴图没有完全的自动设定造成的，需要在SM的设定中手动的指定光照贴图分辨率和光照贴图的UV Channel。",[11,393,394],{},[44,395],{"alt":79,"src":396},"\u002Fwp-content\u002Fuploads\u002F2017\u002F10\u002Fclip_image003_thumb.png",[32,398,400],{"id":399},"如何停止使用光照贴图","如何停止使用光照贴图？",[11,402,403],{},"如果整个项目都不使用的话，可以在项目设定中关闭静态光照：",[11,405,406],{},[44,407],{"alt":88,"src":408},"\u002Fwp-content\u002Fuploads\u002F2017\u002F10\u002Fclip_image004_thumb.png",[11,410,411],{},"或者只是在单独的地图的世界设置中禁用预计算光照：",[11,413,414],{},[44,415],{"alt":242,"src":416},"\u002Fwp-content\u002Fuploads\u002F2017\u002F10\u002Fclip_image005_thumb.png",[11,418,419],{},"会有提示，需要重新构建一次光照才会清除当前地图内的光照数据。",[32,421,423],{"id":422},"为何我的模型一部分不见了","为何我的模型一部分不见了？",[11,425,426],{},"和在建模软件中不同，UE4会对模型的面进行可见度裁剪。如果模型的一部分在UE4中不可见，可以按Alt+2进入线框模式，查看导入是否正确。",[11,428,429],{},"通常的情况下对模型进行修改比较好。",[11,431,432],{},"如果不想修改模型的话有两个解决方案：",[11,434,435],{},"选中对应的物体，打开双面光照",[11,437,438],{},[44,439],{"alt":251,"src":440},"\u002Fwp-content\u002Fuploads\u002F2017\u002F10\u002Fclip_image006_thumb.png",[11,442,443],{},"Lightmass中的是静态光照的开关，Shadow Two Sided则决定了是否作为双面物体进行动态光照阴影计算。",[32,445,446],{"id":446},"将物体材质设定为双面的",[11,448,449],{},"在对应物体的材质中将其修改为双面材质",[11,451,452],{},[44,453],{"alt":272,"src":454},"\u002Fwp-content\u002Fuploads\u002F2017\u002F10\u002Fclip_image007_thumb.png",[32,456,458],{"id":457},"为何突然光照效果变得不一样了","为何突然光照效果变得不一样了？",[11,460,461],{},"编辑器内部有自动调整渲染级别的设定，在渲染帧率下降时，编辑器会提示是否下调渲染等级，如果没有留意的话会发现渲染结果突然变得不一样了。直接对设置进行修改就好了",[11,463,464],{},[44,465],{"alt":466,"src":467},"clip_image008","\u002Fwp-content\u002Fuploads\u002F2017\u002F10\u002Fclip_image008_thumb.png",[11,469,470],{},"去掉“显示器编辑器偏好设置？”的勾选，就不会自动进行渲染级别调整了",[32,472,474],{"id":473},"为何光照上有个红叉","为何光照上有个红叉？",[11,476,477],{},"Stationary Light在同一个被覆盖区域中只能有4个",[11,479,480],{},[44,481],{"alt":482,"src":483},"clip_image009","\u002Fwp-content\u002Fuploads\u002F2017\u002F10\u002Fclip_image009_thumb.png",[11,485,486],{},"当超过这个数目时，范围最小的那个Stationary Light会被转化为动态光源。",[11,488,489],{},"由于动态光源拥有更高的运行时开销，所以需要注意。",[11,491,492],{},"这里的修正上只能对光源的布局进行重新规划。",[32,494,495],{"id":495},"光照贴图错误",[11,497,498],{},"光照贴图在设定上必须在0~1的UV空间内，超过的话就会在烘焙时提示警告Lightmap Overlapping by xx%。",[11,500,501],{},"当然还有一些其他的报错，光照贴图需要注意以下问题：",[503,504,505,509,512,515,518,521,524],"ul",{},[506,507,508],"li",{},"不要有重叠的部分",[506,510,511],{},"不要超过0~1的UV空间",[506,513,514],{},"Flag-Mapping并不是最好的方式且经常导致光照贴图错误",[506,516,517],{},"尽量占满UV空间",[506,519,520],{},"如果模型很大而且复杂，最后分成数个物体，这样也能有助于裁剪等机制",[506,522,523],{},"尽量减小光照贴图分辨率以减少贴图尺寸",[506,525,526],{},"相互不接触的线之间要保持至少2像素的距离，以防止光照污染",[11,528,529,530,358],{},"更多的内容可以参照官方的[",[352,531,534],{"href":532,"rel":533},"https:\u002F\u002Fdocs.unrealengine.com\u002Flatest\u002FINT\u002FEngine\u002FContent\u002FTypes\u002FStaticMeshes\u002FLightmapUnwrapping\u002F",[356],"光照贴图指南",[32,536,538],{"id":537},"post-process中gi的设定","Post Process中GI的设定",[11,540,541],{},"PP中的GI设定可以对光照效果产生很大的影响，官方有一个示例就是通过两个PP的动态切换来实现灯光效果的变更。",[11,543,544],{},[44,545],{"alt":546,"src":547},"clip_image010","\u002Fwp-content\u002Fuploads\u002F2017\u002F10\u002Fclip_image010_thumb.png",[32,549,551],{"id":550},"capsule-shadows","Capsule Shadows",[11,553,554,555,559],{},"这个是4.11版本的新特性，似乎和问题排查关系不大，可以参考之前的",[352,556,558],{"href":557},"\u002F2017-08-23-ue4-lighting-and-optimize\u002F#Capsule_Shadows","介绍","。",[21,561,562],{"id":562},"动态光照",[11,564,565],{},"动态光照在使用上比静态光照直观些，不需要每次都重新构建就能看到效果。",[32,567,569],{"id":568},"直射光独有属性csm","直射光独有属性：CSM",[11,571,572],{},[44,573],{"alt":574,"src":575},"clip_image011","\u002Fwp-content\u002Fuploads\u002F2017\u002F10\u002Fclip_image011_thumb.png",[11,577,578],{},"这些属性都是决定动态光照级联切换的，在显示中打开",[11,580,581],{},[44,582],{"alt":583,"src":584},"clip_image012","\u002Fwp-content\u002Fuploads\u002F2017\u002F10\u002Fclip_image012_thumb.png",[11,586,587],{},"可以更直观的看到效果",[11,589,590],{},"Dyamic Shadow Distance为光照的覆盖的范围，设置为0的话等于禁用这个光照。Stational光照的默认设定为0，也就是不开启动态光照。",[11,592,593],{},"Num Dynamic Shadow Cascades为动态贴图的过渡级别，越多的话动态光照的效果就越好，但是也更消耗性能，设置为0的话等同于禁用动态光照。",[11,595,596,597,602],{},"由于原文章中能够很直观的看到各个属性的调节的",[352,598,601],{"href":599,"rel":600},"https:\u002F\u002Fwiki.unrealengine.com\u002FLightingTroubleshootingGuide#Directional_Light_ONLY:_Cascaded_Shadow_Maps_Settings:",[356],"效果","，打开Shadow Frustrums就可以很好的进行观察，这里就不继续介绍了。",[32,604,606],{"id":605},"far-shadow","Far Shadow",[11,608,609,610,613],{},"远景物体的阴影投射，这一部分之前有总结过，可以移步以前",[352,611,606],{"href":612},"\u002F2017-08-23-ue4-lighting-and-optimize\u002F#Far_Shadow","的文章。",[11,615,616],{},"这里官方提到了额外的注意事项，就是Far Shadow Distance应当比CSM的距离要远，在运算上Far Shadow会在设定距离与CSM距离之间进行Cascade Count次级联运算。",[11,618,619],{},[44,620],{"alt":621,"src":622},"clip_image013","\u002Fwp-content\u002Fuploads\u002F2017\u002F10\u002Fclip_image013_thumb.png",[11,624,625],{},"同时尽量只给大的物体投射Far Shadow，因为对于小的物体而言，Far Shadow其实是不是很必要却有额外消耗的。",[32,627,629],{"id":628},"csm调整","CSM调整",[11,631,632],{},"动态光照的污染等问题，通常通过调整CSM的属性来进行排查。",[11,634,635,640],{},[352,636,639],{"href":637,"rel":638},"https:\u002F\u002Fwiki.unrealengine.com\u002FLightingTroubleshootingGuide#Adjusting_Cascades_for_better_Quality:",[356],"官方的示例","中是通过调整Cascade Distribution Exponent来解决问题的，但是由于室外场景比较多变，并没有",[11,642,643],{},"统一的解决方案，通过Shadow Frustrums工具的配合，对上面的几个属性进行调整比较好。",[32,645,646],{"id":646},"动态光照通用属性",[11,648,649],{},"Shadow BIas通常用于调整动态阴影导致的自投影问题，一个过小的值将会导致阴影从很近的地方开始计算。",[11,651,652],{},[44,653],{"alt":654,"src":655},"clip_image014","\u002Fwp-content\u002Fuploads\u002F2017\u002F10\u002Fclip_image014_thumb.png",[11,657,658],{},"Shadow Filter Sharpness则用于调整阴影的边缘是否尖锐",[11,660,661],{},[44,662],{"alt":663,"src":664},"clip_image015","\u002Fwp-content\u002Fuploads\u002F2017\u002F10\u002Fclip_image015_thumb.png",[32,666,668],{"id":667},"为何光照在远处时穿过物体","为何光照在远处时穿过物体？",[11,670,671],{},"这个问题是由于用于遮挡动态光照的物体在距离很远时已经被裁剪造成的。",[11,673,674],{},[44,675],{"alt":676,"src":677},"clip_image016","\u002Fwp-content\u002Fuploads\u002F2017\u002F10\u002Fclip_image016_thumb.png",[11,679,680],{},"比较直观的解决方案是直接拉大那个物体的Bound来避免其被裁剪。可以直接在物体实例中设置",[11,682,683],{},[44,684],{"alt":685,"src":686},"clip_image017","\u002Fwp-content\u002Fuploads\u002F2017\u002F10\u002Fclip_image017_thumb.png",[11,688,689],{},"放大Bounds Scale，在显示中打开Bounds的预览可以很好的对其进行规划。",[11,691,692],{},"但是这里通常情况下的建议是避免这种光照使用方式，这里可以使用聚光灯或者光照函数、IIES来更加高效的实现这个效果。",[11,694,695],{},"使用物体遮挡来对光源的形状进行控制并不是一个好主意。",[21,697,698],{"id":698},"静态光照",[11,700,701],{},"光照贴图分辨率\u002F阴影质量",[11,703,704],{},"这里的建议虽然是官方的，但是并不能对所有的情况通用，只是作为光照问题排查的基础。",[11,706,707],{},"光照贴图分辨率用于调整阴影的质量，这里需要注意的是，这个分辨率是决定投影在其上的阴影的精度的，并不是决定其自身的阴影精度的。也就是说物体的阴影的质量是更加这个阴影投射到的物体的光照贴图分辨率决定的。",[11,709,710],{},"网格物体的分辨率必须是POT的，且数值越大阴影质量越高",[11,712,713],{},"BSP物体的分辨率则相反，数值越低阴影质量越高",[11,715,716],{},"Landscapes的分辨率调节则是一个乘数，越大质量越高",[32,718,720],{"id":719},"seams","Seams",[11,722,723],{},[44,724],{"alt":725,"src":726},"clip_image018","\u002Fwp-content\u002Fuploads\u002F2017\u002F10\u002Fclip_image018_thumb.png",[11,728,729],{},"就是物体接合处的光照效果不真实的问题，这个问题通常是由间接光照引起的，因为间接光照计算时各个物体相互之间是独立的，因此计算的结果就会不合理。",[11,731,732],{},"官方的建议之一是调整世界设置中的静态光照参数",[11,734,735],{},"Indirect Lighting Quality设置到2或者更高",[11,737,738],{},"Indirect Lighting Smoothness设置到0.65~0.75之间",[11,740,741],{},"Static Lighting Level Scale这个属性由于是对计算单位进行缩放，虽然调小会有更好的阴影过度，但是会明显的提高光照计算量。通常应用于建筑展示领域，不建议在游戏开发中使用。",[11,743,744],{},"通常上面的调整效果是有限的，其实这个问题更多的应该从关卡构建上入手：",[503,746,747,750],{},[506,748,749],{},"不要过分的将关卡模块化，当可以有一整面墙的时候就不要将其拆分为好几个部分。这样可以防止问题的同时减少绘制调用次数。",[506,751,752],{},"使用物体对接缝处进行遮蔽。",[32,754,756],{"id":755},"构建光照时报错overlapping-uv-error","构建光照时报错Overlapping UV error",[11,758,759],{},"这个之前就有提到，大概是专门又详细的说明一次。",[11,761,762,763,767],{},"Overlapping和Wrapping都是UV错误的形式，可以使用",[352,764,766],{"href":765},"\u002F2017-08-23-ue4-lighting-and-optimize\u002F#Error_Coloring","错误着色","进行可视化排查，但是通常直接查看UV就能看出问题。",[32,769,771],{"id":770},"如何使用编辑器生成光照uv","如何使用编辑器生成光照UV",[11,773,774],{},"在Mesh的编辑窗口",[11,776,777],{},[44,778],{"alt":779,"src":780},"clip_image019","\u002Fwp-content\u002Fuploads\u002F2017\u002F10\u002Fclip_image019_thumb.png",[11,782,783],{},"勾选生成光照贴图UV后，设置下面三个属性就可以了。",[11,785,786],{},"通常源光照贴图索引使用的应当是用于贴图渲染的那个UV通道。",[11,788,789],{},"目标索引则是要生成的UV索引。",[11,791,792],{},"点击应用修改后就会生成光照UV。",[11,794,795],{},"这时候就可以在上面的通用设定中对光照UV的索引进行设置了。",[11,797,798],{},[44,799],{"alt":800,"src":801},"clip_image020","\u002Fwp-content\u002Fuploads\u002F2017\u002F10\u002Fclip_image020_thumb.png",[32,803,804],{"id":804},"间接光照回弹次数",[11,806,807],{},"可以在世界设定中对间接光照的回弹次数进行设定，回弹计算的次数越多，间接光照的效果越好。",[11,809,810],{},[44,811],{"alt":812,"src":813},"clip_image021","\u002Fwp-content\u002Fuploads\u002F2017\u002F10\u002Fclip_image021_thumb.png",[11,815,816],{},"设定上拖动只能在1~4之间，但是可以手动输入更大的值。",[11,818,819],{},"回弹计算在第一次计算时成本最高，之后计算的话成本不高，但是也不会有什么太大的结果变化。通常4次计算就足够了。",[11,821,822],{},"为何间接光照产生了很多“斑点”？",[11,824,825],{},"通过调节光照贴图分辨率可以缓解这个问题。",[11,827,828],{},"虽然调整光照贴图质量以及平滑度也能解决这个问题",[11,830,831],{},[44,832],{"alt":833,"src":834},"clip_image022","\u002Fwp-content\u002Fuploads\u002F2017\u002F10\u002Fclip_image022_thumb.png",[11,836,837],{},"但是通常会导致过高的光照构建消耗，并不推荐。",[11,839,840],{},"提高间接光照回弹次数能够起到比提高光照贴图分辨率更好的效果。",[11,842,843],{},"一个更好的解决方案是，不要让区域只受间接光照的影响，添加一个不投影的光源就能很好的防止斑点的出现。",[32,845,847],{"id":846},"lighting-needs-to-be-rebuilt是什么","\"Lighting needs to be rebuilt\"是什么？",[11,849,850],{},"光照需要重新构建，点击构建按钮下的仅构建光照即可。",[11,852,853],{},[44,854],{"alt":855,"src":856},"clip_image023","\u002Fwp-content\u002Fuploads\u002F2017\u002F10\u002Fclip_image023_thumb.png",[32,858,860],{"id":859},"unbuilt-actors-list","Unbuilt Actors List",[11,862,863],{},"如果构建后依然出现这个提示，可以在输出日志中敲入命令DumpUnbuiltLightInteractions来列出未构建的物体。",[11,865,866],{},"通常会出现这类物体可能还是由于蓝图或代码在物体摆放后对其移动造成的。",[11,868,869],{},"通过这个列表对问题进行排查即可。",[32,871,873],{"id":872},"statistics-window","Statistics Window",[11,875,876],{},[44,877],{"alt":878,"src":879},"clip_image024","\u002Fwp-content\u002Fuploads\u002F2017\u002F10\u002Fclip_image024_thumb.png",[11,881,882],{},"这个窗口可以排查是哪些物体过度的消耗了光照构建的时间。",[32,884,886],{"id":885},"lanscape上草的阴影问题","Lanscape上草的阴影问题",[11,888,889],{},"可以在GrassType上找到一个选项，",[11,891,892],{},[44,893],{"alt":894,"src":895},"clip_image025","\u002Fwp-content\u002Fuploads\u002F2017\u002F10\u002Fclip_image025_thumb.png",[11,897,898],{},"让草直接使用Landscape的光照贴图即可。",[32,900,901],{"id":901},"通过命令行构建构造",[11,903,904],{},"4.10.2后的功能",[11,906,907,908,912,913],{},"UE4-Editor.exe ",[909,910,911],"span",{},"Project Folder Path"," -run=resavepackages -buildlighting -MapsOnly -ProjectOnly -AllowCommandletRendering -Map=",[909,914,915],{},"Name of map",[11,917,918],{},"其中-Map是可选项，不过去掉的话会转而构建所有的地图。",[32,920,922],{"id":921},"foliage的光照","Foliage的光照",[11,924,925],{},"在Foliage中可以使用Light Map Resolution选项覆盖掉Mesh本身的光照贴图分辨率。",[11,927,928],{},[44,929],{"alt":930,"src":931},"clip_image026","\u002Fwp-content\u002Fuploads\u002F2017\u002F10\u002Fclip_image026_thumb.png",[11,933,934],{},"由于Foliage实际上是被打包在一起的，所以所有的FoliageInstance的光照贴图将会合在一张里面，所以缩小其分辨率是有一定必要的。",[11,936,937,938,941],{},"尤其是在构建时出现提示Instanced_Foliage_Actor_",[909,939,940],{},"X"," lightmap is too large and should be reduced的时候，就可以在这里进行修改。",[11,943,944],{},"另外还有一些官方的Foliage官方建议：",[503,946,947,950,953],{},[506,948,949],{},"如果要让Foliage使用风相关的特性的话，要避免对Foliage使用静态光照，因为阴影不会随风而动。",[506,951,952],{},"减少光照贴图分辨率以减小贴图空间消耗",[506,954,955],{},"在Grass上禁用静态光照，因为通常Grass是数目极大，会造成明显的构建消耗",{"title":303,"searchDepth":304,"depth":305,"links":957},[958,970,977],{"id":361,"depth":304,"text":361,"children":959},[960,961,962,963,964,965,966,967,968,969],{"id":364,"depth":305,"text":365},{"id":376,"depth":305,"text":377},{"id":399,"depth":305,"text":400},{"id":422,"depth":305,"text":423},{"id":446,"depth":305,"text":446},{"id":457,"depth":305,"text":458},{"id":473,"depth":305,"text":474},{"id":495,"depth":305,"text":495},{"id":537,"depth":305,"text":538},{"id":550,"depth":305,"text":551},{"id":562,"depth":304,"text":562,"children":971},[972,973,974,975,976],{"id":568,"depth":305,"text":569},{"id":605,"depth":305,"text":606},{"id":628,"depth":305,"text":629},{"id":646,"depth":305,"text":646},{"id":667,"depth":305,"text":668},{"id":698,"depth":304,"text":698,"children":978},[979,980,981,982,983,984,985,986,987,988],{"id":719,"depth":305,"text":720},{"id":755,"depth":305,"text":756},{"id":770,"depth":305,"text":771},{"id":804,"depth":305,"text":804},{"id":846,"depth":305,"text":847},{"id":859,"depth":305,"text":860},{"id":872,"depth":305,"text":873},{"id":885,"depth":305,"text":886},{"id":901,"depth":305,"text":901},{"id":921,"depth":305,"text":922},"2017-10-21",{"layout":319,"status":320,"published":321,"author":991,"author_login":324,"author_email":325,"wordpress_id":992,"wordpress_url":993,"date_gmt":994,"excerpt":995},{"display_name":323,"login":324,"email":325,"url":303},2031,"\u002F\u002F?p=2031","2017-10-21 05:49:23 +0000",{"type":8,"value":996},[997],[11,998,347],{},"\u002F2017-10-21-ue4-lighting-troubleshooting-note",{"title":342,"description":347},"_legacy\u002F2017\u002F2017-10-21-ue4-lighting-troubleshooting-note",[337,1003],"Lighting","o1IWVGPJuUDTqsLwdahOGRXsZxnTw16Zw2Dxk2LTmUU",{"id":1006,"title":1007,"body":1008,"date":1189,"description":1012,"extension":317,"meta":1190,"navigation":321,"path":1199,"seo":1200,"stem":1201,"tags":1202,"__hash__":1205},"blogs\u002F_legacy\u002F2017\u002F2017-10-14-ue4-config-setting.md","UE4的配置界面写入",{"type":8,"value":1009,"toc":1184},[1010,1013,1016,1024,1028,1031,1034,1037,1040,1050,1053,1057,1060,1066,1069,1072,1075,1101,1104,1110,1115,1118,1121,1125,1128,1131,1154,1157,1160,1163,1166,1172,1175],[11,1011,1012],{},"UE4的Config系统使用起来很方便，但是如果要让制作出来的插件\u002F项目更方便的让其他人设置，就需要将其写到编辑器的配置列表中。",[11,1014,1015],{},"当前使用的UE4版本为4.18.0 P4。",[11,1017,1018,1019,1023],{},"这里的内容是以",[352,1020,1022],{"href":1021},"\u002F2017-06-06-ue4-config-usage\u002F","Conifg系统","的使用为前提的，只是简略的记录了插件制作过程中，将Conifg注入到编辑器界面的过程。",[21,1025,1027],{"id":1026},"udevelopersettings","UDeveloperSettings",[11,1029,1030],{},"让配置类继承自UDeveloperSettings是最简单的配置实现方式。",[11,1032,1033],{},"不过在测试和使用的过程中遇到过很多次无法增量编译编辑器的情况，需要对项目进行重新生成。",[11,1035,1036],{},"目前还不是很确定问题是出在UDeveloperSettings这边还是由于4.18的预览bug引起的。",[11,1038,1039],{},"类似于这样的定义就可以让配置出现在项目配置中",[1041,1042,1047],"pre",{"className":1043,"code":1045,"language":1046},[1044],"language-text","UCLASS(config = ElLog, defaultconfig, meta = (DisplayName = \"ElLog\"))\nclass UElLogSettings : public UDeveloperSettings\n","text",[1048,1049,1045],"code",{"__ignoreMap":303},[11,1051,1052],{},"不过这样的方式有一个缺点，那就是他只能出现在配置的“引擎”分类中，并没有看到能够调整目录的地方。",[21,1054,1056],{"id":1055},"isettingsmodule","ISettingsModule",[11,1058,1059],{},"其实UE4本身有提供配置的注册接口，只要通过这个接口就能将配置类注册到设定UI中去了：",[1041,1061,1064],{"className":1062,"code":1063,"language":1046},[1044],"void RegisterSettings()\n{\n  UE_LOG(LogTemp,Log,TEXT(\"[NS_ELLOG] RegisterSettings()\"));\n  if (ISettingsModule* SettingsModule = FModuleManager::GetModulePtr\u003CISettingsModule>(\"Settings\"))\n  {\n    SettingsModule->RegisterSettings(\"Project\", \"Plugins\", \"ELLog\",\n      LOCTEXT(\"TileSetEditorSettingsName\", \"EasyLog Settings\"),\n      LOCTEXT(\"TileSetEditorSettingsDescription\", \"Configure the setting of easylog plugin.\"),\n      GetMutableDefault\u003CUElLogSettings>());\n    UE_LOG(LogTemp, Log, TEXT(\"[NS_ELLOG] RegisterSettings(): Stp\"));\n  }\n}\n\nvoid UnregisterSettings()\n{\n    if (ISettingsModule* SettingsModule = FModuleManager::GetModulePtr\u003CISettingsModule>(\"Settings\"))\n    {\n        SettingsModule->UnregisterSettings(\"Project\", \"Plugins\", \"ELLog\");\n    }\n}\n",[1048,1065,1063],{"__ignoreMap":303},[11,1067,1068],{},"由于这里使用的时候是在插件中，直接在StartupModule()和ShutdownModule()中进行注册和解注册就可以了。",[11,1070,1071],{},"注意这里的配置是会覆盖的，如果使用了引擎内部相同的配置名称可能会发生奇怪的现象。",[11,1073,1074],{},"RegisterSettings函数中的各个参数的意义都比较明显，直接看注释就能明白了。",[1076,1077,1078],"blockquote",{},[503,1079,1080,1083,1086,1089,1092,1095,1098],{},[506,1081,1082],{},"@param ContainerName 配置的分类，目前只有Editor和Project两个，分别对应编辑器设置和项目设置两个界面",[506,1084,1085],{},"@param CategoryName 配置的目录，这个是在上面两种界面中的目录，比如引擎、游戏等。",[506,1087,1088],{},"@param SectionName 配置的名称，就是显示在左侧目录树上的名称",[506,1090,1091],{},"@param DisplayName 配置的显示名称",[506,1093,1094],{},"@param Description 配置的描述",[506,1096,1097],{},"@param SettingsObject 实际承载这个配置的配置类",[506,1099,1100],{},"@return 会返回注册后的配置展示类，失败的话会返回Nullptr",[11,1102,1103],{},"上面的代码注册后就能在项目设置中看到了",[11,1105,1106],{},[44,1107],{"alt":1108,"src":1109},"image","\u002Fwp-content\u002Fuploads\u002F2017\u002F10\u002Fimage_thumb.png",[11,1111,1112],{},[44,1113],{"alt":1108,"src":1114},"\u002Fwp-content\u002Fuploads\u002F2017\u002F10\u002Fimage_thumb-1.png",[11,1116,1117],{},"需要注意的是，ISettingModule这个类型是编辑器使用的，在Shipping模式下无法使用，所以在相关的代码附近注意加上WITH_EDITOR的宏来进行差分。",[11,1119,1120],{},"通常情况下这样就可以了，不过由于插件的类型原因，这里还是有一个问题。",[21,1122,1124],{"id":1123},"loading-phase","Loading Phase",[11,1126,1127],{},"UE4中的模块都有载入时机的概念，在uplugin文件中可以进行配置。",[11,1129,1130],{},"目前可用的载入时机有",[1076,1132,1133,1136,1139,1142,1145,1148,1151],{},[11,1134,1135],{},"PostConfigInit：引擎初始化阶段，在配置系统初始化完成后",[11,1137,1138],{},"PreLoadingScreen：引擎初始化阶段，可以在这里挂入LoadingScreen的注册",[11,1140,1141],{},"PreDefault：引擎初始化阶段，在Default阶段之前",[11,1143,1144],{},"Default：引擎初始化阶段，此时所有的游戏模块加载已经完成",[11,1146,1147],{},"PostDefault：引擎初始化阶段，在Default阶段之后",[11,1149,1150],{},"PostEngineInit：引擎初始化完成后",[11,1152,1153],{},"None：不会自动加载",[11,1155,1156],{},"这几个加载阶段有的在文档中描述不是很明确，由于没有实际使用到，所以就没有深入看过。当遇到相应需求的时候，再进行判断比较合适。",[11,1158,1159],{},"这里由于ELLog本身是Log的插件，所以为了尽可能早的加载完成，就选择了PostConfigInit阶段。",[11,1161,1162],{},"但是在这个阶段，SettingModule其实并没有完成加载，所以无法成功完成注入到配置系统中的工作。",[11,1164,1165],{},"因此需要借助额外的引擎接口才行",[1041,1167,1170],{"className":1168,"code":1169,"language":1046},[1044],"\u002F\u002FNS_ELLOG::RegisterSettings();\nFCoreDelegates::OnFEngineLoopInitComplete.AddStatic(&NS_ELLOG::RegisterSettings);\n",[1048,1171,1169],{"__ignoreMap":303},[11,1173,1174],{},"在StartupModule()中不直接进行注册，而是注册到引擎初始化完成的Delegate上，这样就可以在SettingModule加载完成之后执行注册了。",[11,1176,1177,1178,1183],{},"以上的代码都可以在",[352,1179,1182],{"href":1180,"rel":1181},"https:\u002F\u002Fgithub.com\u002FArisego\u002FELLog",[356],"ELLog插件","中找到，因此这里就不多贴代码了。",{"title":303,"searchDepth":304,"depth":305,"links":1185},[1186,1187,1188],{"id":1026,"depth":304,"text":1027},{"id":1055,"depth":304,"text":1056},{"id":1123,"depth":304,"text":1124},"2017-10-14",{"layout":319,"status":320,"published":321,"author":1191,"author_login":324,"author_email":325,"wordpress_id":1192,"wordpress_url":1193,"date_gmt":1194,"excerpt":1195},{"display_name":323,"login":324,"email":325,"url":303},1972,"\u002F\u002F?p=1972","2017-10-14 11:05:31 +0000",{"type":8,"value":1196},[1197],[11,1198,1012],{},"\u002F2017-10-14-ue4-config-setting",{"title":1007,"description":1012},"_legacy\u002F2017\u002F2017-10-14-ue4-config-setting",[337,1203,1204],"Config","Setting","vf1l0LywvIQwcofjPXDbGiu2fQQJnhd7FsD0aYqDQKs",{"id":1207,"title":1208,"body":1209,"date":1948,"description":1213,"extension":317,"meta":1949,"navigation":321,"path":1958,"seo":1959,"stem":1960,"tags":1961,"__hash__":1963},"blogs\u002F_legacy\u002F2017\u002F2017-08-23-ue4-lighting-and-optimize.md","UE4光照及优化",{"type":8,"value":1210,"toc":1907},[1211,1214,1217,1238,1240,1243,1246,1251,1255,1258,1261,1264,1268,1271,1276,1279,1282,1287,1290,1293,1296,1299,1302,1305,1308,1311,1316,1319,1322,1325,1328,1336,1339,1344,1347,1352,1355,1357,1360,1365,1368,1373,1376,1379,1382,1386,1389,1394,1397,1400,1405,1408,1411,1415,1418,1421,1424,1427,1432,1435,1440,1444,1447,1452,1455,1458,1461,1465,1468,1472,1475,1478,1481,1489,1492,1495,1500,1503,1507,1510,1513,1516,1522,1525,1530,1533,1538,1541,1546,1549,1553,1556,1559,1564,1567,1570,1574,1577,1582,1585,1590,1593,1598,1601,1605,1614,1617,1622,1625,1628,1630,1633,1637,1640,1646,1649,1652,1657,1660,1663,1668,1671,1674,1680,1684,1687,1692,1695,1699,1702,1707,1710,1714,1717,1722,1725,1728,1731,1736,1740,1743,1749,1752,1755,1758,1762,1765,1770,1773,1777,1780,1786,1789,1793,1796,1799,1807,1809,1812,1815,1818,1821,1826,1829,1832,1837,1840,1843,1847,1850,1853,1858,1861,1864,1867,1870,1874,1877,1882,1885,1893,1898,1901,1904],[11,1212,1213],{},"UE4的光照系统很强大，效果也很好，但是在场景复杂度较高或者开放世界的情况下，很容易造成性能瓶颈。",[11,1215,1216],{},"当前UE4版本为4.17.1。",[11,1218,1219,1220,1225,1226,1231,1232,1237],{},"光照系统的大部分应用都可以在[",[352,1221,1224],{"href":1222,"rel":1223},"https:\u002F\u002Fdocs.unrealengine.com\u002Flatest\u002FCHN\u002FEngine\u002FRendering\u002FLightingAndShadows\u002Findex.html",[356],"官方文档","]中找到，这里的大部分内容是对官方Lighting系列[",[352,1227,1230],{"href":1228,"rel":1229},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=jCsrWzt9F28",[356],"视频1","][",[352,1233,1236],{"href":1234,"rel":1235},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=nm1slxtF_qA",[356],"视频2","]的总结。",[21,1239,698],{"id":698},[11,1241,1242],{},"UE4的静态光照是在光照构建中进行预计算的部分，会对预计算的光照结果进行存储，例如光照贴图、阴影贴图这样的形式，可以在运行时支付较低的效率而获得较好的光照结果。",[11,1244,1245],{},"静态光照可以在世界设置中可以进行关闭",[11,1247,1248],{},[44,1249],{"alt":1108,"src":1250},"\u002Fwp-content\u002Fuploads\u002F2017\u002F08\u002Fimage_thumb-7.png",[32,1252,1254],{"id":1253},"lightmass-importance-volume","Lightmass Importance Volume",[11,1256,1257],{},"这个是预计算光照用的Volume，LightMass的光照计算在点击“构建光照”之后会产生光照贴图。",[11,1259,1260],{},"控制良好的预计算光照可以让场景变得美观的同时降低动态光照的成本，但是在控制不好的时候就会造成贴图空间爆炸。",[11,1262,1263],{},"LightMass Importance Volume是用来控制预计算精度的，很明显的一点是，加上之后在空间内部会生成更多的间接光照缓存点，使得间接光照的效果变得更好。",[32,1265,1267],{"id":1266},"ssao","SSAO",[11,1269,1270],{},"世界设定中还有一个LightMass相关的功能",[11,1272,1273],{},[44,1274],{"alt":1108,"src":1275},"\u002Fwp-content\u002Fuploads\u002F2017\u002F08\u002Fimage_thumb-8.png",[11,1277,1278],{},"LightMass这里的AO就是SSAO，由于是工作在屏幕空间的后期计算，要进行探索的话可以在PostProcess中进行调整测试。",[11,1280,1281],{},"还有一个额外的选项",[11,1283,1284],{},[44,1285],{"alt":1108,"src":1286},"\u002Fwp-content\u002Fuploads\u002F2017\u002F08\u002Fimage_thumb-9.png",[11,1288,1289],{},"打开之后可以使得PrecompoutedAOMask材质节点变为有效，这样就可以使用AO的数据来对场景内物体之间的混合效果进行控制。",[11,1291,1292],{},"详细的可以看这个选项的注释。",[11,1294,1295],{},"更正：",[11,1297,1298],{},"这里是错误的，LightMass选项里的AO选项是给预计算光照的，Generate Ambient Occlusion Material这个选项打开的PrecompoutedAOMask也是预计算光照的结果反映到材质中的方式。SSAO是工作在屏幕空间的一种PostProcess效果，与预计算光照是不同的。",[11,1300,1301],{},"感谢@裕 的指正~",[32,1303,1304],{"id":1304},"间接光照缓存",[11,1306,1307],{},"间接光照缓存的作用是通过缓存某个点的间接光照，将其作用于经过该处的动态物体上，以获得好的间接光照效果。",[11,1309,1310],{},"在Movable的物体以及角色上可以对间接光照的计算类型进行设定",[11,1312,1313],{},[44,1314],{"alt":1108,"src":1315},"\u002Fwp-content\u002Fuploads\u002F2017\u002F08\u002Fimage_thumb-10.png",[11,1317,1318],{},"ILCQ为Point的时候就是一个点，Volume就是很多点。",[11,1320,1321],{},"在物体移动时，这些生成的点将根据自己所处的位置，通过周围的间接光照缓存点进行插值并计算出间接光照。",[11,1323,1324],{},"虽然插值点多的话间接光照效果会变好，但使用何种形式需要根据性能和需求进行权衡。",[11,1326,1327],{},"可以使用",[1076,1329,1330,1333],{},[11,1331,1332],{},"r.cache.drawinterplotionpoint 1",[11,1334,1335],{},"r.cache.updateeveryframe 1",[11,1337,1338],{},"这两条指令来预览缓存插值点的生成。",[11,1340,1341],{},[44,1342],{"alt":1108,"src":1343},"\u002Fwp-content\u002Fuploads\u002F2017\u002F08\u002Fimage_thumb-11.png",[11,1345,1346],{},"对于角色的光照缓存还有一个另外的",[11,1348,1349],{},[44,1350],{"alt":1108,"src":1351},"\u002Fwp-content\u002Fuploads\u002F2017\u002F08\u002Fimage_thumb-12.png",[11,1353,1354],{},"用于提高区域计算精度的体积。",[32,1356,551],{"id":550},[11,1358,1359],{},"这个是专门为骨骼模型设计的投影优化方式，在骨骼的Lighting属性中能够看到相关的选项：",[11,1361,1362],{},[44,1363],{"alt":1108,"src":1364},"\u002Fwp-content\u002Fuploads\u002F2017\u002F08\u002Fimage_thumb-13.png",[11,1366,1367],{},"要使用必须在骨骼网格中指定用于投影的Physics Asset。",[11,1369,1370],{},[44,1371],{"alt":1108,"src":1372},"\u002Fwp-content\u002Fuploads\u002F2017\u002F08\u002Fimage_thumb-14.png",[11,1374,1375],{},"使用这种方式可以防止一般较为复杂的角色模型在进行投影计算时产生过多的消耗，尤其是同一个场景内有很多角色模型的情况。",[21,1377,1378],{"id":1378},"光照问题",[11,1380,1381],{},"在光照的结果上，有时会出现并非预期的结果。在进行场景构建、模型制作时需要预先做好一些预防工作。",[32,1383,1385],{"id":1384},"indirect-seams","Indirect Seams",[11,1387,1388],{},"间接光照的运算结果在模型之间的接缝处会出现不自然的裂缝",[11,1390,1391],{},[44,1392],{"alt":1108,"src":1393},"\u002Fwp-content\u002Fuploads\u002F2017\u002F08\u002Fimage_thumb-15.png",[11,1395,1396],{},"这种的主要原因是两个Mesh之间虽然是平滑的，但是在间接光照进行阴影计算时并不知道这些信息。",[11,1398,1399],{},"可以通过在世界设置中调节间接光照的质量和平滑度来减少这种现象",[11,1401,1402],{},[44,1403],{"alt":1108,"src":1404},"\u002Fwp-content\u002Fuploads\u002F2017\u002F08\u002Fimage_thumb-16.png",[11,1406,1407],{},"提高间接光照质量会加重光照构建的成本，而如果过于提高平滑度的话，会导致间接光照的很多细节被丢弃。",[11,1409,1410],{},"所以一个更好的解决方案是，在构建关卡时，如果是一个平滑的面的话就直接使用一个整体的模型来做，而不是用好几个模型拼接而成。",[32,1412,1414],{"id":1413},"uv-seams","UV Seams",[11,1416,1417],{},"这个是由于模型的UV没有很好的接合造成的，由于邻近的顶点在UV上并不连接，在进行间接光照计算时，产生的结果就没有办法很好的利用这些信息。",[11,1419,1420],{},"根据官方的说明，提高间接光照质量并不会解决UV Seams的问题。",[11,1422,1423],{},"这个问题更多的是在建模上进行解决。",[11,1425,1426],{},"不要生成这样的UV",[11,1428,1429],{},[44,1430],{"alt":1108,"src":1431},"\u002Fwp-content\u002Fuploads\u002F2017\u002F08\u002Fimage_thumb-17.png",[11,1433,1434],{},"而是尽量保持邻接信息",[11,1436,1437],{},[44,1438],{"alt":1108,"src":1439},"\u002Fwp-content\u002Fuploads\u002F2017\u002F08\u002Fimage_thumb-18.png",[32,1441,1443],{"id":1442},"bleeding","Bleeding",[11,1445,1446],{},"光照泄露的主要原因是光照贴图的分辨率造成的",[11,1448,1449],{},[44,1450],{"alt":1108,"src":1451},"\u002Fwp-content\u002Fuploads\u002F2017\u002F08\u002Fimage_thumb-19.png",[11,1453,1454],{},"像这样室外的光照感觉上就像直接透过到了室内，显然不符合预期。",[11,1456,1457],{},"虽然通过修改光照贴图的分辨率来进行应对，但是这样就相当于绕过了问题的来源。",[11,1459,1460],{},"更根本的解决方法是，让“地板”与房间的尺寸匹配，这样在光照计算时，房间的地板就不会接收到外部的光的光照计算。",[21,1462,1464],{"id":1463},"tips","TIPS",[11,1466,1467],{},"UE4的光照系统中有一些通用的工具和功能，可以方便的对光照进行布置。",[32,1469,1471],{"id":1470},"lpv","LPV",[11,1473,1474],{},"Light Propagation Volumes目前处于开发阶段，但是在光照相关的属性的很多部分都能看到它的对应属性。",[11,1476,1477],{},"这个体积主要的作用是，在动态光照中对间接光照之类的效果进行光线传播运算。",[11,1479,1480],{},"功能上非常的有用，因为有时候确实会需要在动态光照中有间接光照这样的效果来加强场景的真实性。",[11,1482,1483,1484,358],{},"更多的内容可以参考官方的[",[352,1485,1488],{"href":1486,"rel":1487},"https:\u002F\u002Fdocs.unrealengine.com\u002Flatest\u002FCHN\u002FEngine\u002FRendering\u002FLightingAndShadows\u002FLightPropagationVolumes\u002Findex.html",[356],"LPV文档",[11,1490,1491],{},"这里需要注意的是LPV虽然从命名上看起来像是一个体积控件，但是其实并不存在这样一个Volume，其属性是在PostProcess中进行修改的。",[11,1493,1494],{},"在开启之后可以在",[11,1496,1497],{},[44,1498],{"alt":1108,"src":1499},"\u002Fwp-content\u002Fuploads\u002F2017\u002F08\u002Fimage_thumb-20.png",[11,1501,1502],{},"打开LPV的属性可视化。",[32,1504,1506],{"id":1505},"csm","CSM",[11,1508,1509],{},"Cascade Shadow Map是UE4阴影贴图的使用方式，在Far Shadow、Dynamic Shadow和Static Shadow中使用了这个机制。",[11,1511,1512],{},"这个机制的主要作用是，在不同的距离层级，使用不同精度的阴影贴图。",[11,1514,1515],{},"在设定CSM的同时，还可以对过渡效果进行调节",[11,1517,1518],{},[44,1519],{"alt":1520,"src":1521},"clip_image00115","\u002Fwp-content\u002Fuploads\u002F2017\u002F08\u002Fclip_image00115_thumb.png",[11,1523,1524],{},"对应的CSM数量被设置为0的话，就相当于关闭了相应的阴影类型。",[11,1526,1527],{},[44,1528],{"alt":1108,"src":1529},"\u002Fwp-content\u002Fuploads\u002F2017\u002F08\u002Fimage_thumb-21.png",[11,1531,1532],{},"CSM的计算范围可以通过在显示中打开",[11,1534,1535],{},[44,1536],{"alt":1108,"src":1537},"\u002Fwp-content\u002Fuploads\u002F2017\u002F08\u002Fimage_thumb-22.png",[11,1539,1540],{},"这个选项来进行预览",[11,1542,1543],{},[44,1544],{"alt":1108,"src":1545},"\u002Fwp-content\u002Fuploads\u002F2017\u002F08\u002Fimage_thumb-23.png",[11,1547,1548],{},"类似这样，可以在调节相关属性的时候有一个好的可视化工具。",[32,1550,1552],{"id":1551},"emissive-material","Emissive Material",[11,1554,1555],{},"自发光颜色的材质是通过HDR来实现泛光效果的，因此它本身并不参与光照运算。",[11,1557,1558],{},"通过在使用了自发光颜色材质的物体上打开",[11,1560,1561],{},[44,1562],{"alt":1108,"src":1563},"\u002Fwp-content\u002Fuploads\u002F2017\u002F08\u002Fimage_thumb-24.png",[11,1565,1566],{},"可以让其能够照亮周围环境，但仅限于静态光照。当物体是Movable时，没有办法开启这个选项。",[11,1568,1569],{},"视频中实现的类型于动态照亮的效果是通过在物体上绑定一个改变GI的PP来实现的，然后两个PP之间的Blending就会改变空间内的灯光造成的影响，形成类似于被物体本身照亮的效果。",[32,1571,1573],{"id":1572},"error-coloring","Error Coloring",[11,1575,1576],{},"错误着色可以用于排查静态光照计算时报出的UV方面的错误，因为光照构建时只是提示物体上有UV的Overlapping和Wrapping有时候还是很难找到对应的问题的，尤其是模型并不是自己构建的情况下。",[11,1578,1579],{},[44,1580],{"alt":46,"src":1581},"\u002Fwp-content\u002Fuploads\u002F2017\u002F08\u002Fclip_image001_thumb.png",[11,1583,1584],{},"打开这个选项之后要将光照质量调整为预览，才能看到错误着色。",[11,1586,1587],{},[44,1588],{"alt":206,"src":1589},"\u002Fwp-content\u002Fuploads\u002F2017\u002F08\u002Fclip_image0015_thumb.png",[11,1591,1592],{},"重新构建一次光照，就能看到",[11,1594,1595],{},[44,1596],{"alt":1108,"src":1597},"\u002Fwp-content\u002Fuploads\u002F2017\u002F08\u002Fimage_thumb-25.png",[11,1599,1600],{},"橙色的部分是Overlapping而绿色的部分是Wrapping。",[32,1602,1604],{"id":1603},"volumetric-lighting","Volumetric Lighting",[11,1606,1607,1608,1613],{},"这是类似于聚光灯的[",[352,1609,1612],{"href":1610,"rel":1611},"https:\u002F\u002Fdocs.unrealengine.com\u002Flatest\u002FCHN\u002FEngine\u002FRendering\u002FLightingAndShadows\u002FLightShafts\u002Findex.html",[356],"Light Shaft","]的效果，官方的Blueprint示例工程中也有类似的名为GodRay的效果实现。",[11,1615,1616],{},"在引擎内容中搜索LightBeam就能找到",[11,1618,1619],{},[44,1620],{"alt":1108,"src":1621},"\u002Fwp-content\u002Fuploads\u002F2017\u002F08\u002Fimage_thumb-26.png",[11,1623,1624],{},"这里的模拟方式是在类似光束效果的模型上贴上一个Translucent贴图。",[11,1626,1627],{},"虽然半透明材质的消耗比普通的材质高，但是在实现光束效果上却是很高的成本节约。",[21,1629,562],{"id":562},[11,1631,1632],{},"动态光照是实时计算的光照，如果关闭了光照预计算的话，所有的光照计算都是实时生成的。如果没有启用LPV的话，静态光照中的间接光照缓存无法使用的情况下，有时候也会造成画面质量的下降。",[32,1634,1636],{"id":1635},"distance-filed","Distance Filed",[11,1638,1639],{},"距离场在动态光照的优化和填补中有相当大的作用，距离场的基本原理就是在模型的周围向外扩散而成的距离场。",[11,1641,1642],{},[44,1643],{"alt":1644,"src":1645},"clip_image0017","\u002Fwp-content\u002Fuploads\u002F2017\u002F08\u002Fclip_image0017_thumb.png",[11,1647,1648],{},"距离场的生成需要在项目设置中进行开启，虽然距离场生成后会产生额外的存储成本，但是可以在动态光照优化中起到很大的作用。",[11,1650,1651],{},"利用距离场生成的阴影的成本会比动态光照的阴影低很多，通常情况下，将动态光照的作用范围调小",[11,1653,1654],{},[44,1655],{"alt":1108,"src":1656},"\u002Fwp-content\u002Fuploads\u002F2017\u002F08\u002Fimage_thumb-27.png",[11,1658,1659],{},"然后在基本上看不到阴影差别的距离上使用距离场生成的阴影进行替代可以很好的降低动态光照对场景的消耗。",[11,1661,1662],{},"事实是，大部分情况下，动态光照的阴影和距离场的阴影，在中距离上基本上没有什么太大的差别。",[1664,1665,1667],"h4",{"id":1666},"distance-field-resolution","Distance field resolution",[11,1669,1670],{},"Distance field resolution这个属性是用于调整距离场的精细度的，在Mesh自己的设置里面可以找到。",[11,1672,1673],{},"稍微增加一点就会有明显的提升，重要的是平衡的选择，远距离物体完全没有必要性。",[11,1675,1676],{},[44,1677],{"alt":1678,"src":1679},"clip_image0019","\u002Fwp-content\u002Fuploads\u002F2017\u002F08\u002Fclip_image0019_thumb.png",[1664,1681,1683],{"id":1682},"raytraced-distahcefield-shadows","RayTraced DistahceField Shadows",[11,1685,1686],{},"对于需要柔和的渐变光照的情况，可以使用",[11,1688,1689],{},[44,1690],{"alt":55,"src":1691},"\u002Fwp-content\u002Fuploads\u002F2017\u002F08\u002Fclip_image002_thumb.png",[11,1693,1694],{},"打开只有在下面的属性可以调节因距离而变化的边缘阴影的效果。",[1664,1696,1698],{"id":1697},"selfshadow","SelfShadow",[11,1700,1701],{},"当物体的自身投影出问题的时候可以试着调节",[11,1703,1704],{},[44,1705],{"alt":79,"src":1706},"\u002Fwp-content\u002Fuploads\u002F2017\u002F08\u002Fclip_image003_thumb.png",[11,1708,1709],{},"来进行修正。",[1664,1711,1713],{"id":1712},"two-sided-distance-field-generation","Two-Sided Distance Field Generation",[11,1715,1716],{},"一般在Foliage上会使用到的属性，如果觉得生成的DF数据形成的投影不够浓密的话，可以打开这个选项。",[11,1718,1719],{},[44,1720],{"alt":1108,"src":1721},"\u002Fwp-content\u002Fuploads\u002F2017\u002F08\u002Fimage_thumb-28.png",[11,1723,1724],{},"双面计算会产生额外的成本，在有必要的情况下使用即可，不过也可以考虑使用下面的替代物品。",[1664,1726,1727],{"id":1727},"距离场替代物品",[11,1729,1730],{},"使用一个替代的物品来计算距离场，通常也是在Foliage中使用到，可以降低树的面多造成的性能影响。",[11,1732,1733],{},[44,1734],{"alt":1108,"src":1735},"\u002Fwp-content\u002Fuploads\u002F2017\u002F08\u002Fimage_thumb-29.png",[32,1737,1739],{"id":1738},"contact-shadow","Contact Shadow",[11,1741,1742],{},"这个是Light Source中的属性",[11,1744,1745],{},[44,1746],{"alt":1747,"src":1748},"clip_image00111","\u002Fwp-content\u002Fuploads\u002F2017\u002F08\u002Fclip_image00111_thumb.png",[11,1750,1751],{},"设置成0以上的值的话就会进行接触阴影的计算，这个计算时工作在屏幕空间的。",[11,1753,1754],{},"由于是工作在屏幕空间，在物体距离较远时阴影的损失也不会变的严重。",[11,1756,1757],{},"可以用于填补默认的级联阴影的距离损失，也就是说，可以调低级联阴影，降低阴影消耗。",[32,1759,1761],{"id":1760},"light-function","Light Function",[11,1763,1764],{},"光照函数相对阴影计算而言的成本是很低的，所以在实现云的投影的时候通常会使用光照函数。",[11,1766,1767],{},[44,1768],{"alt":1108,"src":1769},"\u002Fwp-content\u002Fuploads\u002F2017\u002F08\u002Fimage_thumb-30.png",[11,1771,1772],{},"官方的优化建议中也有说明，如果多个组合光源的效果可以用光照函数来替代的话，可以很好的提高效率。",[32,1774,1776],{"id":1775},"distance-filed-ao","Distance Filed AO",[11,1778,1779],{},"这个是天空光特有的功能，天空光可以利用距离场的生成数据进行环境光的投影计算",[11,1781,1782],{},[44,1783],{"alt":1784,"src":1785},"clip_image00113","\u002Fwp-content\u002Fuploads\u002F2017\u002F08\u002Fclip_image00113_thumb.png",[11,1787,1788],{},"只有当天空光是可移动的时候才能使用。",[32,1790,1792],{"id":1791},"ies","IES",[11,1794,1795],{},"IES的成本比光照函数还低一些，可以实现一些低成本的投影效果。",[11,1797,1798],{},"有助于关闭不必要的光照投影，例如只是用于模拟灯罩、遮挡的投影，或者干脆是车灯这样的效果。",[11,1800,1801,1802,358],{},"IES的使用可以参照官方的[",[352,1803,1806],{"href":1804,"rel":1805},"https:\u002F\u002Fdocs.unrealengine.com\u002Flatest\u002FCHN\u002FEngine\u002FRendering\u002FLightingAndShadows\u002FIESLightProfiles\u002Findex.html",[356],"IES文档",[32,1808,606],{"id":605},[11,1810,1811],{},"这是与通常的静态光照和动态光照相反的一种阴影模式，主要是为了保持在远景上的投影来使得场景看起来更有真实感。",[11,1813,1814],{},"通常在Landscape上开启使用，对于需要的物体，也可以开启使用。注意，要在对应的光源上也开启Far Shadow才行。",[32,1816,1817],{"id":1817},"设置",[11,1819,1820],{},"在项目设置中个，有一个关闭静态光照的总开关",[11,1822,1823],{},[44,1824],{"alt":1108,"src":1825},"\u002Fwp-content\u002Fuploads\u002F2017\u002F08\u002Fimage_thumb-31.png",[11,1827,1828],{},"不过通常在对应的地图的世界设置中进行关闭更加具有可控制性一些。",[11,1830,1831],{},"还有针对移动端CSM的专有设定",[11,1833,1834],{},[44,1835],{"alt":1108,"src":1836},"\u002Fwp-content\u002Fuploads\u002F2017\u002F08\u002Fimage_thumb-32.png",[21,1838,1839],{"id":1839},"优化",[11,1841,1842],{},"UE4提供了一些用于场景优化的工具，像是LOD和Mipmap这样的机制在场景优化的时候就比较实用。",[32,1844,1846],{"id":1845},"cull-distance-volume","Cull Distance Volume",[11,1848,1849],{},"这个是一个用于裁剪的体积，其内部的物体在远离玩家的时候回直接被裁剪掉，不参与渲染。",[11,1851,1852],{},"由于动态光照的性能消耗与参与计算的面数成比例，这样就可以起到一定的优化作用了，思路基本和LOD相同。",[11,1854,1855],{},[44,1856],{"alt":1108,"src":1857},"\u002Fwp-content\u002Fuploads\u002F2017\u002F08\u002Fimage_thumb-33.png",[11,1859,1860],{},"CullDistance的属性比较简单，每个数组的元素表示的是物体大小小于该值的，应该在里玩家多少距离处隐藏。这里的数据虽然会被按照顺序使用，但是实际上打乱顺序也没有关闭。",[11,1862,1863],{},"不过有两个问题需要留意",[11,1865,1866],{},"首先，必须在PIE以上的状态Cull Distance Volume才会起作用。在编辑器内必须按G进入游戏预览模式才能看到效果。",[11,1868,1869],{},"然后，必须有一个cull distance为0的设置赋给一个大的size，如上面的(1000,0)，否则当距离到达最远的Distance时，会裁剪掉内部的所有物体，包括天空球、大气雾这些实际上没有Size的物体。",[32,1871,1873],{"id":1872},"foliage-culling","Foliage Culling",[11,1875,1876],{},"Foliage的Culling属性可以在每一个独立的Foliage上进行设置",[11,1878,1879],{},[44,1880],{"alt":1108,"src":1881},"\u002Fwp-content\u002Fuploads\u002F2017\u002F08\u002Fimage_thumb-34.png",[11,1883,1884],{},"如上面的Cull Distance设定，在没有使用PerinstanceFadeAmount的情况下，采用的裁剪距离时1000。",[11,1886,1887,1888,1892],{},"从500",[1889,1890,1891],"del",{},"1000的范围内PerInstanceFadeAmount由1","0进行变化，这样就可以在材质中对Foliage进行一个Fade的过程，而不是直接突兀的从边界消失。",[11,1894,1895],{},[44,1896],{"alt":1108,"src":1897},"\u002Fwp-content\u002Fuploads\u002F2017\u002F08\u002Fimage_thumb-35.png",[11,1899,1900],{},"使用PerInstanceFadeAmount配合Translucent的Mask替代方案DitherTemporalAA，可以实现较好的过渡效果。",[21,1902,1903],{"id":1903},"总结",[11,1905,1906],{},"光照是渲染中的一个很重要的部分，如果没有处理好的话，不仅场景不好看，还极其的影响效率，是非常需要注意的一个部分。",{"title":303,"searchDepth":304,"depth":305,"links":1908},[1909,1915,1920,1927,1943,1947],{"id":698,"depth":304,"text":698,"children":1910},[1911,1912,1913,1914],{"id":1253,"depth":305,"text":1254},{"id":1266,"depth":305,"text":1267},{"id":1304,"depth":305,"text":1304},{"id":550,"depth":305,"text":551},{"id":1378,"depth":304,"text":1378,"children":1916},[1917,1918,1919],{"id":1384,"depth":305,"text":1385},{"id":1413,"depth":305,"text":1414},{"id":1442,"depth":305,"text":1443},{"id":1463,"depth":304,"text":1464,"children":1921},[1922,1923,1924,1925,1926],{"id":1470,"depth":305,"text":1471},{"id":1505,"depth":305,"text":1506},{"id":1551,"depth":305,"text":1552},{"id":1572,"depth":305,"text":1573},{"id":1603,"depth":305,"text":1604},{"id":562,"depth":304,"text":562,"children":1928},[1929,1937,1938,1939,1940,1941,1942],{"id":1635,"depth":305,"text":1636,"children":1930},[1931,1933,1934,1935,1936],{"id":1666,"depth":1932,"text":1667},4,{"id":1682,"depth":1932,"text":1683},{"id":1697,"depth":1932,"text":1698},{"id":1712,"depth":1932,"text":1713},{"id":1727,"depth":1932,"text":1727},{"id":1738,"depth":305,"text":1739},{"id":1760,"depth":305,"text":1761},{"id":1775,"depth":305,"text":1776},{"id":1791,"depth":305,"text":1792},{"id":605,"depth":305,"text":606},{"id":1817,"depth":305,"text":1817},{"id":1839,"depth":304,"text":1839,"children":1944},[1945,1946],{"id":1845,"depth":305,"text":1846},{"id":1872,"depth":305,"text":1873},{"id":1903,"depth":304,"text":1903},"2017-08-23",{"layout":319,"status":320,"published":321,"author":1950,"author_login":324,"author_email":325,"wordpress_id":1951,"wordpress_url":1952,"date_gmt":1953,"excerpt":1954},{"display_name":323,"login":324,"email":325,"url":303},1952,"\u002F\u002F?p=1952","2017-08-23 07:00:16 +0000",{"type":8,"value":1955},[1956],[11,1957,1213],{},"\u002F2017-08-23-ue4-lighting-and-optimize",{"title":1208,"description":1213},"_legacy\u002F2017\u002F2017-08-23-ue4-lighting-and-optimize",[337,1962,1003],"Rendering","ImEbV9hxl70JgN620bn2U_qJFuejFQ8rUEAkeajNxaU",{"id":1965,"title":1966,"body":1967,"date":2113,"description":1971,"extension":317,"meta":2114,"navigation":321,"path":2123,"seo":2124,"stem":2125,"tags":2126,"__hash__":2127},"blogs\u002F_legacy\u002F2017\u002F2017-08-09-ue4-17-release-review.md","UE4.17新功能探索",{"type":8,"value":1968,"toc":2106},[1969,1972,1975,1978,1981,1984,1987,1990,1993,1996,2000,2003,2006,2011,2014,2019,2022,2026,2029,2032,2035,2040,2043,2048,2051,2054,2058,2061,2066,2069,2072,2075,2078,2083,2086,2089,2092,2097,2100,2103],[11,1970,1971],{},"4.17的版本更新已经正式的Release了，虽然之前一直有下载Preview的版本进行测试，却没有什么时间查看新添加的功能呢。",[11,1973,1974],{},"现在官方已经有了正式的Release Note，要看看引擎又添加了什么新功能就变得更简单了呢。",[21,1976,1977],{"id":1977},"概览",[11,1979,1980],{},"这次的主要更新之一时Sequencer，不过遗憾的是并没有真正是使用过Sequencer，所以不是很清楚官方的功能提升到底提升到了什么程度。",[11,1982,1983],{},"大概就是简化和强化操作之类的，Sequencer不仅仅是用来制作过场动画的工具，同时也能制作达到影视级别的CG动画输出。",[11,1985,1986],{},"官方的新声音系统，Unreal Audio依然在制作中。",[11,1988,1989],{},"平台支持上，包括苹果的ARKit和Google的Tango都开始了早期支持。",[11,1991,1992],{},"UMG有了新的旋转剪切系统，不过大概用到的人并不多。而蓝图中现在有了伪节点，这个功能就比较好了，可以防止因为C++代码出现变更而蓝图链接全部断掉，完全不知如何是好的局面出现。现在因为定义变更之类的原因断掉的节点会保留原来的节点，标记为红色。这样就可以按图索骥，依样恢复蓝图的连接了。",[11,1994,1995],{},"同时蓝图的编译有了新的Compile Manager，据说蓝图编译速度加快了50%。",[21,1997,1999],{"id":1998},"vrar","VR\u002FAR",[11,2001,2002],{},"这次的更新中对VR\u002FAR的支持力度变得更大了，比如Sereo Layers现在有了一个平台无关的实现，方便于针对不同VR设备的快速的UI制作。还有诸如VR摄像预览功能之类的。",[11,2004,2005],{},"一个比较大的更新是，现在可以为针对VR游戏的设备设置分屏了，可以让VR头戴设备中的显示与显示器上输出的显示不同。",[11,2007,2008],{},[44,2009],{"alt":1108,"src":2010},"\u002Fwp-content\u002Fuploads\u002F2017\u002F08\u002Fimage_thumb.png",[11,2012,2013],{},"可以通过蓝图函数进行设置控制，据说以后会加入各自的玩家操作支持，使得显示器和VR头盔可以实现”联机”。目前也能看到这样的函数：",[11,2015,2016],{},[44,2017],{"alt":1108,"src":2018},"\u002Fwp-content\u002Fuploads\u002F2017\u002F08\u002Fimage_thumb-1.png",[11,2020,2021],{},"由于没有VR设备，无法进行尝试。",[21,2023,2025],{"id":2024},"render","Render",[11,2027,2028],{},"4.17的一个比较期待的更新就是自定义Shader的支持。",[11,2030,2031],{},"虽然官方坚持99.9%的特效都可以通过现有的材质系统来实现，但是对自定义Shader的支持还是到来了。毕竟有时候出于效率和效果的考虑，还是有需要介入到Shader中去的。",[11,2033,2034],{},"自定义Shader的用法ReleaseNote中已经要简要的说明，4.17新推出的",[11,2036,2037],{},[44,2038],{"alt":1108,"src":2039},"\u002Fwp-content\u002Fuploads\u002F2017\u002F08\u002Fimage_thumb-2.png",[11,2041,2042],{},"插件中就能看到官方是如何对自定义Shader进行使用的，这个插件也是年初GDC上官方演示的合成特效之一。而其他的合成效果则在",[11,2044,2045],{},[44,2046],{"alt":1108,"src":2047},"\u002Fwp-content\u002Fuploads\u002F2017\u002F08\u002Fimage_thumb-3.png",[11,2049,2050],{},"这个插件中。",[11,2052,2053],{},"还有一个将Sequencer输出到图片上然后贴到Camera前方的Image Plate插件，应当是为了方便过场动画的渲染和播放吧。",[21,2055,2057],{"id":2056},"asset-management-framework","Asset Management Framework",[11,2059,2060],{},"4.16就开始的试验性功能，在这个版本进行了进一步的加强。",[11,2062,2063],{},[44,2064],{"alt":1108,"src":2065},"\u002Fwp-content\u002Fuploads\u002F2017\u002F08\u002Fimage_thumb-4.png",[11,2067,2068],{},"开放了很多蓝图接口，现在可以自主的对预先定义的资产进行异步加载了。",[11,2070,2071],{},"不会像以前那样需要复杂的编码，而且据说对加载速度的提升也比较明显。",[11,2073,2074],{},"但是打包和资产ID的指定方面可能要到更新的版本才会有变更。",[11,2076,2077],{},"与此同时添加的还有Asset Registry的相关功能的蓝图开放。",[11,2079,2080],{},[44,2081],{"alt":1108,"src":2082},"\u002Fwp-content\u002Fuploads\u002F2017\u002F08\u002Fimage_thumb-5.png",[11,2084,2085],{},"这样使用蓝图做编辑器扩展就更方便了……",[21,2087,2088],{"id":2088},"其他",[11,2090,2091],{},"其他的还有Sobol准随机序列的蓝图和材质节点的添加，以及基于贴图的重要度采样功能：",[11,2093,2094],{},[44,2095],{"alt":1108,"src":2096},"\u002Fwp-content\u002Fuploads\u002F2017\u002F08\u002Fimage_thumb-6.png",[11,2098,2099],{},"以及很多新的功能和改进。",[11,2101,2102],{},"其中有一个比较有用的功能是实例化材质的烘焙。",[11,2104,2105],{},"可以将复杂的材质节点烘焙成简单的材质，有效的降低渲染消耗。",{"title":303,"searchDepth":304,"depth":305,"links":2107},[2108,2109,2110,2111,2112],{"id":1977,"depth":304,"text":1977},{"id":1998,"depth":304,"text":1999},{"id":2024,"depth":304,"text":2025},{"id":2056,"depth":304,"text":2057},{"id":2088,"depth":304,"text":2088},"2017-08-09",{"layout":319,"status":320,"published":321,"author":2115,"author_login":324,"author_email":325,"wordpress_id":2116,"wordpress_url":2117,"date_gmt":2118,"excerpt":2119},{"display_name":323,"login":324,"email":325,"url":303},1871,"\u002F\u002F?p=1871","2017-08-09 13:36:58 +0000",{"type":8,"value":2120},[2121],[11,2122,1971],{},"\u002F2017-08-09-ue4-17-release-review",{"title":1966,"description":1971},"_legacy\u002F2017\u002F2017-08-09-ue4-17-release-review",[337],"uMCZJKl2CAdmMSZNqSjsiRcHTFhKh8HppZXTv_Y2-Ew",222,1788763183355]