中制作的官方VR模板向我们阐释了自己的功能,而这个模板深度简化了怎样运用UE4去制作VR内容。在这份指南中,我将说说怎样运用UE4它的功能特色以及几个窍门超越模板去建立你自己的VR作品。
5.2 渲染和效果设置
不像其它引擎随附的模板,UE 4.13的VR项目有两副地图!这是为了分别给因不同的可用硬件特点(如有动作控制器和没有的)而产生的不同运动模式服务的。你可以在内容浏览器的『VirtualRealityBP/Maps/』路径里找到它们。而实现效果的不同之处和特点在下方有详细说明。
1.传送方式:头戴式显示器/手柄
一种简单的运动传送方式,使用手柄或者键盘来移动。按住按钮确认你的传送目的地,接着你可以通过望向一个新方向(这将更新你的中立旋转方向),或者使用手柄上的摇杆去给你的人物设置一个新的中立旋转方向。
2.传送方式:运动控制器
这种传送方式需要一个运动控制器。面朝一个方向然后摁下摇杆(比如Vive上的触摸板)产生移动。你可以使用触摸板外缘设置一个新的中立旋转方向。
这种运动类型运用了一个导航网格。这个导航网格用于传送的时候过滤掉其它无效的目的地。更多信息在蓝图里的移动一节可以看到(按“P”键可以在编辑视角里看见导航网格)。
因为PlayStation移动控制器并没有轴输入,所以我建立了一个替补旋转模式,也可以有选择性地给其它平台使用,例如Vive。你可以在除PS4之外的其它设备上在蓝图『MotionControllerPawn』里设置UseControllerRollToRotate手动启用这个模式。
房间尺度可见于传送目标附近。在Vive上只有当房间尺度建立成功了正方形轮廓网才能渲染出来。房间尺度可以用运动控制器上的摇杆旋转,或者用上面提到的替补旋转模式也可以。
运用扳机控制键你可以抓住和移动放置在桌子上的模拟盒子。当在可抓取物品附近时挥动控制器可以变换虚拟出来的手部的姿势。
-- 创造属于你自己的可以抓取的物品 --
添加新物品类型时你需要在你的蓝图中使蓝图接口生效(位置在VirtualRealityBP/Blueprints/PickupActorInterface),这样你就可以制作可以用虚拟手部抓取的物品。关于如何使蓝图接口生效有文件说明。
3.针对VR的项目优化
关于VR,本模板已经得到了不少针对性优化。关于如何优化你现有的VR项目,可以查阅在「渲染和效果设置」中给UE4的VR指南(效果注意事项章节),我详细解释了怎样把这些优化移植到你自己的项目上。
模拟方块(蓝色)投映和接收(动态)阴影,这经常是比较耗内存的一个点。不过,这个内存占用可以通过在你的可移动物体上开启“设置固定光源以及单样本阴影”功能来减掉一半。而这个功能可以使动态物品上接收到的阴影质量有所损失。它并不能运用于所有场景,但值得为了可能存在的更棒的表现效果而试一试。
我相当喜欢下面这个由REEL Picutres制作的视频,它用运动控制器指导你走完了所有可以用的功能。
如若无法观看视频请点击右边观看:虚幻引擎VR模板4.13总览
5.关于移植到你自己的项目
很多人可能想把模板的一些特色整合到自己的项目中,我列了一些关于整合过程的潜在注意事项和一些非常重要的文件。
利用UE4内置的『内容移动』功能你可以很轻松地把内容和依赖整合到你自己的项目中。你可以在想使用在自己的项目中的传送类型上右键Pawn蓝图,点击「资源操作』>合并。
基于运动控制器的移动需要有一个导航网格去过滤掉其他有效的传送目的地。利用你自己的过滤器实现这个动作非常简单,看看『BPMotionController』蓝图的『跟踪传送目的地』功能。
在淘宝买的ue4特效中有一些bp球的特效,这些特效我为什么拖到我的场景就不会播放了,这些bp特效我该怎么运用啊
别沉别沉,跪求大佬告知
BP是Blue Print蓝图的缩写,拖到场景后上方有个运行,点击一下,先看基础再弄这些吧,基础都有讲的。
动画序列里面不是可以添加特效吗?加上不就好了
楼主的电脑配置怎么样?我的电脑运行UE奇慢无比
有粒子特效文件的,蓝图只是触发播放。自己筛选一下
IK(Inverse Kinematics),反向运动学,是指在一个相互连结的动力链中,移动某一个节点时(特别是当最末节点移动时),其他节点的参数会自动计算以达到期望的位置。
简而言之,IK 是给某个骨骼直接设置一个目标位置,让系统计算其它骨骼的旋转和位置。比如抬腿时,可以将脚的位置向上偏移,然后控制好膝盖弯曲的方向(向内侧或者外侧),系统则会计算出膝盖应该处在什么位置。
(FK(Forward Kinematics),正向运动学,则是按顺序设置每个骨骼的位置与旋转)
图中虚线是人物左腿本来的位置,实线是实现IK后左腿应该所处的位置,绿色圆圈是膝盖位置,红色线段是脚抬高的距离。
也就是说,我们只要让左脚移动红色线段的位移,就可以实现IK了。那么我们需要用到射线检测来计算出这段位移。
图中蓝色即为我们检测用的射线,从人物半高位置竖直打向左脚。
红色部分则为射线的击中点,绿色圆圈的高度是地面的高度,也就是人物Mesh组件的高度(Mesh的坐标点在脚下)。红黑长度可以由射线检测得到,绿黑长度即为人物半高(你也可以设置为其他定值)。
那么脚的偏移量红绿长度=绿黑-红黑便可以求得了,膝盖的位置就交给IK系统处理了。
(关于人物胶囊体碰撞框导致脚部接触不到地面的问题,下一篇会讲)
这里先提一句,foot的骨骼即为膝盖连接到脚踝的这一根骨头,因为控制的是foot所以命名为foot,同理calf是大腿根连接到膝盖的骨头,thigh是胯部连接到大腿根部的骨头。
Bone的location)三点可以确定一个平面,而大腿小腿的长度是固定的,那么calf也就是膝盖的位置就确定了。(ue4提供了骨骼拉伸的功能只需勾选Allow Stretching,有兴趣可以尝试)
3.以左脚为例,我们设置第一个TwoBoneIK的细节,从上到下依次解释。
5.打开人物蓝图,在BeginPlay事件中获取到动画蓝图并提升为变量,将胶囊体的半高也提升为变量存起来,方便后面使用。
6.新增一个射线检测函数IK_LineTrace,先看下射线路径图再写蓝图
通过脚部的XY轴值和Mesh的Z轴值获得了蓝点,蓝点加上半高就得到射线的起点,蓝点减去TraceDistance就得到射线的终点。
(为什么不用脚部的Z轴值?因为我们修改的EffectionLocation是给脚部的偏移量,而初始位置都是在地面的高度也就是Mesh的Z轴值。当脚已经实现IK抬起时,脚部的Z轴值就已经不是在地面位置了,就会出现计算出的位移量错误。)
蓝图跟上面路径图保持完全一致,函数需要两个输入,BoneName(骨骼名)和TraceDistance(射线在地面下方的长度)
现在处理射线检测的结果
用半高(上图中红色)- HitDistance(射线起点到击中位置的距离,上图中紫色)= 脚部所需位移距离(也就是脚踩的箱子高度)
(SelectFloat节点:如果输入的Bool类型为True,则输出A,反之输出B。这里射线没检测到物体时,自然返回0)
先检测左脚(注意BoneName一定不要填错),然后返回值赋给AnimBP的Effector LocationXLeft,右脚同理,只不过需要求相反数,因为之前提到过,两只脚的X轴方向是相反的。
为了先去掉胶囊体碰撞的干扰,我们先把胶囊体的CapsuleRadius(半径)调小调到10
现在进入游戏,当人物站在楼梯上不动时,已经实现了IK了(建议先用一个宽一点的台阶易于观察,跑起来腿部不自然和抖动以及其他的问题后面都会解决)
一直在说胶囊体的问题,下面这张图就可以清晰的展示了
可以看到,胶囊体把人挡在了上一级台阶,所以左脚拉不下去了,下一篇我们会来解决这个问题。