[{"data":1,"prerenderedAt":1488},["ShallowReactive",2],{"page-UE4-15":3,"page-count-UE4":1487},[4,391,841,983,1213],{"id":5,"title":6,"body":7,"date":366,"description":13,"extension":367,"meta":368,"navigation":371,"path":383,"seo":384,"stem":385,"tags":386,"__hash__":390},"blogs\u002F_legacy\u002F2015\u002F2015-06-19-ue4%e7%89%a9%e4%bd%93%e7%a0%b4%e7%a2%8e.md","UE4物体破碎",{"type":8,"value":9,"toc":361},"minimark",[10,14,17,20,27,32,41,54,57,60,66,72,75,80,83,88,91,96,99,104,107,112,115,118,123,126,131,134,139,142,147,152,155,160,163,168,171,176,179,184,187,192,195,200,203,208,211,216,219,224,227,232,235,240,245,248,253,256,261,264,269,272,277,280,285,288,293,298,301,306,309,314,317,322,325,328,337,340,345,352,355,358],[11,12,13],"p",{},"UE4的破碎通过可破坏网格物体进行实现，任何一个网格都可以转换为可破坏的网格。",[11,15,16],{},"当前使用的UE4版本：4.8.0。",[11,18,19],{},"在实际使用中，要破坏一个物体就必须通过蓝图产生伤害或是在设置中设定碰撞伤害。传递伤害的蓝图节点如下：",[11,21,22],{},[23,24],"img",{"alt":25,"src":26},"image","\u002Fwp-content\u002Fuploads\u002F2015\u002F06\u002Fimage_thumb2.png",[11,28,29],{},[23,30],{"alt":25,"src":31},"\u002Fwp-content\u002Fuploads\u002F2015\u002F06\u002Fimage_thumb3.png",[11,33,34,35,40],{},"破坏效果相关的设定几乎都可以在可破坏网格的属性页面进行调整。当前UE4版本中的碰撞面板只能产生深度为1的Voronoi破碎效果，一般情况下就足够使用了。如果需要复杂的破碎效果，例如敲破墙壁等，需要借助",[36,37,39],"a",{"href":38},"\u002F?p=1168","Apex","来制作后导入引擎。破碎相关的属性中有几个概念比较重要。",[42,43,44,48,51],"ul",{},[45,46,47],"li",{},"支撑（Support）：一个可破碎的物体在实际的物理世界中是不会一受力就土崩瓦解的，那是因为物体与世界以及物体内部之间有支撑作用。支撑就是用来模拟这个效果的。",[45,49,50],{},"碎屑（Debris）：一些过小的碎片对于游戏模拟是没有意义的，可以让他们在一定条件下自行消失。",[45,52,53],{},"深度（Depth）：相当与破碎时的层级，当前UE4版本下需要使用Apex来生成。一般物体的部分破坏、复杂的支撑结构都需要借助多深度来实现。",[11,55,56],{},"可破坏物体的属性面板中影响比较大的是旗标设定，其余大部分属性都是Apex的属性，如果要使用Apex制作的话在这里需要重复设定的内容就比较少。",[11,58,59],{},"使用到的属性整理如下：",[11,61,62],{},[63,64,65],"em",{},"Flags",[11,67,68],{},[69,70,71],"strong",{},"Accumulate Damage",[11,73,74],{},"累积伤害，当打开时物体会累积所受到的伤害。当累积伤害超过阈值时就会破碎。",[11,76,77],{},[69,78,79],{},"Asset Defined Support",[11,81,82],{},"当打开时，标记为Is Support Chunk的块将会有支撑效果。",[11,84,85],{},[69,86,87],{},"World Support",[11,89,90],{},"当打开时，标记为Is Support Chunk的块与世界接触的部分将会获得支撑。",[11,92,93],{},[69,94,95],{},"Debris TimeOut",[11,97,98],{},"是否启用碎屑超时设定，当启用时碎屑将会在到达生命周期时被删除。",[11,100,101],{},[69,102,103],{},"Debris Max Separation",[11,105,106],{},"是否启用碎屑消亡距离设定，当启用时碎屑将会在到达消亡距离时被删除。",[11,108,109],{},[69,110,111],{},"Crumble Smallest Chunks",[11,113,114],{},"当开启时，系统会对最小的碎片进行瓦解。如果有设置对应的粒子系统则会使用粒子的效果，如果没有设置的话则直接清除该碎片。",[11,116,117],{},"另，目前蓝图中暂时没有找到指定瓦解粒子系统的设置点，灰尘粒子的指定也没有，暂时不会用到就没有做进一步的研究了。",[11,119,120],{},[69,121,122],{},"Accurate Raycasts",[11,124,125],{},"当开启时，将会使用射线追踪算法对所有与物体发生碰撞的碎片进行搜索。主要用于物体的实际形状和碰撞形态相差比较大的情况下，对破碎点和法线方向进行精确度修正。",[11,127,128],{},[69,129,130],{},"Use Valid Bounds",[11,132,133],{},"是否启用碎片的有效范围，当碎片超出这个范围时，将会被删除。",[11,135,136],{},[69,137,138],{},"Form Extended Structures",[11,140,141],{},"对于多个静态的可破坏物体，如果同时都有设置这个旗标的话。将会互相产生支撑作用。",[11,143,144],{},[63,145,146],{},"Damage",[11,148,149],{},[69,150,151],{},"Damage Threshold",[11,153,154],{},"伤害阈值，当受到的伤害大于这个数值时，物体将会破碎。",[11,156,157],{},[69,158,159],{},"Damage Spread",[11,161,162],{},"伤害扩散指数，指定伤害在物体上传递的速度。在应用范围伤害时产生作用，距离伤害产生点为0的将受到所有的伤害，而到达Damage Radio的距离为止，伤害逐渐衰减为0。",[11,164,165],{},[69,166,167],{},"Enable Impact Damage",[11,169,170],{},"开启碰撞伤害，开启之后在与其他物体发生碰撞时将会接收伤害。",[11,172,173],{},[69,174,175],{},"Impact Damage",[11,177,178],{},"碰撞时接收伤害的指数。碰撞所受伤害为这个指数和冲击力的乘积。",[11,180,181],{},[69,182,183],{},"Default Impact Damage Depth",[11,185,186],{},"碰撞伤害产生的破坏深度。在多碰撞深度，有支撑设定的物体进行破坏时很有作用。。",[11,188,189],{},[69,190,191],{},"Custom Impact Resistance",[11,193,194],{},"自定义冲击阻力开关",[11,196,197],{},[69,198,199],{},"Impact Resistance",[11,201,202],{},"自定义冲击阻力。数值越低时碰撞的物体将受到更少的冲击主力，能更轻易的穿过物体。",[11,204,205],{},[69,206,207],{},"Damage Cap",[11,209,210],{},"伤害上限，规定破碎时所承受的最大伤害。大多用于防止冲击破碎被打开时产生的过于巨大的伤害导致破碎效果大于预期。",[11,212,213],{},[69,214,215],{},"Impact Velocity Threshold",[11,217,218],{},"在物体重叠生成时，物理引擎会检测到物体之间巨大的碰撞力。但是实际上两个物体之间的相对速度是很低的，通过设定这个阈值，来屏蔽小于这个值时的碰撞伤害的发生。",[11,220,221],{},[69,222,223],{},"Max Chunk Speed",[11,225,226],{},"当这个值大于0时，碎片的运行速度将会依次为上限。",[11,228,229],{},[69,230,231],{},"Fracture Impulse Scale",[11,233,234],{},"定义物品破碎时碎片在法线方向的受力比例，这个力将会把碎片推离物体。",[11,236,237],{},[63,238,239],{},"Hierarchy Depth",[11,241,242],{},[69,243,244],{},"Support Depth",[11,246,247],{},"支撑深度，高于这个深度的碎片将会拥有非常精细的支撑效果，而低于这个深度的碎片将不会拥有支撑效果。这个设定将会增进运算的复杂度。",[11,249,250],{},[69,251,252],{},"Minimum Fracture Depth",[11,254,255],{},"低于这个深度的碎片将不会被破坏，这样能实现更好的支撑效果。当这个值大于最大破碎深度时，物体将不会破碎",[11,257,258],{},[69,259,260],{},"Enable Debis",[11,262,263],{},"开启碎屑，一些破碎深度很深，也就是很碎的碎片将被视为碎屑。",[11,265,266],{},[69,267,268],{},"Debirs Depth",[11,270,271],{},"碎片被认定为碎屑深度。",[11,273,274],{},[69,275,276],{},"Essential LOD Depth",[11,278,279],{},"只有高于这个深度的碎片才会被视为“重要”的，默认为0表示破碎深度0，即破碎前的物体。",[11,281,282],{},[69,283,284],{},"Depth Parameters",[11,286,287],{},"一个存储EImpactDamageOverride类型的数组，数组序列对应破碎深度。可以用于对碰撞破碎的伤害传递进行重载。",[11,289,290],{},[63,291,292],{},"Debris",[11,294,295],{},[69,296,297],{},"Debris Lifetime Min",[11,299,300],{},"碎屑最短生命周期。当碎屑到达生命周期时将会被系统删除。",[11,302,303],{},[69,304,305],{},"Debris Lifetime Max",[11,307,308],{},"碎屑最长生命周期",[11,310,311],{},[69,312,313],{},"Debris Max Separation Min",[11,315,316],{},"碎屑消亡距离最小值。当碎屑到达消亡距离时将会被系统删除。",[11,318,319],{},[69,320,321],{},"Debris Max Separation Max",[11,323,324],{},"碎屑消亡距离最大值",[11,326,327],{},"每一个单独的碎屑的生命周期和消亡距离都在对应的最小值和最大值之间。",[11,329,330],{},[69,331,332,333],{},"ValidBounds",[334,335,336],"span",{},"min,max",[11,338,339],{},"规定一个范围，当碎屑离开这个范围时将会被删除。",[11,341,342],{},[63,343,344],{},"Effects",[11,346,347],{},[69,348,349,350],{},"Fracture Effects",[334,351],{},[11,353,354],{},"特效设置，每一个元素的Index都对应相应的破碎深度。可以设置粒子以及声音效果。",[356,357],"hr",{},[11,359,360],{},"物体破碎的逻辑相对简单，和游戏逻辑进行结合也很方便。如果和粒子系统结合的话，应该会有更好的效果。",{"title":362,"searchDepth":363,"depth":364,"links":365},"",2,3,[],"2015-06-19","md",{"layout":369,"status":370,"published":371,"author":372,"author_login":373,"author_email":374,"author_url":375,"wordpress_id":376,"wordpress_url":377,"date_gmt":378,"excerpt":379},"post","publish",true,{"display_name":373,"login":373,"email":374,"url":375},"chaoshikari","chaoshikari@gmail.com","\u002F",1301,"\u002F\u002F?p=1301","2015-06-19 09:11:01 +0000",{"type":8,"value":380},[381],[11,382,13],{},"\u002F2015-06-19-ue4物体破碎",{"title":6,"description":13},"_legacy\u002F2015\u002F2015-06-19-ue4%e7%89%a9%e4%bd%93%e7%a0%b4%e7%a2%8e",[387,388,389],"UE4","物理","破碎","U4xzoxstfihPzy96hFGxGC-roqkl8xBxfzJzj7f_LlU",{"id":392,"title":393,"body":394,"date":824,"description":398,"extension":367,"meta":825,"navigation":371,"path":834,"seo":835,"stem":836,"tags":837,"__hash__":840},"blogs\u002F_legacy\u002F2015\u002F2015-06-15-ue4-materia-explore.md","UE4材质初探",{"type":8,"value":395,"toc":820},[396,399,401,404,408,411,416,419,422,427,430,435,438,443,446,449,454,457,462,465,468,473,476,481,484,489,492,497,500,503,508,511,516,519,525,530,533,538,541,546,549,554,557,562,565,570,573,576,579,584,587,593,598,601,607,612,615,621,626,636,642,647,658,663,666,671,674,683,688,691,697,702,705,711,716,719,724,727,732,735,740,743,748,751,761,766,769,774,777,782,785,790,793,798,801,806,809,815,817],[11,397,398],{},"UE4的材质表面上看起来很简单，可是到了用的时候却总是没有办法实现好的效果。所以特意对文档进行阅读，初步了解了一下主要知识点。",[11,400,16],{},[11,402,403],{},"UE4中的材质有很多用途，可以用于光照、延迟渲染、粒子系统等等。由于暂时不会用到，目前只做了最基础的材质使用的研究，也就是说是Materia Type为Surface的情况。材质的最终输出节点上的可用项会随着功能选择的不同而有所不同。即便使用Materia Function使所有的引脚都是可用的也会在实际使用时根据选择而被禁用。",[405,406,407],"h2",{"id":407},"材质输入引脚",[11,409,410],{},"材质中最为关键的是作为最终输出结果的引脚，根据情况的不同有的会使用，有的并不会被使用。",[11,412,413],{},[69,414,415],{},"基础颜色（Base Color）",[11,417,418],{},"定义材质的颜色，接受参数为Vector3(RGB)。颜色采用float形式，任何超出范围的输入数值都将被clamp到0～1的范围内。",[11,420,421],{},"相当于在摄影中使用偏光镜滤除由反射引起的杂光之后的物体的颜色。偏光镜的效果可参照以下对比图。",[11,423,424],{},[23,425],{"alt":25,"src":426},"\u002Fwp-content\u002Fuploads\u002F2015\u002F06\u002Fimage_thumb.png",[11,428,429],{},"右边为加了偏光镜后的效果。",[11,431,432],{},[69,433,434],{},"金属（Metallic）",[11,436,437],{},"定义材质接近金属的程度。0～1的范围由低到高的接近金属材质。从个人感官上，金属性决定的是类似于高光反射强度的参数。",[11,439,440],{},[69,441,442],{},"高光（Specular）",[11,444,445],{},"在大多数情况下保留默认的0.5即可的参数。调整的是非金属材质的高光反射强度，对金属材质无效。",[11,447,448],{},"经实际测试，在金属性为0.5时，这个参数几乎没有可视觉识别的影响。在金属性为0时可以为增加一定程度的高光反射。",[11,450,451],{},[69,452,453],{},"粗糙度（Roughness）",[11,455,456],{},"定义材质的粗糙程度。基本和现实生活中一样，数值越低的材质镜面反射的程度就越高，数值越高就倾向于漫反射。",[11,458,459],{},[69,460,461],{},"自发光颜色（Emissive Color）",[11,463,464],{},"定义材质自主发出光线的参数。超过1的数值将会被视为HDR参数，产生泛光的效果。",[11,466,467],{},"高动态范围成像（简称HDRI或HDR）是用来实现比普通图像技术更大曝光动态范围（即更大的明暗差别）的一组技术。高动态范围成像的目的就是要正确地表示真实世界中从太阳光直射到最暗的阴影这样大的范围亮度。",[11,469,470],{},[69,471,472],{},"不透明度（Opacity）",[11,474,475],{},"定义材质的不透明度。",[11,477,478],{},[69,479,480],{},"不透明蒙板（Opacity Mask）",[11,482,483],{},"只在Masked Blend模式可用的参数，与半透明度不同的是。不透明蒙板的输出结果只有可见和完全不可见两种。通常用于实现镂空之类的效果。",[11,485,486],{},[69,487,488],{},"普通（Normal）",[11,490,491],{},"其实是法线参数，通常用于连接法线贴图。UE4中文一直使用『普通』这个翻译，不知是否有什么深意……",[11,493,494],{},[69,495,496],{},"世界位置偏移（World Position Offset）",[11,498,499],{},"世界位置偏移参数使得材质可以控制网格在世界空间中的顶点位置。",[11,501,502],{},"使用时如果遇到剔除投影之类的错误，则需要放大网格的Scale Bounds，虽然这样做会导致效率下降。",[11,504,505],{},[69,506,507],{},"世界位移（World Displacement）",[11,509,510],{},"与上面的属性相似，不过世界位移只能在Tessellation属性有设置时才起作用的。",[11,512,513],{},[69,514,515],{},"多边形细分乘数（Tessellation Multiplier）",[11,517,518],{},"同样只有在设置了Tessellation属性时才可以使用，决定的是瓷砖贴片的个数。",[11,520,521],{},[23,522],{"alt":523,"src":524},"DisplacementNetwork.png","http:\u002F\u002Fdocs.unrealengine.com\u002Flatest\u002Fimages\u002FEngine\u002FRendering\u002FMaterials\u002FMaterialInputs\u002FDisplacementNetwork.jpg",[11,526,527],{},[69,528,529],{},"次表面颜色（Subsurface Color）",[11,531,532],{},"只有Shading Model为Subsurface时才有效的引脚，用于模拟类似于人类皮肤这样在光线透过表面之后会有第二种表面颜色反射的情况。",[11,534,535],{},[69,536,537],{},"透明涂层（Clear Coat）",[11,539,540],{},"透明涂层通常用于模拟在材质的表面有一层薄的透明涂层的情况，如钢琴烤漆之类的效果。",[11,542,543],{},[69,544,545],{},"透明涂层粗糙度（Clear Coat Roughness）",[11,547,548],{},"决定透明涂层的粗糙度。",[11,550,551],{},[69,552,553],{},"环境遮挡（Ambient Occlusion）",[11,555,556],{},"用于连接AO贴图的引脚。",[11,558,559],{},[69,560,561],{},"折射（Refraction）",[11,563,564],{},"用于调整透明材质的折射率的。",[11,566,567],{},[69,568,569],{},"像素深度偏移（Pixel Depth Offset）",[11,571,572],{},"当前官方文档没有说明。",[405,574,575],{"id":575},"常用节点",[11,577,578],{},"引擎提供了很多非常使用的节点，不过数目有点多，只能在实际使用中熟悉才能渐渐的掌握。下面列出的是可能会经常被用到的节点：",[11,580,581],{},[69,582,583],{},"Panner",[11,585,586],{},"对UV坐标进行平移，用于UV动画的实现。",[11,588,589],{},[23,590],{"alt":591,"src":592},"PannerExample.png","http:\u002F\u002Fdocs.unrealengine.com\u002Flatest\u002Fimages\u002FEngine\u002FRendering\u002FMaterials\u002FExpressionReference\u002FCoordinates\u002FPannerExample.jpg",[11,594,595],{},[69,596,597],{},"Rotater",[11,599,600],{},"对UV坐标进行旋转，同样用于UV动画的实现。",[11,602,603],{},[23,604],{"alt":605,"src":606},"RotatorExample.png","http:\u002F\u002Fdocs.unrealengine.com\u002Flatest\u002Fimages\u002FEngine\u002FRendering\u002FMaterials\u002FExpressionReference\u002FCoordinates\u002FRotatorExample.jpg",[11,608,609],{},[69,610,611],{},"BlackBody",[11,613,614],{},"这个节点可以对贴图应用一个黑体辐射效果，实际效果就像是过了一遍热成像扫描。",[11,616,617],{},[23,618],{"alt":619,"src":620},"BlackBody.png","http:\u002F\u002Fdocs.unrealengine.com\u002Flatest\u002Fimages\u002FEngine\u002FRendering\u002FMaterials\u002FExpressionReference\u002FUtility\u002FBlackBody.jpg",[11,622,623],{},[69,624,625],{},"BumpOffset",[11,627,628,629,635],{},"这个节点用于实现",[36,630,634],{"href":631,"rel":632},"https:\u002F\u002Fzh.wikipedia.org\u002Fwiki\u002F%E8%A7%86%E5%B7%AE%E8%B4%B4%E5%9B%BE",[633],"nofollow","视差贴图","，使得贴图更具有真实感。",[11,637,638],{},[23,639],{"alt":640,"src":641},"BumpOffsetExample.png","http:\u002F\u002Fdocs.unrealengine.com\u002Flatest\u002Fimages\u002FEngine\u002FRendering\u002FMaterials\u002FExpressionReference\u002FUtility\u002FBumpOffsetExample.jpg",[11,643,644],{},[69,645,646],{},"ConstantBiasScale",[11,648,649,650,653,654,657],{},"这个节点将输入值加上一个值之后再乘上一个值。例如将正弦函数的结果由",[334,651,652],{},"-1~1","压制到",[334,655,656],{},"0~1","就可以使用1，0.5的参数来操作。",[11,659,660],{},[69,661,662],{},"Fresnel",[11,664,665],{},"这个节点将摄像机向量与网格法线向量进行点乘并应用到0～1的范围中。",[11,667,668],{},[23,669],{"alt":25,"src":670},"\u002Fwp-content\u002Fuploads\u002F2015\u002F06\u002Fimage_thumb1.png",[11,672,673],{},"当摄像机方向与网格的法线垂直时返回1，当方向一致时则返回0。Fresnel的计算在设置了法线贴图时则会使用法线贴图进行运算。这个节点可以用于区分边缘，例如玻璃材质就会使用到。",[11,675,676,677,682],{},"详细的用法可参照官方教程：",[36,678,681],{"href":679,"rel":680},"https:\u002F\u002Fdocs.unrealengine.com\u002Flatest\u002FINT\u002FEngine\u002FRendering\u002FMaterials\u002FHowTo\u002FFresnel\u002Findex.html",[633],"Material - How To Use Fresnel in your Materials","。",[11,684,685],{},[69,686,687],{},"DepthFade",[11,689,690],{},"这个节点的作用是使得两个透明物体在叠加时显得更加自然。",[11,692,693],{},[23,694],{"alt":695,"src":696},"DepthFade1.png","http:\u002F\u002Fdocs.unrealengine.com\u002Flatest\u002Fimages\u002FEngine\u002FRendering\u002FMaterials\u002FExpressionReference\u002FDepth\u002FDepthFade1.jpg",[11,698,699],{},[69,700,701],{},"DepthOfFieldFunction",[11,703,704],{},"这个节点的作用如其名称，提供景深的运算结果。0～1的范围代表从聚焦到模糊。",[11,706,707],{},[23,708],{"alt":709,"src":710},"DepthOfFieldFunction_Texture.png","http:\u002F\u002Fdocs.unrealengine.com\u002Flatest\u002Fimages\u002FEngine\u002FRendering\u002FMaterials\u002FExpressionReference\u002FUtility\u002FDepthOfFieldFunction_Texture.jpg",[11,712,713],{},[69,714,715],{},"Desaturation",[11,717,718],{},"这个节点的作用是去色，会生成一个单调柔和的灰度图。",[11,720,721],{},[69,722,723],{},"Distance",[11,725,726],{},"这个节点的作用是计算两个输入值的距离。输入值可以是两个点、颜色、位置或者向量。",[11,728,729],{},[69,730,731],{},"FeatureLevelSwitch",[11,733,734],{},"这个节点允许对不同的设备使用不同的材质以保证材质在低运算率的设备上能够有平滑的切换。",[11,736,737],{},[69,738,739],{},"QualitySwitch",[11,741,742],{},"这个节点可以让材质在不同的视频设置下使用不同的数值。",[11,744,745],{},[69,746,747],{},"GIReplace",[11,749,750],{},"这个节点为材质提供在全域照明下产生不同间接光效果的方法。",[11,752,753,757],{},[23,754],{"alt":755,"src":756},"LPV_gi_replace.png","http:\u002F\u002Fdocs.unrealengine.com\u002Flatest\u002Fimages\u002FEngine\u002FRendering\u002FLightingAndShadows\u002FLightPropagationVolumes\u002FLPV_gi_replace.jpg",[23,758],{"alt":759,"src":760},"LPV_bounce_color_override.png","http:\u002F\u002Fdocs.unrealengine.com\u002Flatest\u002Fimages\u002FEngine\u002FRendering\u002FLightingAndShadows\u002FLightPropagationVolumes\u002FLPV_bounce_color_override.png",[11,762,763],{},[69,764,765],{},"LightmassReplace",[11,767,768],{},"这个节点可以使得材质在被到处为光照用时使用一个不同的值。",[11,770,771],{},[69,772,773],{},"LinearInterpolate",[11,775,776],{},"就是Lerp，线性插值，基本上复杂的材质都会用到。",[11,778,779],{},[69,780,781],{},"Noise",[11,783,784],{},"这个节点的作用是生成噪波图。",[11,786,787],{},[69,788,789],{},"RotateAboutAxis",[11,791,792],{},"对给定的向量进行旋转，通常用于获得选择WorldPosition之后传递给WorldPositionOffset。",[11,794,795],{},[69,796,797],{},"SphereMask",[11,799,800],{},"这个节点在指定的位置生成一个球形并进行距离计算，圆心处为1，外围为0。",[11,802,803],{},[69,804,805],{},"AntialiasedTextureMask",[11,807,808],{},"对输入进行抗锯齿运算。",[11,810,811],{},[23,812],{"alt":813,"src":814},"AAMasked_Demo.png","http:\u002F\u002Fdocs.unrealengine.com\u002Flatest\u002Fimages\u002FEngine\u002FRendering\u002FMaterials\u002FExpressionReference\u002FUtility\u002FAAMasked_Demo.jpg",[356,816],{},[11,818,819],{},"到此初步探索就算是完成了，要一下子实现自己想到的材质效果还是有点难度的，不过至少不会茫然了。想要对材质更加的熟悉，需要的大概是更多的经验的积累。",{"title":362,"searchDepth":363,"depth":364,"links":821},[822,823],{"id":407,"depth":363,"text":407},{"id":575,"depth":363,"text":575},"2015-06-15",{"layout":369,"status":370,"published":371,"author":826,"author_login":373,"author_email":374,"author_url":375,"wordpress_id":827,"wordpress_url":828,"date_gmt":829,"excerpt":830},{"display_name":373,"login":373,"email":374,"url":375},1289,"\u002F\u002F?p=1289","2015-06-15 12:42:54 +0000",{"type":8,"value":831},[832],[11,833,398],{},"\u002F2015-06-15-ue4-materia-explore",{"title":393,"description":398},"_legacy\u002F2015\u002F2015-06-15-ue4-materia-explore",[387,838,839],"Materia","材质","tuwtGbBuuLWCBpfXxhazwtnNDMHV5QoRCkMhW4Ch2d8",{"id":842,"title":843,"body":844,"date":967,"description":848,"extension":367,"meta":968,"navigation":371,"path":977,"seo":978,"stem":979,"tags":980,"__hash__":982},"blogs\u002F_legacy\u002F2015\u002F2015-05-21-ue4-fmod-visulization.md","UE4与FMod音乐可视化验证",{"type":8,"value":845,"toc":965},[846,849,852,855,865,868,871,874,880,883,889,892,895,900,903,909,914,917,923,926,932,935,941,944,950,953,956,962],[11,847,848],{},"制作音游的一个重要步骤，就是验证引擎的相关技术特性，以此来决定是否更换引擎或者更改设计。",[11,850,851],{},"当前UE版本4.7.6；FMod版本1.06.02；",[11,853,854],{},"由于需要播放用户提供的音乐文件，所以需要读取用户设备上的文件。在翻阅文档之后，发现可以使用PlatformFileManager读取外部文件相关信息，同时也有获取目录信息的相关接口。",[856,857,862],"pre",{"className":858,"code":860,"language":861},[859],"language-text","FString CompleteFilePath = \"H:\u002Fmusic\u002Ftest.mp3\";\nif (!FPlatformFileManager::Get().GetPlatformFile().FileExists(*CompleteFilePath))\n{\nOutputDebugStringA(\"Error\");\nreturn 0;\n}\n\nconst int32 FileSize = FPlatformFileManager::Get().GetPlatformFile().FileSize(*CompleteFilePath);\n","text",[863,864,860],"code",{"__ignoreMap":362},[11,866,867],{},"通过上面的代码，成功获得文件大小。外部文件相关验证完成。",[11,869,870],{},"接下来就是音乐播放相关的实现了，FMod在UE4上有插件实现。基本可以满足使用需求。",[11,872,873],{},"下载并将FMod插件解压到UE4目录之后，首先在项目的*.Build.cs中添加下面的代码",[856,875,878],{"className":876,"code":877,"language":861},[859],"public class mpop : ModuleRules\n{\npublic mpop(TargetInfo Target)\n{\nPublicDependencyModuleNames.AddRange(new string[] { \"Core\", \"CoreUObject\", \"Engine\", \"InputCore\" });\n\nPrivateDependencyModuleNames.AddRange(new string[] { \"FMODStudio\" });\n}\n}\n",[863,879,877],{"__ignoreMap":362},[11,881,882],{},"这样一来在需要使用到FMod地方进行文件包含就不会遇到报错了",[856,884,887],{"className":885,"code":886,"language":861},[859],"#include \"fmod_studio.hpp\"\n",[863,888,886],{"__ignoreMap":362},[11,890,891],{},"如果在编译时遇到LNK1181之类的编译错误，建议按照提示查找FMod插件中是否提供了对应的Lib文件。如果没有的话可能需要重新编译插件或者使用更早期有提供的版本。",[11,893,894],{},"使用FMod底层API的第一步是得到一个底层的API System，根据使用方式的不同有两条路径。",[11,896,897],{},[69,898,899],{},"获取插件系统",[11,901,902],{},"适合与EndPlay和BeginPlay之类的事件挂钩进行使用。不需要自主使用update，插件内部已经有更新机制了。",[856,904,907],{"className":905,"code":906,"language":861},[859],"result = IFMODStudioModule::Get().GetStudioSystem(EFMODSystemContext::Runtime)->getLowLevelSystem(&system);\n\nif (result != FMOD_RESULT::FMOD_OK) break;\n\nresult = system->getVersion(&version);\n\nif (result != FMOD_RESULT::FMOD_OK) break;\n",[863,908,906],{"__ignoreMap":362},[11,910,911],{},[69,912,913],{},"自主创建系统",[11,915,916],{},"适合配合单例模式使用，和插件建立的系统相对独立。不过依然不需要自己进行update操作。与直接获取不同的是，需要自己进行初始化操作。",[856,918,921],{"className":919,"code":920,"language":861},[859],"result = FMOD::System_Create(&system);\n\nif (result != FMOD_RESULT::FMOD_OK) break;\n\nresult = system->getVersion(&version);\n\nif (result != FMOD_RESULT::FMOD_OK) break;\n\nresult = system->init(32, FMOD_INIT_NORMAL, extradriverdata);    \u002F\u002F \u003C进行初始化\n\nif (result != FMOD_RESULT::FMOD_OK) break;\n",[863,922,920],{"__ignoreMap":362},[11,924,925],{},"系统创建之后，音乐播放使用createsound即可",[856,927,930],{"className":928,"code":929,"language":861},[859],"result = system->createSound(\"H:\u002Fmusic\u002Ftest.mp3\", FMOD_LOOP_NORMAL | FMOD_2D, 0, &sound);\nif (result != FMOD_RESULT::FMOD_OK) break;\n\nresult = sound->getNumSubSounds(&numsubsounds);\nif (result != FMOD_RESULT::FMOD_OK) break;\n\nif (numsubsounds)\n{\nsound->getSubSound(0, &sound_to_play);\nif (result != FMOD_RESULT::FMOD_OK) break;\n}\nelse\n{\nsound_to_play = sound;\n}\n\nresult = system->playSound(sound_to_play, 0, false, &channel);\nif (result != FMOD_RESULT::FMOD_OK) break;\n",[863,931,929],{"__ignoreMap":362},[11,933,934],{},"要对音乐进行可视化，最基础的数据获取方式是对音乐进行快速傅里叶变换（FFT）。FMod本身有提供FFT的功能，因此直接使用即可，无需再造车轮。FMod提供的FFT是DSP的一种，可以加载在Channel、ChannelGroup、ChannelControl上。这里，我们选择在系统创建并初始化之后直接加载到ChannelGroup上。",[856,936,939],{"className":937,"code":938,"language":861},[859],"FMOD::ChannelGroup *mastergroup;\n\nresult = system->createDSPByType(FMOD_DSP_TYPE_FFT, &fftdsp);\nif (result != FMOD_RESULT::FMOD_OK) break;\n\nresult = system->getMasterChannelGroup(&mastergroup);\nif (result != FMOD_RESULT::FMOD_OK) break;\n\nresult = mastergroup->addDSP(0, fftdsp);\nif (result != FMOD_RESULT::FMOD_OK) break;\n",[863,940,938],{"__ignoreMap":362},[11,942,943],{},"在每一次Ontick时进行FFT数据的获取：",[856,945,948],{"className":946,"code":947,"language":861},[859],"FMOD_DSP_PARAMETER_FFT *fft;\n\nchar* ts = new char[40];\nfftdsp->getParameterData(FMOD_DSP_FFT_SPECTRUMDATA, (void **)&fft, 0, 0, 0);\nOutputDebugStringA(\"\u003CFMODHolders> - Update Begin -\\n\");\nfor (int channel = 0; channel \u003C fft->numchannels; channel++){\nOutputDebugStringA(\"> -c-\");\nfor (int bin = 0; bin \u003C fft->length; bin++)\n{\nfloat val = fft->spectrum[channel][bin];\nsprintf(ts, \"> spec: %f \\n\", val);\nOutputDebugStringA(ts);\n}\n}\nOutputDebugStringA(\"\u003CFMODHolders> - Update End -\\n\");\ndelete ts;\n",[863,949,947],{"__ignoreMap":362},[11,951,952],{},"开始播放之后就可以看到fft数据已经正常输出了。",[11,954,955],{},"为了方便对fft的数据进行解析，需要获得采样率。",[856,957,960],{"className":958,"code":959,"language":861},[859],"system->getSoftwareFormat(&tnp, NULL, NULL);\n",[863,961,959],{"__ignoreMap":362},[11,963,964],{},"这样基本上音乐数据一块的验证就完成了。",{"title":362,"searchDepth":363,"depth":364,"links":966},[],"2015-05-21",{"layout":369,"status":370,"published":371,"author":969,"author_login":373,"author_email":374,"author_url":375,"wordpress_id":970,"wordpress_url":971,"date_gmt":972,"excerpt":973},{"display_name":373,"login":373,"email":374,"url":375},1272,"\u002F\u002F?p=1272","2015-05-21 04:09:36 +0000",{"type":8,"value":974},[975],[11,976,848],{},"\u002F2015-05-21-ue4-fmod-visulization",{"title":843,"description":848},"_legacy\u002F2015\u002F2015-05-21-ue4-fmod-visulization",[387,981],"FMod","53jn81bS0zOR_BQlQpG7tZSyEzEGNvhY4okZF-i8EkU",{"id":984,"title":985,"body":986,"date":1197,"description":990,"extension":367,"meta":1198,"navigation":371,"path":1207,"seo":1208,"stem":1209,"tags":1210,"__hash__":1212},"blogs\u002F_legacy\u002F2015\u002F2015-05-02-ue4-and-mmd.md","UE4与MMD",{"type":8,"value":987,"toc":1192},[988,991,1017,1020,1024,1027,1032,1040,1045,1048,1051,1057,1060,1064,1067,1070,1073,1078,1081,1087,1090,1095,1098,1101,1107,1112,1115,1120,1123,1127,1130,1139,1142,1148,1151,1157,1160,1163,1166,1171,1174,1179,1182,1187,1189],[11,989,990],{},"上次对MMD的导入进行探索之后已经有大半年过去了，各个工具的版本都更新了不少。导入的方式也发生了很多改变，经过了这些时间的研究和学习，对UE4本身的了解也变深了。因此对mmd的导入进行重新的整理。",[11,992,993,994,998,999,1004,1005,1010,1011,1016],{},"当前",[36,995,387],{"href":996,"rel":997},"https:\u002F\u002Fwww.unrealengine.com\u002Fzh-CN\u002F",[633],"版本4.7.6，",[36,1000,1003],{"href":1001,"rel":1002},"https:\u002F\u002Fwww.blender.org\u002F",[633],"blender","版本2.7.4，",[36,1006,1009],{"href":1007,"rel":1008},"http:\u002F\u002Fstereoarts.jp\u002F",[633],"pmx2fbx","版本Beta_20150428_2，",[36,1012,1015],{"href":1013,"rel":1014},"https:\u002F\u002Fgithub.com\u002Fsugiany\u002Fblender_mmd_tools",[633],"blender_mmd_tools","版本0.5。",[11,1018,1019],{},"导入路径方面，还是采用原先得出的两种方式。事实是，mmd几乎在所有的主流3d建模软件上都有相关的读取工具被制作出来，但是要同时兼顾对pmx格式的兼容以及保留流畅的ue4导入的话，还是这两种导入路径比较方便一些。随着时间不断的前进，各个社区说不定也会对相关工具进行改进。目前而言，blender_mmd_tools算得上是非常好的选择了。",[405,1021,1023],{"id":1022},"路径一pmx2fbx","路径一：PMX2FBX",[11,1025,1026],{},"使用pmx2fbx会生成如下这些文件",[11,1028,1029],{},[23,1030],{"alt":25,"src":1031},"\u002Fwp-content\u002Fuploads\u002F2015\u002F05\u002Fimage_thumb.png",[11,1033,1034,1035,1039],{},"我们需要的只有shana.fbx文件，使用",[36,1036,1038],{"href":1037},"\u002F?p=964","转义工具","转换编码之后，在UE4中导入",[11,1041,1042],{},[23,1043],{"alt":25,"src":1044},"\u002Fwp-content\u002Fuploads\u002F2015\u002F05\u002Fimage_thumb1.png",[11,1046,1047],{},"注意去掉Use T0As Ref Pos这个选项，否则导入的模型就有可能使用错误的基础姿势，导致形变动画出错。",[11,1049,1050],{},"由于这个工具本身是为了Unity而设计的，所以贴图信息被另外的保存了，导入到UE4时就需要对贴图进行重新调整。使用这个方式导入的主要优点是，可以同时进行多个vmd动作的导入。缺陷是，vmd动作的形变动画无法正确载入，以及需要对材质进行大量的修改。如果使用的模型非常复杂的话，工作量将会变得很大。而在骨骼相同的情况下，动画动作是可以共用的。",[11,1052,1053,1054],{},"[更新]",[334,1055,1056],{},"2015-8-15",[11,1058,1059],{},"经过测试发现，当前最新版本下，VMD中的形变动画是可以手动通过曲线添加到动画中去的。因此，在动画动作比较多的情况下，推荐使用这条路径进行导入。如果材质较为复杂，可以采用路径二中的blender导入方式，但只是单独的导出Mesh，这样就可以利用其中生成的材质了。",[405,1061,1063],{"id":1062},"路径二blender","路径二：Blender",[11,1065,1066],{},"收益于Blender社区的配合和UE的不断改进，目前通过blender进行mmd导入的操作已经非常的方便。",[11,1068,1069],{},"在blender方面，已经不需要对fbx的导出插件进行修改就可以直接使用了。blender_mmd_tools的版本也已经进行了更新，当前版本已经可以通过blender进行MMD模型的导入然后重新导出为pmd格式而不出错了。",[11,1071,1072],{},"导入路径上，首先的操作依然是对模型进行导入。比例和原先一样，依然是8。",[11,1074,1075],{},[23,1076],{"alt":25,"src":1077},"\u002Fwp-content\u002Fuploads\u002F2014\u002F08\u002Fimage_thumb3.png",[11,1079,1080],{},"导入成功后，选中整个模型，点击RigidBody下的build",[11,1082,1083],{},[23,1084],{"alt":1085,"src":1086},"SNAGHTML647002","\u002Fwp-content\u002Fuploads\u002F2015\u002F05\u002FSNAGHTML647002_thumb.png",[11,1088,1089],{},"这个版本的mmd_tools会自动添加一个名为“両目.shadow”的骨骼。为了防止多根骨错误，需要对骨骼的顺序进行调整。进入编辑模式，选中“両目.shadow”，将其父级指定为“全ての親”。",[11,1091,1092],{},[23,1093],{"alt":25,"src":1094},"\u002Fwp-content\u002Fuploads\u002F2015\u002F05\u002Fimage_thumb2.png",[11,1096,1097],{},"然后选中模型，点击mmd_tools工具面板里的Import Motion导入vmd动作。",[11,1099,1100],{},"动作导入完成之后，可以添加灯光进行渲染测试。也可以直接进行导出。目前的版本下已经不需要对世界的单位进行修改了，直接进行导出即可。",[11,1102,1103,1104,1106],{},"通过",[36,1105,1038],{"href":1037},"进行转换之后，接下来就是在UE4中导入了，导入选项如下。",[11,1108,1109],{},[23,1110],{"alt":25,"src":1111},"\u002Fwp-content\u002Fuploads\u002F2015\u002F05\u002Fimage_thumb3.png",[11,1113,1114],{},"导入之后除了可能的少许材质修正之外，基本可以直接使用了。",[11,1116,1117],{},[23,1118],{"alt":25,"src":1119},"\u002Fwp-content\u002Fuploads\u002F2015\u002F05\u002Fimage_thumb4.png",[11,1121,1122],{},"这种导入方式最大的好处是，vmd动作中的形变动画也会被保留。同时材质上大体都是正常的，需要进行修改的部分比较少。",[11,1124,1053,1125],{},[334,1126,1056],{},[11,1128,1129],{},"本路径受到blender_mmd_tools的版本更新的影响较大。当前版本下，有如下变动：",[1131,1132,1133,1136],"ol",{},[45,1134,1135],{},"导出之前需要像以前一样，将世界单位改为“公制”-“0.01”",[45,1137,1138],{},"需要将rigidbodies一列节点从模型的树结构中移出，否则会报多重骨骼以及骨骼重名错误",[11,1140,1141],{},"rigidbodies的移出结果大致如下图：",[11,1143,1144],{},[23,1145],{"alt":1146,"src":1147},"tq","\u002Fwp-content\u002Fuploads\u002F2015\u002F05\u002Ftq.jpg",[11,1149,1150],{},"同时，对于复杂的模型依然会有材质出错的情况。一般情况下出错的修复方式如下，具体情况会有所不同，这种做法权做快速修复：",[11,1152,1153],{},[23,1154],{"alt":1155,"src":1156},"2015-08-15_21-27-08","\u002Fwp-content\u002Fuploads\u002F2015\u002F05\u002F2015-08-15_21-27-08.jpg",[11,1158,1159],{},"参照原始模型进行快速修改即可，之后在游戏制作过程中根据设计的不同再进行材质的进一步加工。",[405,1161,1162],{"id":1162},"形变动画报错",[11,1164,1165],{},"以上两种路径中，在导入过程中，会出现如下错误提示",[11,1167,1168],{},[23,1169],{"alt":25,"src":1170},"\u002Fwp-content\u002Fuploads\u002F2015\u002F05\u002Fimage_thumb5.png",[11,1172,1173],{},"主要原因是材质没有启用形变，虽然可以通过手动对提示的材质进行修改。但更加快速的方法是直接拖动右侧的形变动画进行预览，那么相应的材质就会自动的被启用形变了。",[11,1175,1176],{},[23,1177],{"alt":25,"src":1178},"\u002Fwp-content\u002Fuploads\u002F2015\u002F05\u002Fimage_thumb6.png",[11,1180,1181],{},"等待编译完成并保存之后，错误提示就会消失。形变动画也可以正常使用了。",[11,1183,1184],{},[23,1185],{"alt":25,"src":1186},"\u002Fwp-content\u002Fuploads\u002F2015\u002F05\u002Fimage_thumb7.png",[356,1188],{},[11,1190,1191],{},"到目前为止，将MMD作为人物模型导入使用已经基本上可以正常的使用了。对于建模比较苦手的话，直接采用别人建设好的模型和动作数据比较快捷一些。",{"title":362,"searchDepth":363,"depth":364,"links":1193},[1194,1195,1196],{"id":1022,"depth":363,"text":1023},{"id":1062,"depth":363,"text":1063},{"id":1162,"depth":363,"text":1162},"2015-05-02",{"layout":369,"status":370,"published":371,"author":1199,"author_login":373,"author_email":374,"author_url":375,"wordpress_id":1200,"wordpress_url":1201,"date_gmt":1202,"excerpt":1203},{"display_name":373,"login":373,"email":374,"url":375},1250,"\u002F\u002F?p=1250","2015-05-02 10:10:17 +0000",{"type":8,"value":1204},[1205],[11,1206,990],{},"\u002F2015-05-02-ue4-and-mmd",{"title":985,"description":990},"_legacy\u002F2015\u002F2015-05-02-ue4-and-mmd",[387,1211],"MMD","j4XgdJDtCdrZptWG5tu886-lK2BLq4nU8AwzmmjSdhY",{"id":1214,"title":1215,"body":1216,"date":1471,"description":1220,"extension":367,"meta":1472,"navigation":371,"path":1481,"seo":1482,"stem":1483,"tags":1484,"__hash__":1486},"blogs\u002F_legacy\u002F2015\u002F2015-02-11-apex%e7%9b%b8%e5%85%b3.md","APEX相关",{"type":8,"value":1217,"toc":1467},[1218,1221,1224,1228,1231,1236,1243,1246,1249,1252,1257,1260,1265,1268,1271,1276,1279,1284,1287,1292,1295,1298,1301,1304,1307,1312,1318,1321,1324,1329,1332,1337,1340,1343,1348,1351,1356,1359,1364,1367,1370,1373,1378,1381,1386,1389,1392,1397,1400,1404,1407,1410,1415,1418,1421,1426,1429,1432,1438,1441,1446,1449,1454,1457,1462,1464],[11,1219,1220],{},"由于UE4使用的是PhysX引擎，因此一些相关的特性需要使用其相关的工具才能实现。当前（4.6.1）版本UE4只支持两个Apex特性，分别是Destruct和Cloth。",[11,1222,1223],{},"对官方的讲解视频以及部分文档进行总结，方便以后使用到时可以进行快速的索引。",[1225,1226,1227],"h3",{"id":389},"① 破碎",[11,1229,1230],{},"破碎方面使用PhysX的工具可以获得额外的两种制作方式，同时可以得到当前引擎中没有的多级别破碎效果。",[11,1232,1233],{},[69,1234,1235],{},"Slice模式切割",[11,1237,1238,1239],{},"官方视频地址：",[36,1240,1241],{"href":1241,"rel":1242,"title":1241},"http:\u002F\u002Fv.youku.com\u002Fv_show\u002Fid_XNDEzMTM3Mzky.html",[633],[11,1244,1245],{},"示例文件目录为PhysXLab目录下的DestructionSamples\\Pillar。",[11,1247,1248],{},"在文件菜单中选择Import 3D Mesh导入BrickPillar.FBX（其实可以直接打开官方提供的project文件，这样就不用进行文件的导入了）。",[11,1250,1251],{},"在上面的工具栏中选择刀形状的切割工具，在右边的工具栏就会出现相应的属性。",[11,1253,1254],{},[23,1255],{"alt":25,"src":1256},"\u002Fwp-content\u002Fuploads\u002F2015\u002F02\u002Fimage_thumb.png",[11,1258,1259],{},"直接点击Fracture按钮或者右上角跳动的F图标，就会生成Slice的破碎",[11,1261,1262],{},[23,1263],{"alt":25,"src":1264},"\u002Fwp-content\u002Fuploads\u002F2015\u002F02\u002Fimage_thumb1.png",[11,1266,1267],{},"由于没有切面贴图，切面的效果很不理想。因此先在文件菜单中点击Load Texture as Materia来导入材质BrickPillarInt_d.tga。",[11,1269,1270],{},"导入之后到Graphic工具中应用切面贴图即可。需要注意的是示例提供的贴图应用时和默认的UV Scale有所不同。",[11,1272,1273],{},[23,1274],{"alt":25,"src":1275},"\u002Fwp-content\u002Fuploads\u002F2015\u002F02\u002Fimage_thumb2.png",[11,1277,1278],{},"在Slice属性中，展开高级模式，可以手动的设置各个坐标上的切割数",[11,1280,1281],{},[23,1282],{"alt":25,"src":1283},"\u002Fwp-content\u002Fuploads\u002F2015\u002F02\u002Fimage_thumb3.png",[11,1285,1286],{},"通过设置切割深度，可以做出层次更多的切割结果。在工具栏中的预览深度可以调节当前预览的切割效果层次。",[11,1288,1289],{},[23,1290],{"alt":25,"src":1291},"\u002Fwp-content\u002Fuploads\u002F2015\u002F02\u002Fimage_thumb4.png",[11,1293,1294],{},"其他的一些属性：",[11,1296,1297],{},"Use Target Proportions - 使得碎片尽量的保持给定的长宽高比例，这个设置会优先于切割线设置来保持比例。",[11,1299,1300],{},"Seams Variation - 使得切割线的分布变得更加的不均匀，有平移和角度两个选项",[11,1302,1303],{},"Noise - 有幅度、频率和网格尺寸3个选项，可以使切面表面出现凹凸效果。",[11,1305,1306],{},"属性之间的组合能够实现不同的材质破碎效果，在编辑器中进行尝试即可。按F12可以进入预览模式，用锤子进行破坏来模拟实际的效果。",[11,1308,1309],{},[69,1310,1311],{},"Cut-Out模式切割",[11,1313,1238,1314],{},[36,1315,1316],{"href":1316,"rel":1317,"title":1316},"http:\u002F\u002Fv.youku.com\u002Fv_show\u002Fid_XMzU1NDY0NTMy.html",[633],[11,1319,1320],{},"示例文件目录为PhysXLab目录下的DestructionSamples\\Wall。",[11,1322,1323],{},"这个模式有两个设置的地方，一个是要调整切割的挡板的位置，另外一个是要选择切割图。全部设置过之后会自动生成两个层次的分割效果。第一层是设置好的挡板的分离，第二层是对分离出来的表面应用切割图进一步分割。",[11,1325,1326],{},[23,1327],{"alt":25,"src":1328},"\u002Fwp-content\u002Fuploads\u002F2015\u002F02\u002Fimage_thumb5.png",[11,1330,1331],{},"生成之后的效果就是完全按照墙面的砖块进行分割破碎。",[11,1333,1334],{},[23,1335],{"alt":25,"src":1336},"\u002Fwp-content\u002Fuploads\u002F2015\u002F02\u002Fimage_thumb6.png",[11,1338,1339],{},"切面贴图和Noise的设置基本和Slice模式的相同。",[11,1341,1342],{},"切换到Assets工具栏，在第一层级为后面的墙面设置Dont Frature属性，保证其静态。为前面的墙面设置Dont Damage属性，使得所有的伤害被传递到下一个层级，而不是整个墙面对伤害有响应。在第二层级，设置Support Depth为2，同时打开World Overlap，这样一来砖块就会受到世界的支撑。不会出现不自然的瓦解的情况。",[11,1344,1345],{},[23,1346],{"alt":25,"src":1347},"\u002Fwp-content\u002Fuploads\u002F2015\u002F02\u002Fimage_thumb7.png",[11,1349,1350],{},"可以对这个分割进行进一步的Slice来达到更好的效果",[11,1352,1353],{},[23,1354],{"alt":25,"src":1355},"\u002Fwp-content\u002Fuploads\u002F2015\u002F02\u002Fimage_thumb8.png",[11,1357,1358],{},"加上一定的随机之后，砖块就变得可以敲碎了。",[11,1360,1361],{},[23,1362],{"alt":25,"src":1363},"\u002Fwp-content\u002Fuploads\u002F2015\u002F02\u002Fimage_thumb9.png",[11,1365,1366],{},"可以通过Export Assets导出apb格式的破碎设置供UE4导入。",[11,1368,1369],{},"导入时先导入网格文件，然后点击生成可破坏网格之后在其中导入apb文件。在UE4中进行快捷测试的步骤：",[11,1371,1372],{},"首先在可破坏物体中",[11,1374,1375],{},[23,1376],{"alt":25,"src":1377},"\u002Fwp-content\u002Fuploads\u002F2015\u002F02\u002Fimage_thumb10.png",[11,1379,1380],{},"打开并修改Impact Damage，然后将这个物体拖到地图中。",[11,1382,1383],{},[23,1384],{"alt":25,"src":1385},"\u002Fwp-content\u002Fuploads\u002F2015\u002F02\u002Fimage_thumb11.png",[11,1387,1388],{},"打开物理模拟和碰撞事件。将物体拖到一定的高度。然后开始模拟，坠落的冲击产生的伤害会使得物体破碎。如果使用的是上面生成的破碎，由于一瞬间产生了很多碎片，并且都在进行物理模拟。很可能会引起卡顿。其实对于小碎片，最好使用粒子效果来替换掉。系统的开销就会大幅度下降了。",[11,1390,1391],{},"同时，导入apb时切面材质如果没有的话需要手动导入。也可以直接指定成其他的材质。",[11,1393,1394],{},[23,1395],{"alt":25,"src":1396},"\u002Fwp-content\u002Fuploads\u002F2015\u002F02\u002Fimage_thumb12.png",[11,1398,1399],{},"上面的导入中，第二个材质就是切面材质了。",[1225,1401,1403],{"id":1402},"衣料","② 衣料",[11,1405,1406],{},"衣料的材质制作NVIDIA官方提供了针对3ds max和maya的插件，虽然官方社区有直接使用Physx自带的制作程序的相关说法。但是还是存在不少问题，这里还是直接使用官方提供的流程进行操作比较好。在NVIDIA官方下载好插件并安装后，可以在目录中看到官方提供的文档。详细的参数及其作用可以到其中去参考。",[11,1408,1409],{},"制作Cloth材质可以在toolbar上点击这个按钮：",[11,1411,1412],{},[23,1413],{"alt":25,"src":1414},"\u002Fwp-content\u002Fuploads\u002F2015\u002F02\u002Fimage_thumb13.png",[11,1416,1417],{},"这样的话就会在当前修改器栈中添加一个新的衣料材质修改器，可以在其中进行属性的设置等操作。",[11,1419,1420],{},"最主要的属性操作是max distance的喷涂，设定好值之后直接点击按钮即可在材质上喷涂上设定的值。",[11,1422,1423],{},[23,1424],{"alt":25,"src":1425},"\u002Fwp-content\u002Fuploads\u002F2015\u002F02\u002Fimage_thumb14.png",[11,1427,1428],{},"如果要看模拟的效果，可以直接点击插件提供的模拟按钮。",[11,1430,1431],{},"操作完毕之后可以对衣料材质进行导出。当前版本使用下面的配置可以正常的工作：",[11,1433,1434],{},[23,1435],{"alt":1436,"src":1437},"SNAGHTML8aa3b0","\u002Fwp-content\u002Fuploads\u002F2015\u002F02\u002FSNAGHTML8aa3b0_thumb.png",[11,1439,1440],{},"然后就是在UE4中进行导入了，衣料材质不需要导入到内容管理器中。直接在需要使用到的模型中点击下面的添加材质按钮即可。",[11,1442,1443],{},[23,1444],{"alt":25,"src":1445},"\u002Fwp-content\u002Fuploads\u002F2015\u002F02\u002Fimage_thumb15.png",[11,1447,1448],{},"添加完毕之后就可以在材质的下方看到Cloth的选框，在其中选择对应的即可。",[11,1450,1451],{},[23,1452],{"alt":25,"src":1453},"\u002Fwp-content\u002Fuploads\u002F2015\u002F02\u002Fimage_thumb16.png",[11,1455,1456],{},"最终的结果如下，由于是静态图片不怎么能看出效果。",[11,1458,1459],{},[23,1460],{"alt":25,"src":1461},"\u002Fwp-content\u002Fuploads\u002F2015\u002F02\u002Fimage_thumb17.png",[356,1463],{},[11,1465,1466],{},"总体而言，作为UE4外部的制作流程，APEX的操作还是相对简单的。",{"title":362,"searchDepth":363,"depth":364,"links":1468},[1469,1470],{"id":389,"depth":364,"text":1227},{"id":1402,"depth":364,"text":1403},"2015-02-11",{"layout":369,"status":370,"published":371,"author":1473,"author_login":373,"author_email":374,"author_url":375,"wordpress_id":1474,"wordpress_url":1475,"date_gmt":1476,"excerpt":1477},{"display_name":373,"login":373,"email":374,"url":375},1168,"\u002F\u002F?p=1168","2015-02-11 13:46:43 +0000",{"type":8,"value":1478},[1479],[11,1480,1220],{},"\u002F2015-02-11-apex相关",{"title":1215,"description":1220},"_legacy\u002F2015\u002F2015-02-11-apex%e7%9b%b8%e5%85%b3",[387,388,1485],"APEX","4kaRlxLuoGhZbAs6po6nUVnEZ4T0qvvXWw-Tu2sFeec",85,1788763178432]