UE4 – 秦威的学习与分享 http://www.devqinwei.com 作美的制造者 Thu, 28 Feb 2019 00:06:33 +0000 zh-CN hourly 1 https://wordpress.org/?v=4.5.16 UE4 VR最佳实践之场景模型 http://www.devqinwei.com/2016/12/24/ue4-vr%e6%9c%80%e4%bd%b3%e5%ae%9e%e8%b7%b5%e4%b9%8b%e5%9c%ba%e6%99%af%e6%a8%a1%e5%9e%8b/ http://www.devqinwei.com/2016/12/24/ue4-vr%e6%9c%80%e4%bd%b3%e5%ae%9e%e8%b7%b5%e4%b9%8b%e5%9c%ba%e6%99%af%e6%a8%a1%e5%9e%8b/#respond Sat, 24 Dec 2016 01:03:53 +0000 http://www.devqinwei.com/?p=666 VR模式对性能要求较高,对于包含大量植物、建筑等模型的户外场景,不能使用面数过多的模型。

树木:

比如,树木的面数应控制在一万面以内,以六七千面为宜。

我们做的一个场景,之前使用了两万、甚至二十万个面的树,导致即便使用i7+GTX1080,帧率仍然在30帧与45帧之间徘徊。并且树枝因为细小的面数太多,贴在上面的材质会出现模糊闪烁的情况。

这是在UE4编辑器中的情况:

i7+ 1060显卡,PC端运行可以勉强达到60帧。

在VR模式中,(即便使用TXAA)存在强烈的闪烁现象,将ScreenPercentage设置到200,仍然存在强烈闪烁,并且帧率下降到38帧。若将ScreenPercentage设置到300,闪烁消失,但帧率降到了20帧,滞后感明显。

%e5%9b%be%e7%89%871

使用Speedtree重新建模了树木,放入场景中:

PC(i7+ 1060显卡)运行可以达到110帧以上,VR模式中的闪烁情况也消失了。

在VR模式下,仍然存在闪烁现象。通过将ScreenPercentage设置为200可以大幅减小闪烁,帧率能达到45帧。若将ScreenPercentage设置为300,闪烁完全消失,帧率37帧。

%e5%9b%be%e7%89%872

]]>
http://www.devqinwei.com/2016/12/24/ue4-vr%e6%9c%80%e4%bd%b3%e5%ae%9e%e8%b7%b5%e4%b9%8b%e5%9c%ba%e6%99%af%e6%a8%a1%e5%9e%8b/feed/ 0
创建树的方式 http://www.devqinwei.com/2016/12/08/%e5%88%9b%e5%bb%ba%e6%a0%91%e7%9a%84%e6%96%b9%e5%bc%8f/ http://www.devqinwei.com/2016/12/08/%e5%88%9b%e5%bb%ba%e6%a0%91%e7%9a%84%e6%96%b9%e5%bc%8f/#respond Thu, 08 Dec 2016 15:32:27 +0000 http://www.devqinwei.com/?p=660 使用SpeedTreeUE4插件

方式:通过https://www.speedtree.com/ue4/ 下载,费用为19美元/

优点:自由创建树的形状、材质、动态效果、LOD。无缝引入UE4

缺点:有少许学习成本。

 

使用Forester Pro

方式:通过http://www.hptware.co.uk/forester_downloads.php 下载Forester Pro,费用为30美元。

优点:可以自由建立树的枝条、叶片、LOD。不做特殊处理的话,模型面数一般在数千面。

缺点:没有SpeedTree那样针对UE4提供附带动态效果的材质。

 

通过网络一些素材网站查找

方式:人人素材、3D模型网等

优点:费用低廉

缺点:往往找到合适的都是面数较高的模型;过于粗糙的模型有很多,但都不是需要的

 

通过UnityAssetsStore

方式:https://www.assetstore.unity3d.com/

优点:种类繁多,直接查找,模型普遍费用便宜。

缺点:无法将unityPrefab导出为FBX用于UE4,只能导出本身为FBX格式的模型。

]]>
http://www.devqinwei.com/2016/12/08/%e5%88%9b%e5%bb%ba%e6%a0%91%e7%9a%84%e6%96%b9%e5%bc%8f/feed/ 0
UE4 对于场景中物体材质进行动态修改的方式 http://www.devqinwei.com/2016/11/22/ue4-%e5%af%b9%e4%ba%8e%e5%9c%ba%e6%99%af%e4%b8%ad%e7%89%a9%e4%bd%93%e6%9d%90%e8%b4%a8%e8%bf%9b%e8%a1%8c%e5%8a%a8%e6%80%81%e4%bf%ae%e6%94%b9%e7%9a%84%e6%96%b9%e5%bc%8f/ http://www.devqinwei.com/2016/11/22/ue4-%e5%af%b9%e4%ba%8e%e5%9c%ba%e6%99%af%e4%b8%ad%e7%89%a9%e4%bd%93%e6%9d%90%e8%b4%a8%e8%bf%9b%e8%a1%8c%e5%8a%a8%e6%80%81%e4%bf%ae%e6%94%b9%e7%9a%84%e6%96%b9%e5%bc%8f/#respond Tue, 22 Nov 2016 04:00:32 +0000 http://www.devqinwei.com/?p=651 第一,可以将物体转化成Blueprint,这样可以获取其StaticMeshComponent,然后使用 Create Dynamic Material Instance,即可通过创建的这个材质实例来修改材质属性。

第二,在Viewport中,选中所有你想要改变材质的物体,然后打开Level Blueprint,右键菜单中点击 Create References to X Selected Objects. 这样也可以得到这些StaticMesh的对象,虽然没有将他们转化成蓝图。

 

注:

在使用 Create Dynamic Material Instance 节点时,需要注意:

  1. 如果节点中Source Material中设置了一个在Content中的材质,则将会在创建该材质实例的同时,将Source Material中刚刚生成的材质应用到物体中材质序号为Element Index的材质球。
  2. 如果节点中Source Material中没有指定材质,则会使用物体当前在Element Index位置上的那个材质创建一个材质实例。
]]>
http://www.devqinwei.com/2016/11/22/ue4-%e5%af%b9%e4%ba%8e%e5%9c%ba%e6%99%af%e4%b8%ad%e7%89%a9%e4%bd%93%e6%9d%90%e8%b4%a8%e8%bf%9b%e8%a1%8c%e5%8a%a8%e6%80%81%e4%bf%ae%e6%94%b9%e7%9a%84%e6%96%b9%e5%bc%8f/feed/ 0
UE4 Graph is linked to private object(s) in an external package. External Object(s) 问题 http://www.devqinwei.com/2016/11/17/ue4-graph-is-linked-to-private-objects-in-an-external-package-external-objects-%e9%97%ae%e9%a2%98/ http://www.devqinwei.com/2016/11/17/ue4-graph-is-linked-to-private-objects-in-an-external-package-external-objects-%e9%97%ae%e9%a2%98/#respond Thu, 17 Nov 2016 02:39:53 +0000 http://www.devqinwei.com/?p=649 这里碰到一个奇怪的问题,从项目中别的材质中复制一组简单的节点( 主要包含一个Texture,add之类)过来,结果在保存该材质的时候出现问题,网上查了下说是UE4的一个bug。

我的报错全文是:

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到材质中,再保存即发现此报错消失。

 

 

]]>
http://www.devqinwei.com/2016/11/17/ue4-graph-is-linked-to-private-objects-in-an-external-package-external-objects-%e9%97%ae%e9%a2%98/feed/ 0
UE4 创建从下往上变更材质的效果 http://www.devqinwei.com/2016/11/11/ue4-%e5%88%9b%e5%bb%ba%e4%bb%8e%e4%b8%8b%e5%be%80%e4%b8%8a%e5%8f%98%e6%9b%b4%e6%9d%90%e8%b4%a8%e7%9a%84%e6%95%88%e6%9e%9c/ http://www.devqinwei.com/2016/11/11/ue4-%e5%88%9b%e5%bb%ba%e4%bb%8e%e4%b8%8b%e5%be%80%e4%b8%8a%e5%8f%98%e6%9b%b4%e6%9d%90%e8%b4%a8%e7%9a%84%e6%95%88%e6%9e%9c/#respond Fri, 11 Nov 2016 05:35:45 +0000 http://www.devqinwei.com/?p=636 先看效果:

burnedup02

具体实现:(参考了Youtube上的一个实现方案

做了一个材质函数,该材质函数借助time、LocalPosition等节点实现渐变。

总体:

 

%e6%80%bb%e5%9b%be

各部分:

qq%e6%88%aa%e5%9b%be20161111110745

qq%e6%88%aa%e5%9b%be20161111110815

qq%e6%88%aa%e5%9b%be20161111110834

]]>
http://www.devqinwei.com/2016/11/11/ue4-%e5%88%9b%e5%bb%ba%e4%bb%8e%e4%b8%8b%e5%be%80%e4%b8%8a%e5%8f%98%e6%9b%b4%e6%9d%90%e8%b4%a8%e7%9a%84%e6%95%88%e6%9e%9c/feed/ 0
UE4 根据摄像机朝向显示不同颜色的材质 http://www.devqinwei.com/2016/11/11/ue4-%e6%a0%b9%e6%8d%ae%e6%91%84%e5%83%8f%e6%9c%ba%e6%9c%9d%e5%90%91%e6%98%be%e7%a4%ba%e4%b8%8d%e5%90%8c%e9%a2%9c%e8%89%b2%e7%9a%84%e6%9d%90%e8%b4%a8/ http://www.devqinwei.com/2016/11/11/ue4-%e6%a0%b9%e6%8d%ae%e6%91%84%e5%83%8f%e6%9c%ba%e6%9c%9d%e5%90%91%e6%98%be%e7%a4%ba%e4%b8%8d%e5%90%8c%e9%a2%9c%e8%89%b2%e7%9a%84%e6%9d%90%e8%b4%a8/#respond Fri, 11 Nov 2016 00:12:56 +0000 http://www.devqinwei.com/?p=630 先看效果:

qq%e6%88%aa%e5%9b%be20161111081200

WestLake_Ink1

(上图中渐变效果请参见此文

实现方式:

(首先求出到摄像机与物体之间的相对位置向量,并获取顶点处的法线向量,根据他们的夹角来判断该处是否朝向摄像机)

qq%e6%88%aa%e5%9b%be20161111081049

]]>
http://www.devqinwei.com/2016/11/11/ue4-%e6%a0%b9%e6%8d%ae%e6%91%84%e5%83%8f%e6%9c%ba%e6%9c%9d%e5%90%91%e6%98%be%e7%a4%ba%e4%b8%8d%e5%90%8c%e9%a2%9c%e8%89%b2%e7%9a%84%e6%9d%90%e8%b4%a8/feed/ 0
UE4 角色动画基础流程 http://www.devqinwei.com/2016/11/04/ue4-%e8%a7%92%e8%89%b2%e5%8a%a8%e7%94%bb%e5%9f%ba%e7%a1%80%e6%b5%81%e7%a8%8b/ http://www.devqinwei.com/2016/11/04/ue4-%e8%a7%92%e8%89%b2%e5%8a%a8%e7%94%bb%e5%9f%ba%e7%a1%80%e6%b5%81%e7%a8%8b/#respond Fri, 04 Nov 2016 02:05:14 +0000 http://www.devqinwei.com/?p=604 3dsMax或者Maya等建模工具进行角色建模、骨骼绑定、动画录制。

%e5%be%ae%e4%bf%a1%e6%88%aa%e5%9b%be_20161104093321

并导出FBX文件,角色模型可以专门使用一个FBX导出,这样动画文件可以不带蒙皮直接导入UE4使用;如果不专门为角色模型导出一个FBX,直接使用动画FBX导入到UE4,在UE4中也会为之生成骨骼文件。

将角色模型FBX(可选)和动画FBX导入到UE4项目中。(关于导入角色动画的注意事项在前面的这篇博客里有提到)

%e5%be%ae%e4%bf%a1%e6%88%aa%e5%9b%be_20161104093436

为角色建立蓝图,新建SkeletalMesh,并将之前导入FBX生成的SkeletalMesh设置给它。(使用C++也行,这里以蓝图方式来举例)

%e5%be%ae%e4%bf%a1%e6%88%aa%e5%9b%be_20161104093645

在角色蓝图的Graph(图表)中,创建用于触发动画的布尔或者浮点变量,并根据需要的逻辑来设置它们的真假或数值变化。

%e5%be%ae%e4%bf%a1%e6%88%aa%e5%9b%be_20161104093852

新建Animation Blueprint(动画蓝图),新建时将SkeletalMesh设置为我们需要使用的那个。

%e5%be%ae%e4%bf%a1%e6%88%aa%e5%9b%be_20161104094049

针对动画蓝图我们需要做两件事:

第一,在Event Graph(事件图表)中为触发动画的切换、混合等创造一些布尔或者浮点变量。并每帧通过读取角色蓝图中之前创建用来触发动画的变量来更新这些变量。

%e5%be%ae%e4%bf%a1%e6%88%aa%e5%9b%be_20161104094246

第二,在Anim Graph(动画图表)中添加所有用到的动画序列(Animation Sequence)。并借助在事件图表中创建的变量来完成不同动画序列之间转换的逻辑。

%e5%be%ae%e4%bf%a1%e6%88%aa%e5%9b%be_20161104094344

%e5%be%ae%e4%bf%a1%e6%88%aa%e5%9b%be_20161104094441

%e5%be%ae%e4%bf%a1%e6%88%aa%e5%9b%be_20161104094841

最后,回到角色蓝图中,将刚刚创建的动画蓝图(Animation Blueprint)设置给角色蓝图中SkeletalMesh中的Animation Class。

%e5%be%ae%e4%bf%a1%e6%88%aa%e5%9b%be_20161104095657

大功告成!将角色拖入场景。试试看!

%e5%be%ae%e4%bf%a1%e6%88%aa%e5%9b%be_20161104100047

 

补充:

有时角色需要根据移动的速度这种连续的数值变化来调整动画,这就需要使用到混合空间(Blend Space和Blend Space 1D)。

借助混合空间,可以使用浮点型变量或者多维的浮点变量来混合两个或者多个动画。这个方式比transition的动画转换更加平滑,也让动画整体逻辑更加简洁。

%e5%be%ae%e4%bf%a1%e6%88%aa%e5%9b%be_20161104100417

 

 

 

 

]]>
http://www.devqinwei.com/2016/11/04/ue4-%e8%a7%92%e8%89%b2%e5%8a%a8%e7%94%bb%e5%9f%ba%e7%a1%80%e6%b5%81%e7%a8%8b/feed/ 0
UE4 将actor acttach to 另一个actor需要注意的 http://www.devqinwei.com/2016/11/03/ue4-%e5%b0%86actor-acttach-to-%e5%8f%a6%e4%b8%80%e4%b8%aaactor%e9%9c%80%e8%a6%81%e6%b3%a8%e6%84%8f%e7%9a%84/ http://www.devqinwei.com/2016/11/03/ue4-%e5%b0%86actor-acttach-to-%e5%8f%a6%e4%b8%80%e4%b8%aaactor%e9%9c%80%e8%a6%81%e6%b3%a8%e6%84%8f%e7%9a%84/#respond Thu, 03 Nov 2016 12:42:25 +0000 http://www.devqinwei.com/?p=598 项目中,有时会出现人物提着箱子、拎着包、握着枪等情况。

这时需要用到 attach to 函数(或者节点)。

蓝图中:

%e5%be%ae%e4%bf%a1%e6%88%aa%e5%9b%be_20161103202746

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,则会让尺寸使用物体原始尺寸。

 

]]>
http://www.devqinwei.com/2016/11/03/ue4-%e5%b0%86actor-acttach-to-%e5%8f%a6%e4%b8%80%e4%b8%aaactor%e9%9c%80%e8%a6%81%e6%b3%a8%e6%84%8f%e7%9a%84/feed/ 0
UE4 角色动画注意事项 http://www.devqinwei.com/2016/10/31/ue4-%e8%a7%92%e8%89%b2%e5%8a%a8%e7%94%bb%e6%b5%81%e7%a8%8b/ http://www.devqinwei.com/2016/10/31/ue4-%e8%a7%92%e8%89%b2%e5%8a%a8%e7%94%bb%e6%b5%81%e7%a8%8b/#respond Mon, 31 Oct 2016 12:47:03 +0000 http://www.devqinwei.com/?p=585 FBX文件要求:

对于制作用于UE4的角色动画有哪些要求:

参考此页

 

制作表情动画:

使用3dsMax等工具中的变形动画(Morph Animation),来录制变形动画的FBX文件。

在导出时(以3dsMax为例),注意勾选“变形”的复选框:

%e5%be%ae%e4%bf%a1%e6%88%aa%e5%9b%be_20161103153141

将该FBX文件导入到UE4,在导入时,注意勾选 Import Morph Targets:

%e5%be%ae%e4%bf%a1%e6%88%aa%e5%9b%be_20161103153435

上述面板中,Mesh目录中的Skeletal Mesh必须勾选,如果之前没有导入过该模型的骨骼,则Skeleton使用None,这时UE4会为该FBX生成骨骼。

使用表情动画:

表情动画的使用类似普通骨骼动作动画,可以通过transition等方式进行动画的转换。如下图:

%e5%be%ae%e4%bf%a1%e6%88%aa%e5%9b%be_20161103165902

修改表情动画:

在3dsMax中,使用“变形器”修改器来引入不同的变形状态,并在各变形通道中使用通道值参数来设置变形的程度。如下图:

%e5%be%ae%e4%bf%a1%e6%88%aa%e5%9b%be_20161103165137

这些通道在UE4中的动画序列文件中可以直接进行编辑。对Curves进行修改可以改变动画。如下图:

%e5%be%ae%e4%bf%a1%e6%88%aa%e5%9b%be_20161103164921

 

]]>
http://www.devqinwei.com/2016/10/31/ue4-%e8%a7%92%e8%89%b2%e5%8a%a8%e7%94%bb%e6%b5%81%e7%a8%8b/feed/ 0
UE4 PostProcessVolume中的设置解释 http://www.devqinwei.com/2016/10/28/ue4-postprocessvolume%e4%b8%ad%e7%9a%84%e8%ae%be%e7%bd%ae%e8%a7%a3%e9%87%8a/ http://www.devqinwei.com/2016/10/28/ue4-postprocessvolume%e4%b8%ad%e7%9a%84%e8%ae%be%e7%bd%ae%e8%a7%a3%e9%87%8a/#respond Fri, 28 Oct 2016 07:21:16 +0000 http://www.devqinwei.com/?p=580 ScreenPercentage

官方解释是:

渲染时,使用比屏幕分辨率更高或者更低的分辨率来渲染。当等于100时(100%),该功能关闭;当<99时,进行升采样(upsampling,对原信号进行插值来生成频率更高的信号)来提升性能(即帧率);当>100时,进行超级采样(这个用来使图像清晰并且提升抗锯齿效果)。

]]>
http://www.devqinwei.com/2016/10/28/ue4-postprocessvolume%e4%b8%ad%e7%9a%84%e8%ae%be%e7%bd%ae%e8%a7%a3%e9%87%8a/feed/ 0