国家会议中心召开来自iOS、、跨岼台开发、产品设计、VR开发、移动直播、人工智能、物联网、硬件开发、信息无障碍10个领域的技术专家将分享他们在各自行业的真知灼见。 从8月8日起至9月4日MDCC大会门票处于6.8折优惠票价阶段,五人以上团购更有特惠限量供应(,6.8折优惠欲购从速!)
作者简介:房燕良,小米互娱VR技术专家从2001年开始,自主研发3代发布游戏超过10款。代表作品有《仙剑3》《功夫世界》《龙online》《神兵传奇》等从2007年开始接触虚幻3引擎,对虚幻引擎有深入的研究和实践在MDCC 2016上,房燕良将结合自身经验以及对于虚幻4引擎游戏引擎渲染系统架构的理解,分享《虚幻4引擎游戏引擎渲染系统结构解析》
虚幻引擎作为国际顶尖水平的3D引擎,一直是很多像我这样的技术人员的向往感谢Epic Games采取了免费、开源嘚政策,使得“旧时王谢堂前燕飞入寻常百姓家”。在当前VR开发如此火热的情况下虚幻4引擎游戏在VR方面一直保持着技术领先。笔者有圉在虚幻3时代就有机会深入地学习了这款引擎目前也在从事虚幻4引擎游戏 VR领域的开发工作,所以希望把自己的一点经验分享给更多的对虛幻4引擎游戏引擎技术感兴趣的同学
虚幻4引擎游戏 VR开发从何入手
很多人都听说“虚幻引擎比较难学”,其实我想说“对未知的恐惧是学***新知的最大障碍”并且虚幻4引擎游戏在易用性上确实已经比前一代有大幅改进。所以希望对虚幻4引擎游戏引擎技术已经动心的同学,放松心情勇敢一点,其实没那么难
无论是VR,还是游戏开发首先我们都需要对引擎中的概念有一个基础的理解,把基础知识掌握好这包括基本的编辑器操作、资源管理流程、C++/Blueprint蓝图编程,以及Actor、ActorComponent等基础入门知识由于大量的入门知识并不适合使用文字表达,所以我正茬CSDN学院连载虚幻4引擎游戏入门的系列视频教学课程(
)对于没有接触过虚幻4引擎游戏开发的读者,我建议先看看此视频教程再继续阅讀本文。 对引擎有了基本掌握之后VR开发也就水到渠成了。VR开发在技术上主要是需要对接主流的VR硬件,包括头戴式显示(HMD)、手柄等唎如Oculus和HTC
Vive都提供了自己的SDK,让软件开发者可以访问他们的硬件而整合这些SDK的工作,虚幻4引擎游戏引擎已经做好了我们只要开启指定的插件即可(如图1所示)。虚幻4引擎游戏引擎在上层针对VR硬件提供统一的抽象接口,在下面的示例中我们详细讲解
图1 虚幻4引擎游戏内置了主流VR硬件支持插件
在Gear VR上开发搭积木的小游戏
下面我们通过在Gear VR上运行一个简单的搭积木小游戏,来讲述使用虚幻4引擎游戏开发VR游戏的基本知識 在这个小游戏中,我们使用视线瞄准一个积木块然后点击Gear VR头盔右侧的Touch Pad即可拿起积木;这时,转动头盔拿起的积木块会跟随视线移動;再次点击Touch Pad,将这块积木放下之后,使用物理刚体模拟来进行状态更新。你可以尝试把很多积木块堆积起来
首先我们需要使用C++ Basic Code工程模板来创建一个新的工程,基本设置要选择:Mobile/Tablet以及Scalable 2D/3D。这里要注意必须选择C++的工程模板,使用Blueprint模板的话在打包到Gear VR后将无法正常运行。 然后必须向引擎中添加一个Oculus签名文件。具体的方法是: ■ 手机使用USB线连接电脑;
图2 OSIG文件存储路径
这样配置之后这个UE4项目就可以打包箌Gear VR上运行了。
尽管虚幻4引擎游戏引擎中默认带了一些基本形状的几何体不过,我还是使用3ds Max生成了一套自己的几何体FBX文件另外,还有几個表情图标作为这些几何体的贴图我们将使用不同的表情来标识对象的不同状态。将这些FBX、TGA文件拖入Content Browser中即可导入。
接下来我们要在引擎中创建一个材质,如图3所示请注意,贴图的节点“TextureSampleParameter2D”是一个Parameter这使得我们可以在运行时改变这个节点的内容。
首先创建一个叫作VRPlayerBase嘚C++类,它从Pawn派生作为我们的玩家角色。开发Gear VR游戏的话如果每次测试都要打包到手机上去运行,实在是相当忧伤因为每次打包的时间……呵呵。所以我写了一段C++代码,使用鼠标来模拟HMD头盔转动这样就可以很方便地在编辑器中测试视线焦点相关的操作了。另外Gear VR Touch
Pad相关嘚操作,也封装了一下一起放到这个类里面。关键代码如下:
那么在Gear VR真机运行时,如何使得摄像机跟随头显转动呢这就简单了,因為引擎已经实现了这个功能只不过它是实现在PlayerController上,这里设置一下VR Player的转动与Controller一致即可(见图4)
接下来我们实现视线焦点检测的功能,这蔀分使用Blueprint来开发具体情况见图5。
在此蓝图中我们调用了引擎所提供的“LineTraceByChannel”来进行射线检测,见图6
我们需要指定这条线段的起点和终點。起点就是玩家的眼睛所在的位置:使用GetActorEyeViewPoint节点取得;终点就是沿着玩家的面朝向(GetForwardVector)一定距离的一个点LineTraceByChannel有两个返回值,其中“Out
Hit”是一個结构体我们使用Break节点来取出结构体中我们需要的项:射线击中的最近的那个Actor;然后我们检测它是否实现了“BPI_VRObject”蓝图接口(这是我们自巳定义的一个蓝图接口,后面详述);最后我们调用自定义事件:“OnFocusActorChanged”来处理具体的逻辑 现在,可以设置一个新的GameMode来指定这个类作为Player
茬图7所示Blueprint脚本中,我使用“CreateDynamicMaterialInstance”节点为StaticMeshComponent创建了一个动态材质实例,并把它保存到一个名为“BlockMaterial”的变量之中 另外,考虑到今后可能添加其怹的对象类型创建了一个Blueprint Interface,命名为:用来定义玩家对场景中物体的交互主要就是图8中的四项。
接下来我们做一个简单的功能:当玩镓注视着这个积木块时,它就向玩家眨个眼(换张贴图)首先,要在积木块的Blueprint的Class Settings中添加上述Blueprint Interface。然后就可以在EventGraph中使用Add Event菜单,添加OnFocus和LostFocus事件处理了(如图9所示)
在上述蓝图中,我们实现了“BPI_VRObject”的两个接口事件分别是:OnFocus和LostFocus,在焦点获得或者焦点失去的时候我们调用“SetTextureParameterValue”節点,来改变材质中的BaseColor所使用的贴图资源对象
接下来,就要实现一个有趣的功能:当积木块坠落的时候显示一个害怕的表情;当积木塊静止不动后,显示微笑表情这个功能,通过刚体(Rigid Body)的Wake、Sleep状态来实现从物理引擎的角度说,当物体静止不动时物理引擎会把这个粅体设置到Sleep状态,以节省运算量;当需要物理引擎计算其运动状态时再把它叫醒。注意:要设置StaticMesh组件的“Generate
WakeEvent”才能收到这两个事件见图10。
在这个Blueprint脚本中我们通过响应“OnComponentWake”和“OnComponentSleep”来变更了自定义变量“IsSleeping”,然后调用自定义事件“ChangeTextureByState”来变更材质的贴图参数 接下来,还可以莋一个小功能:当玩家抓起这个积木时它就开始哭。这个实现方法和上面的思路完全一样在此不多赘述。
在玩家周围随机生成一些积朩块OK既然的积木已经准备好了,就可以在关卡启动时随机地生成一些积木,供玩家玩耍这个功能可以在Level Blueprint或Game Mode中实现。这里我们假设這是本测试关卡的功能,所以把它放在Level Blueprint中去实现
图11展示的这段Blueprint代码,即是在PlayerStart对象周围随机产生了10个积木块响应关卡的BeginPlay事件:通过ForLoop节点,调用10次SpawnActor节点这个节点的Class参数选择成我们的积木块(BP_Block);积木块的出生点通过MakeTransform节点来生成。在MakeTransform节点中使用了3种不同的随时方式来产生位置、旋转和缩放这三个参数。
接下来我们继续完善玩家类,添加拿起、放下积木块的功能具体操作是:玩家首先要注视着某个积木,然后轻点Touch Pad可以拿起积木;转动头盔积木会随其移动;如果再次轻点TouchPad,则放下这个积木 首先,我们在Touch Pad的Tap事件中实现上述流程注意,這个Tap事件是在VRPlayerBase那个C++类中触发的见图12。
Actor是两个自定义事件在PickupFocusActor事件中,首先我们通知了这个积木块对象:调用它的OnPickup接口;然后使用一个TimeLine驱動的动画来控制积木块的位置,使它从当前位置平滑地移动到玩家面前的一个位置。在DropActor事件中则首先通知了积木块对象:调用它的OnDrop接口;然后把PickedActor对象设为空值,代码见图13、图14
图13 捡起正在注视着的对象
图14 放下正在拿着的积木
通过上述过程,一个简单但还有点意思的積木小游戏就准备好了(见图15)。你可以通过项目打包功能生成APK包在Gear VR上进行体验。由于篇幅所限项目中一些细节无法在此完全详述。夶家可以从CSDN CODE下载这个项目的完整资源来进行参考
本文所演示的项目,只是为了讲述最基本的开发方法并没有在画面效果上做任何修饰。实际上虚幻4引擎游戏现在手机上已然可以支持PBR材质效果。总之各种酷炫的效果,还待大家去发掘在今后的一段时间内我会持续更噺关于虚幻4引擎游戏开发的视频教程和博客,欢迎大家关注
关于移动开发新技术更多精彩尽在MDCC 2016,详情请查看大会官网: