比如,树木的面数应控制在一万面以内,以六七千面为宜。
我们做的一个场景,之前使用了两万、甚至二十万个面的树,导致即便使用i7+GTX1080,帧率仍然在30帧与45帧之间徘徊。并且树枝因为细小的面数太多,贴在上面的材质会出现模糊闪烁的情况。
这是在UE4编辑器中的情况:
i7+ 1060显卡,PC端运行可以勉强达到60帧。
在VR模式中,(即便使用TXAA)存在强烈的闪烁现象,将ScreenPercentage设置到200,仍然存在强烈闪烁,并且帧率下降到38帧。若将ScreenPercentage设置到300,闪烁消失,但帧率降到了20帧,滞后感明显。
使用Speedtree重新建模了树木,放入场景中:
PC(i7+ 1060显卡)运行可以达到110帧以上,VR模式中的闪烁情况也消失了。
在VR模式下,仍然存在闪烁现象。通过将ScreenPercentage设置为200可以大幅减小闪烁,帧率能达到45帧。若将ScreenPercentage设置为300,闪烁完全消失,帧率37帧。
]]>方式:通过https://www.speedtree.com/ue4/ 下载,费用为19美元/月
优点:自由创建树的形状、材质、动态效果、LOD。无缝引入UE4。
缺点:有少许学习成本。
方式:通过http://www.hptware.co.uk/forester_downloads.php 下载Forester Pro,费用为30美元。
优点:可以自由建立树的枝条、叶片、LOD。不做特殊处理的话,模型面数一般在数千面。
缺点:没有SpeedTree那样针对UE4提供附带动态效果的材质。
方式:人人素材、3D模型网等
优点:费用低廉
缺点:往往找到合适的都是面数较高的模型;过于粗糙的模型有很多,但都不是需要的
方式:https://www.assetstore.unity3d.com/
优点:种类繁多,直接查找,模型普遍费用便宜。
缺点:无法将unity的Prefab导出为FBX用于UE4,只能导出本身为FBX格式的模型。
]]>第二,在Viewport中,选中所有你想要改变材质的物体,然后打开Level Blueprint,右键菜单中点击 Create References to X Selected Objects. 这样也可以得到这些StaticMesh的对象,虽然没有将他们转化成蓝图。
注:
在使用 Create Dynamic Material Instance 节点时,需要注意:
我的报错全文是:
Can’t save D:/Users/z/Documents/Unreal Projects/xxxxDemo/Content/speedtree/broadleaf/Broadleaf_Desktop_Branches_Mat19.uasset: Graph is linked to private object(s) in an external package.
External Object(s):
/Engine/Transient
Try to find the chain of references to that object (may take some time)?
解决方案:
在项目中找到那个Texture,从Content中添加那个Texture到材质中,再保存即发现此报错消失。
]]>
具体实现:(参考了Youtube上的一个实现方案)
做了一个材质函数,该材质函数借助time、LocalPosition等节点实现渐变。
总体:
各部分:
]]>(上图中渐变效果请参见此文)
实现方式:
(首先求出到摄像机与物体之间的相对位置向量,并获取顶点处的法线向量,根据他们的夹角来判断该处是否朝向摄像机)
]]>并导出FBX文件,角色模型可以专门使用一个FBX导出,这样动画文件可以不带蒙皮直接导入UE4使用;如果不专门为角色模型导出一个FBX,直接使用动画FBX导入到UE4,在UE4中也会为之生成骨骼文件。
将角色模型FBX(可选)和动画FBX导入到UE4项目中。(关于导入角色动画的注意事项在前面的这篇博客里有提到)
为角色建立蓝图,新建SkeletalMesh,并将之前导入FBX生成的SkeletalMesh设置给它。(使用C++也行,这里以蓝图方式来举例)
在角色蓝图的Graph(图表)中,创建用于触发动画的布尔或者浮点变量,并根据需要的逻辑来设置它们的真假或数值变化。
新建Animation Blueprint(动画蓝图),新建时将SkeletalMesh设置为我们需要使用的那个。
针对动画蓝图我们需要做两件事:
第一,在Event Graph(事件图表)中为触发动画的切换、混合等创造一些布尔或者浮点变量。并每帧通过读取角色蓝图中之前创建用来触发动画的变量来更新这些变量。
第二,在Anim Graph(动画图表)中添加所有用到的动画序列(Animation Sequence)。并借助在事件图表中创建的变量来完成不同动画序列之间转换的逻辑。
最后,回到角色蓝图中,将刚刚创建的动画蓝图(Animation Blueprint)设置给角色蓝图中SkeletalMesh中的Animation Class。
大功告成!将角色拖入场景。试试看!
补充:
有时角色需要根据移动的速度这种连续的数值变化来调整动画,这就需要使用到混合空间(Blend Space和Blend Space 1D)。
借助混合空间,可以使用浮点型变量或者多维的浮点变量来混合两个或者多个动画。这个方式比transition的动画转换更加平滑,也让动画整体逻辑更加简洁。
]]>
这时需要用到 attach to 函数(或者节点)。
蓝图中:
C++中:
AttachToComponent(ArmMesh, FAttachmentTransformRules::SnapToTargetIncludingScale, MeshSocketName);
这里都是使用AttachToComponent函数,因为以上提到的几种应用场景都是将物体attach到人物角色上,那即是将actor附着到人物蓝图的SkeletalMesh中的Socket上(借助Socket我们还可以设置物体附上之后的transform,通过添加预览物可以看到attach的效果)。
这里要注意Loaction Rule有三种:Keep Relative , Keep World,Snap to Target。
Keep Relative:
将actor在当前场景中的transform移到parent(Socket)中。(当actor在world中处于原始transform时,它最终效果就是在Socket的预览中的效果。
Keep World:
保持actor在当前场景中的transform,对socket设置transform没有意义。但如果socket移动旋转缩放,会跟随相应移动旋转缩放。
Snap to Target:(最常使用)
使用Socket设置的transform,最终效果与actor在当前场景中的transform无关,最终效果等于socket中预览看到的效果。
DetachFromActor要注意,只有Keep Relative和Keep World选项。
如果使用 Snap to Target 进行attach,那么Keep World让Detach之后对保持之前在Socket调整后的最终尺寸到新的场景中(建议使用该方法);如果使用Keep Relative,则会让尺寸使用物体原始尺寸。
]]>
对于制作用于UE4的角色动画有哪些要求:
参考此页
使用3dsMax等工具中的变形动画(Morph Animation),来录制变形动画的FBX文件。
在导出时(以3dsMax为例),注意勾选“变形”的复选框:
将该FBX文件导入到UE4,在导入时,注意勾选 Import Morph Targets:
上述面板中,Mesh目录中的Skeletal Mesh必须勾选,如果之前没有导入过该模型的骨骼,则Skeleton使用None,这时UE4会为该FBX生成骨骼。
表情动画的使用类似普通骨骼动作动画,可以通过transition等方式进行动画的转换。如下图:
在3dsMax中,使用“变形器”修改器来引入不同的变形状态,并在各变形通道中使用通道值参数来设置变形的程度。如下图:
这些通道在UE4中的动画序列文件中可以直接进行编辑。对Curves进行修改可以改变动画。如下图:
]]>
官方解释是:
渲染时,使用比屏幕分辨率更高或者更低的分辨率来渲染。当等于100时(100%),该功能关闭;当<99时,进行升采样(upsampling,对原信号进行插值来生成频率更高的信号)来提升性能(即帧率);当>100时,进行超级采样(这个用来使图像清晰并且提升抗锯齿效果)。
]]>