unrealengine状态机_unrealengine - CSDN
  • Unreal Engine 4 初学者教程:开始

    万次阅读 多人点赞 2018-06-14 16:11:14
    Unreal Engine 4 初学者教程:开始 原文:Unreal Engine 4 Tutorial for Beginners: Getting Started 作者:Tommy Tran 译者:kmyhy Unreal Engine 4 是一个游戏开发工具集,能够开发从 2D 手机游戏到 3A ...

    原文:Unreal Engine 4 Tutorial for Beginners: Getting Started
    作者:Tommy Tran
    译者:kmyhy

    Unreal Engine 4 是一个游戏开发工具集,能够开发从 2D 手机游戏到 3A 级主机游戏的一切。“方舟:生存进化”、“泰克肯7”和“王国之心 III”这些游戏背后使用的引擎就是它。

    对于初学者来首,用 Unreal Engine 4 开发是很简单的。通过蓝图可视化脚本系统,你可以不写一行代码就创建出整个游戏。再加上一个易于使用的界面,你就可以获得一个可以运行的游戏原型。

    本教程主要是让初学者入门。它涉及以下几个知识点:

    • 安装引擎
    • 导入资源
    • 创建材质
    • 用蓝图(Blueprint)创建具有基本功能的对象

    为了学习这些知识,你会创建一个用于展示一只香蕉的旋转转盘。

    注:本教程属于 Unreal Engine 教程系列,这个系列共 10 个部分:

    安装 Unreal Engin 4

    Unreal Engine 4 使用 Epic Games Launcher 进行安装。进入 Unreal Engine 网站 并点击 Get Unreal 按钮(右上角)。

    下载这个安装器需要创建一个账号。创建账号之后,选择下载和你的操作系统对应的版本。

    下载并安装完安装器之后,运行安装器。会显示一个窗口:

    输入 email 和密码,点击 sign in。登录之后会显示这个窗口:

    在左上角,点击 Install Engine,安装器会让你选择要安装的组件:

    注:Epic Games 经常升级 Unreal Engine,因此你的引擎版本会与此不同。例如我写第一稿时,版本已经升级到 4.14.3! 只要你的版本不低于 4.14, 你就可以使用本教程。

    默认选中的是 Starter Content、Templates and Feature Packs 和 Engine Source。就保持这样的选择不变。它们分别是:

    • Starter Content: 这是你可以在自己项目中免费使用的资源集。它包含了一些模型和材质。你可以在你的游戏中临时使用它们。
    • Templates and Feature Packs: 模板可以根据你的选择来创建基本功能。例如,Side Scroller 模板会创建一个项目,项目中包含一个角色、基本动作和一个固定的水平相机。
    • Engine Source: Epic 提供了源码,这样任何人都可以修改这个引擎。例如,如果你想为编辑器添加自定义功能,你可以通过修改源码来实现。

    拖动这个列表,还有几种不同的平台。如果你不打算支持某个平台,请让它反选。

    选好组件之后,点击 Install。安装完成后,引擎会在 library 中显示。接下来我们创建项目。

    创建项目

    点击 Launch 按钮打开项目浏览器。在项目浏览器中,点击 New Project 标签页。

    点击 Blueprint 标签页。这里,你可以选择一个模板。但是,因为我们想从空白开始,所以选择了 Blank template。

    在下面,你会发现有更多的设置。

    分别有这几个选项:

    • Target Hardware: 选择 Mobile/Tablet 会关闭一些后期处理效果。还会用鼠标模拟触摸。设置为 Desktop/Console。
    • Graphical Target: 选择 Scalable 3D or 2D 会关闭一些后期处理特效。请设置为 Maximum Quality。
    • Starter Content: 使用这个选项可以包含一些开始内容。为了简单起见,这里将它设为 No Starter Content。

    最后一部分设置是指定项目文件夹地址和项目名称。

    点击 Folder 栏右边的 3 个小点,可以改变项目文件夹地址。

    项目名称不代表游戏名称,因此不用担心后期可以修改这个名称。选择 Name 栏的文本框,输入 BananaTurntable。

    最后,点击 Create Project.

    认识界面

    创建完项目,编辑器会打开。编辑器分成了几个区域:

    1. 内容浏览器: 这里显示所有项目文件。用它创建文件夹并组织文件。可以在搜索栏中查找文件或者过滤文件。
    2. Modes: 这里可以选用各种工具比如 Landscape 工具和 Foliage 工具。默认工具是 Place 工具。它允许将各种对象比如灯光和相机放到游戏关卡中。
    3. 世界大纲编辑器: 显示当前关卡中的所有对象。你可以通过将相关的对象放入文件夹中来组织整个列表。它也可以搜索或者通过类型来过滤。
    4. 详情: 你选中的对象会在这里显示出属性。这里可以编辑对象的设置。这里进行的修改只会影响这个对象的实例。例如,如果你有两个球体,如果你改变了其中一个的大小,那么只会对你选中的对象有效。
    5. 工具栏: 包含各种功能。你用得最多的一个就是 Play。
    6. 视口: 关卡视图。按下右键拖动鼠标可以查看四周。按下右键,用 WASD 键进行移动。

    导入 Assets

    光有一个圆桌却没有要陈列的东西有什么用?请下载香蕉模型。里面有两个文件 Banana_Model.fbx 和 Banana_Texture.jpg。当然,你可以用自己的模型。但你怎么来使用这个该死的香蕉呢?

    在 Unreal 能够使用一个文件之前,你必须导入它。在内容浏览器,点击 Import。

    通过文件浏览器,找到 Banana_Model.fbx 和 Banana_Texture.jpg。框选住两个文件,然后点击 Open。

    对于 .fbx 文件,Unreal 会提供几个导入选项。确保 Import Materials 未选中,因为你会创建自己的材质。其它设置保持不变。

    点击 Import。这两个文件就显示到内容浏览器中了。

    在导入文件时,实际上它是不会保存到项目中的,除非你明确地这样做。你可以用右键点击这个文件,选择 Save 就可以保存它们了。还可以选择 File\Save All 来一次性保存所有文件。确保经常使用保存功能。

    注意在 Unreal 中模型被称为网格。选择你已经有一个香蕉的网格了,可以将它放到关卡中了。

    添加网格到关卡

    选择关卡看起来空空的,让我们放点东西。
    要添加网格,左键将 Banana_Model 从内容浏览器中拖到视口。放开鼠标左键,就可以将网格放下。

    关卡中的对象是可以移动、旋转和缩放的。它们的快捷键分别是 W、E 和 R。然后使用操纵杆:

    材质

    如果你近距离查看香蕉,你会发现它根本不是黄的。事实上,它是灰色的。要给香蕉一些颜色和细节,你必须创建材质。

    材质是什么?

    材质决定了某件东西的表面外观。在一个基本的关卡中,材质定义了 4 个方面:

    • 基本色: 一个表面的颜色或纹理。常用于添加细节和色彩的变化。
    • 金属化:表面和金属的相似度。通常,纯粹的金属拥有的金属化值是最大的,而织物的金属化值为 0。
    • 高光:控制非金属表面的发光。例如,陶瓷拥有较高的高光值,而黏土则相反。
    • 粗糙度:粗糙度最大时,没有任何高光。用于岩石或木头的表面。

    下面是 3 种材质的例子。它们颜色相同但属性不同。每种材质都有在对应的属性上设置为较高值。另外的属性则设为 0。

    创建材质

    要创建材质,请进入内容浏览器,点击绿色的 Add New 按钮。会弹出一个菜单显示你可以创建的 assets。点击 Material。

    将材质取名为 Banana_Material 然后双击文件打开材质编辑器。

    材质编辑器

    材质编辑器由 5 部分组成:

    1. 图(graph): 这个区域包含所有节点和结果节点。按下鼠标右键并移动鼠标可以平移。滚动鼠标滚轮可以进行缩放。
    2. 详情: 这里显示选中节点的属性。如果没有选择任何节点,这里会显示材质的属性。
    3. 视口: 包含一个预览的网格,显示你的材质。要转动相机可以按住鼠标左键并移动鼠标。要缩放可以用鼠标滚轮。
    4. 调色板:一个列表,列出材质所有节点变量。

    什么是节点?

    在开始编辑材质前,你必须知道节点是什么。

    节点构成了材质的主体。有许多不同的节点,提供了不同的功能。

    节点可以有输入和输出,用一个圆圈+一个箭头来表示。输入位于左边,输出位于右边。

    材质有一个特殊的节点,就是结果节点,在 Banana_Material 中它是现成的。它是所有节点的终点。一旦你接通这个节点,就可以决定材质的最终显示。

    添加材质

    要为一个模型添加颜色和细节,你需要一个纹理。一个纹理就是一张 2D 图片。通常,它们会投射到 3D 模型上,让它具有颜色和细节。

    为了给香蕉贴图,你需要使用到 Banana_Texture.jpg。TextureSample 节点允许你在材质上使用贴图。

    找到调色板,找到 TextureSample。按下鼠标左键,将它拖到“graph”窗口。

    要选择纹理,首先需要选中这个 TextureSample 节点。找到详情面板,点击 Texture 右边的下拉按钮。

    列表中列出项目中所有纹理。选择 Banana_Texture.

    要在预览网格上查看贴图,需要将它插进结果节点中。左键点击 TextureSample 节点的白色输出按钮上,将它拖到结果节点的 Base Color 输入按钮上。

    回到视口,在预览网格上查看纹理。旋转它(按下鼠标左键并拖动)查看其它细节。

    点击工具栏上的 Apply 按钮,应用你的材质。然后关闭材质编辑器——这部分的工作结束了。

    使用材质

    要将材质应用到香蕉上,你需要指定它。回到内容浏览器,双击 Banana_Model 打开它。这会显示一个编辑器:

    找到详情面板 Materials 一节。点击 Element 0 右边的下拉按钮,选择Banana_Material.

    关闭网格编辑器,回到主编辑器,看一下视口。你将看到香蕉现在已经贴图了。恭喜,你已经成为了一个关卡设计师了!

    注:如果光线太暗,你可以在世界大纲编辑器中点击 Light Source 来改变它。在详情面板中,找到 Intensity,设置为更高的值。

    蓝图

    香蕉看起来很好,但如果将它放到圆桌上旋转就更好了。用蓝图来创建一个圆桌很轻松。

    简单讲,一个蓝图(Blueprint)表示一件”东西“。蓝图允许你为对象创建自定义行为。对象可以是某种物体(比如圆桌),也可以是某些抽象的东西比如生命系统。

    想制作一辆会动的车吗?构建一个蓝图。一只会飞的猪呢?使用蓝图。一只在碰撞中爆炸的小猫?还是蓝图。

    就像材质一样,蓝图使用了节点系统。这意味着你只需要创建节点然后将它们连接起来,不需要编写代码!

    注:如果你更喜欢写代码,你可以用 C++。蓝图易于使用,但它们无法做到和 c++ 代码一样快。如果你不得不用到大量计算的东西,比如复杂算法,你应当使用 c++。
    当然虽然你喜欢 c++,但很多时候用蓝图其实是个好主意。蓝图有这些优点:

    • 通常,蓝图比 c++ 的开发速度更快。
    • 易于组织。你可以将节点分成不同的模块,比如功能和图形。
    • 如果你和非编程人员一起工作,修改蓝图更容易,因为它的可视化和直观性。

    将对象用蓝图来创建是一种好办法。当需要提升性能时,将它们转换成 c++。

    创建蓝图

    在内容浏览器,点击 Add New。在列表中选择 Blueprint Class。

    弹出一个窗口,让你选择父类。你的蓝图会从父类继承所有的变量、函数和组件。花点时间了解每个类能做什么。

    注:Pawn 和 Character 也是 Actor 类,因为你可以放置和生成它们。

    因为圆桌只会待在一个地方不动,Actor 类最适合。选择 Actor 然后给文件命名为 Banana_Blueprint。

    最后,双击 Banana_Blueprint 打开它。当窗口弹出时,点击 Open Full Blueprint Editor :

    蓝图编辑器

    首先,在蓝图编辑器中,选择 Event Graph 标签页。

    蓝图编辑器有 5 个主要的窗口:

    1. 组件窗口:当前组件的列表。
    2. 我的蓝图:用于管理你的图形、功能和变量。
    3. 详情窗口:显示当前选中对象的属性。
    4. 图形窗口:这是关键。所有节点和逻辑都在这里。按下右键并拖动鼠标进行平移。滚动鼠标滚轮进行缩放。
    5. 视口:任何拥有可视化元素的组件都在这里显示。你可以用主编辑器一样的方式移动和旋转。

    创建圆桌

    要创建圆桌,需要两个东西:一个基座和一个陈列品。你可以通过组件来创建这两个东西。

    什么是组件?

    如果一个蓝图是一辆车,那么组件就是组成车辆的构件。例如,车门、轮胎、引擎都是组件。

    但是,组件不仅仅限于物理对象。

    例如,要让车动起来,你需要添加一个移动组件,你甚至可以为它添加一个飞行组件让它飞起来。

    添加组件

    在你看到任何组件之前,你需要切换到视口视图。点击 Viewport 标签页即可切换到它。它看起来像这个样子:

    注:DefaultSceneRoot 组件在玩游戏时不会显示。它只在编辑器中显示。

    这个圆桌用到了两个组件:

    • Cylinder: 一个简单的白色圆柱体。这是放置香蕉的底座。
    • Static Mesh: 这个组件用于显示香蕉网格。

    要添加底座,找到组件面板。点击 Add Component 并选择 Cylindar。

    最好让底座变得更短一点。按下 R 键,显示缩放操作杆,然后将它缩短(不要管真实大小,你可以在后面修改它)。

    然后来添加网格。回到组件面板,在空白地方点击左键,清除对圆柱体的选中状态。这能保证接下来的组件不会附加在圆柱体组件上。

    注:如果不这样做,接下来的组件会附加在圆柱体上。这意味着它会继承圆柱体的 scale 属性。因为你缩短了圆柱体,那么接下来的组件也会被缩短。

    然后。点击 Add Component,选择 Static Mesh。

    要显示香蕉,选择这个静态网格组件,然后点击 Details 标签页。点击 Static Mesh 右边的下拉按钮,选择 Banana_Model。

    如果它的位置不对,请移动香蕉。按 W 激活操作杆,移动它的位置。

    蓝图节点

    接下来让圆桌旋转。这就要用到蓝图节点了。

    和材质节点不同,蓝图节点拥有特殊的 pin 叫做 Execution pin。位于左边的 pin 是输入,位于右边的则是输出。所有节点至少有一个输入/输出。

    如果节点有一个输入 pin,它前边必定有一个连接才能执行。如果有一个节点没连接,那么后续的任何节点都不会执行。

    举一个例子:

    节点 A 和节点 B 会执行,因为他们的输入 pin 已经有连接。节点 C 和节点 D 不会执行,因为节点 C 的输入 pin 是断开的。

    转动圆桌

    在开始之前,看一眼组件面板。你会看到 Cylindar 和 Static Mesh 有缩进而 DefaultSceneRoot 没有缩进。这是因为前者是附加到 DefaultSceneRoot 上的。

    如果你移动、旋转或缩放 root 组件,那么它包含的组件也会有同样动作。通过这种方式,你可以让 Cylinder 和 Static Mesh 一起旋转,而不是分别旋转。

    创建节点

    要开始编写脚本,需要进入 Event Graph 标签页。

    让某个对象旋转非常简单,只需要创建一个节点。在 graph 视图空白地方右键,打开有效的节点菜单。搜索 AddLocalRotation。因为你需要旋转底座和香蕉,你只需要旋转 root 组件即可。选择 AddLocalRotation(DefaultSceneRoot)。

    注:如果没有列出这个节点,请反选菜单右上角的 Context Sensitive 选项。

    在 graph 窗口中会多出一个 AddLocalRotation 节点。Target 输入会自动连接到你选择的组件。

    要设置旋转角度,找到 Delta Rotation 输入,然后修改 Z 值为 1.0。这将导致蓝图沿 Z 轴旋转。值越大,转速越快。

    要不断地旋转,你必须逐帧调用 AddLocalRotation。要逐帧调用,需要使用 Event Tick 节点。它已经在你的 graph 视图中了。如果没有,用前面一样的方法创建一个。

    将 Event Tick 节点的输出 pin 拖到 AddLocalRotation 节点的输入 pin。

    注:用这种方法,旋转速度取决于帧率。这意味着机器越慢圆桌的转速越慢,反之亦然。这对于本教程来说是可以的,因为我让事情简单化了,但在后面的教程中我会介绍如何解决这个问题。

    最后,点击工具栏上的 Compile 按钮,更新你的蓝图,然后关闭蓝图编辑器。

    将蓝图添加到关卡

    在添加蓝图之前,在主编辑器的视口中,删除香蕉的模型。选择该模型,点击 Edit\Delete 菜单或者按 Delete 键。

    添加蓝图和添加网格一样。在文件上按住左键,将它拖到视口中。

    点击工具栏上 的 Play 按钮,看看效果!

    注:如果你没有删除原有的香蕉模型,你可能会被警告”灯光需要重建“。如果删掉模型,则错误不再显示。

    接下来去哪里?

    在这里下载完成后的项目。

    你已经学完这篇教程,但那只是 Unreal 中极小的一部分。如果你想继续学习,请阅读本系列的下一篇教程,我将介绍 Unreal 引擎更多关于蓝图的内容。

    展开全文
  • Unreal Engine 4公布好长好长时间了。直到近期才有时间细致去看一下。 TimSweeney老大一句话“IF YOU LOVE SOMETHING, SET IT FREE”。原来须要几十万授权金才干拿到的东西,就从$19。变成免费了。并且开源。作为一...


    Unreal Engine 4公布好长好长时间了。直到近期才有时间细致去看一下。

    TimSweeney老大一句话“IF YOU LOVE SOMETHING, SET IT FREE”。原来须要几十万授权金才干拿到的东西,就从$19。变成免费了。并且开源。作为一个国际顶尖的引擎,能走出这一步,对我等普通开发人员真是福音啊。

    如此的牛X。再加上开源,相信Unreal Engine 4会火起来的,你看看近期E3上的产品展示也能感觉到。只是。Unreal的定位毕竟是“国际顶尖”,而非Unity3D那样的“开发大众化”。所以上手是有一定难度的。

    以下我把对Unreal Engine 4的初步印象总结一下,特别针对像我一样有Unreal Engine 3的同学。希望很多其它的同学来已经学习Unreal。


    UnrealScript去掉了

    开发语言上最大的变化。莫过于把UnrealScript去掉了。

    UnrealScript吧,当年来看还是一个非常NB的东西。要知道Unreal一代公布是1998年的事儿,而JAVA语言也就是95年才公布的。

    据说Tim Sweeney在開始设计Unreal的时候以前考虑过使用Java作为上层语言。只是那时候Java还不成熟。所以他參考Java,实现了这个一个面向对象的,单根继承的脚本语言。只是。随着时间流转。Epic似乎并没有花太大的力气去演进UnrealScript。在Unreal Engine 3的时代。它确实显得有点老旧了,书写起来比一些现代语言确实有非常多不方便的地方。

    所以。去掉就去掉吧。只是。值得注意的是,官方也留出了整合其它脚本语言的接口。比如LUA。



    C++11

    底层非常多基础代码看上去有非常强的亲切感。底层架构设计思路沿用了很多。

    底层依旧是使用C++,只是用了非常多C++11的特性,代码看上去简洁了不少。

    项目的编译、构建使用UnrealBuildTool,这应该是从3代延续过来;另外,就是添加了一个UnrealHeaderTool工具。猜想是依据UCLASS。UPROPERTY等宏,生成自己定义反射信息用的,详细的还待进一步研究。


    Blueprint Visual Scripting

    据说这是UE4最牛X的改进了。看了看,原来是Kismet的延伸,连源码非常多都是UKismentXXX那一套。

    UE3里面的Kistmet仅仅限于在一个关卡中使用,而Blueprint扩展了。关卡能够有唯一的一个Level Blueprint,相当于原来的Kismet;另外添加了Blueprint Class,大概就是用Blueprint创建自己定义的Actor、Pown之类的,由于有了这个功能所以原来的Archetype顺带也就被替代了。

    事实上。作为老一代屌丝Coder。我一直对Kismet那种表达式层级可视化编程,一直不太感冒(像Unity的PlayMaker那样,提供更高层级抽象的可视化工具更好)。

    只是。既然是UE4主推的个东东,还是得看看。

    只是,整体上给Designer一套可视化编程的东西。让他们自己实现一些关卡逻辑、游戏规则之类的。还真是一个特别好的方法。当然,我们这些Coder的工作还是不会丢掉的。比如游戏框架,游戏一些底层功能、经常使用模块还是要C++写好(或者使用LUA脚本?),封装给Blueprint来使用的。


    AnimTree哪去了

    UE3的AnimTree给我震撼太大了,所以特别关心UE4的动画系统。

    看了一下,貌似被分解成了BlendSpace和AnimGraph。

    • BlendSpace
      好比说“站立、走、跑”这三个动作,在UE3的AnimTree里面是有一个特定的node来混合的,依据移动速度不同。

      在UE4里,则须要创建一个BlendSpace1D资源。然后暴露出Speed參数。

    • AnimBlueprint
      使用Blueprint,AnimGraph,状态机等等控制角色的动画,怎么看上去和Unity的Mecanim有点像呢。唉~
    看来AnimTree是真的不见了,非常遗憾。由于我认为那个使用树形结构来抽象的动画系统,实在是非常清晰并且强大。

    渲染系统

    基于物理的渲染(PBR:Physically-Based Rendering)效果真的是太NB了,Unity5尽管也是PBR,好像比UE4还是略逊一筹啊。这个无需多言了,各种DEMO视频大家都看了不少了。渲染流程也全然走延迟渲染了。

    但多线程渲染,SceneProxy、Material之类的基础架构没怎么变。


    Behavior Tree

    这个东西好像在国外的游戏AI领域这几年挺流行了,是个非常高大上的东西。UE4直接做了,太好了。

    另外,还有非常多重大改进。比如Package,资源导入,添加插件支持等,这里就不一一细说了。

    推荐看一下官网的文章吧。作为本文的补充偷笑


    转载于:https://www.cnblogs.com/liguangsunls/p/7052436.html

    展开全文
  • Unreal Engine 4 术语简介

    千次阅读 2016-10-21 10:34:53
    Unreal Engine 4 术语简介翻译自ue4官方文档。Unreal Engine 4 术语简介 翻译自ue4官方文档 Objects Actors Components pawns Characters PlayerController AIController Brushes Levels World GameModes GameStates...

    Unreal Engine 4 术语简介

    翻译自ue4官方文档

    Objects

    UE4中的objects和其他c++框架(QT、cocos2d-x)一样,具有垃圾收集、元数据等功能。
    官方文档的描述:

    The base building blocks in the Unreal Engine are called Objects and contain a lot of the essential “under the hood” functionality for your game assets. Just about everything in Unreal Engine 4 inherits (or gets some functionality) from an Object. In C++, UObject is the base class of all objects; it implements features such as garbage collections, metadata (UProperty) support for exposing variables to the Unreal Editor, and serialization for loading and saving.

    Actors

    在关卡摆放的游戏对象就是Actor。Actor可以可以作位置体积变换。在UE4中可以用蓝图或者c++来创建Actor。如果用c++,AActor是所有Actor的基类。
    常用Actor:

    - StaticMeshActor   环境
    - CameraActor       相机
    - PlayerStartActor  玩家起始
    

    Components

    组件component就是一个个可以附加到Actor上的功能点。人是Actor,会开车就是一个component。这个和和u3d里的概念类似的。ue4有很多组件,例如位置变换、audio等。

    pawns

    Actor的子类,用于表示人形角色或者其他具备avatar模型的角色。玩家以及NPC都是pawns。

    Characters

    pawn 的子类。用于表示玩家角色,具备输入控制、碰撞等属性。

    PlayerController

    玩家角色控制器?怎么翻译无所谓啦,反正就是用来接收玩家的输入并将这些输入信息关联到游戏中的角色。
    在多人游戏中,每个客户端有且只有一个玩家控制器,客户端通过这个与服务端交互。

    AIController

    顾名思义,控制游戏中AI角色。

    Brushes

    用画刷画出来的游戏对象?不是很理解这个概念。反正画在游戏场景里的都是actor,可以用bursh画一些BSP(basic shape),例如圆柱体、立方体等等。

    Levels

    关卡,相当于游戏场景,里面有个中游戏对象。UE4中每个关卡都会被单独保存成.umap文件。

    World

    所有的level组成一个world。

    GameModes

    看了下文档,感觉似乎GameRule更适合它的意义。GameMode就是游戏的规则:玩家怎么加入游戏、游戏能否暂停、关卡的切换条件和方式等等。

    GameStates

    游戏状态,例如玩家的连接状态、比分等信息。

    PlayerStates

    玩家信息,例如姓名、职业、种族、等级、比分等等。

    展开全文
  • AirSim is a simulator for drones, cars and more built on Unreal Engine. It is open-source, cross platform and supports hardware-in-loop with popular flight controllers such as PX4 for physi

    1. Airsim 概述

    AirSim是基于Unreal Engine引擎或者Unity引擎,打造的一个无人机/无人车的仿真平台,凭借着Unreal Engine的性能,能够出色的进行基于计算机视觉算法的autonomous vehicles的仿真,AirSim在使用时作为一个UE4的插件,可以嵌到任意Unreal environment中,所以我们可以根据需求实现不同任务,不同场景的仿真。

    Our goal is to develop AirSim as a platform for AI research to experiment with deep learning, computer vision and reinforcement learning algorithms for autonomous vehicles. For this purpose, AirSim also exposes APIs to retrieve data and control vehicles in a platform independent way.
             ——Microsoft

    微软想把它打造成人工智能研究的仿真平台,以无人驾驶为主(比如自主无人机、自动驾驶汽车),在Airsim中跑深度学习,计算机视觉和强化学习算法。

    2. Unreal Engine 概述

    The Unreal Engine is a game engine developed by Epic Games.With its code written in C++, the Unreal Engine features a high degree of portability and is a tool used by many game developers today.The current release is Unreal Engine 4, designed for Microsoft Windows, macOS, Linux, SteamOS, HTML5, iOS, Android, Nintendo Switch, PlayStation 4, Xbox One and virtual reality (SteamVR/HTC Vive, Oculus Rift, PlayStation VR, Google Daydream, OSVR and Samsung Gear VR).

    3. 在Linux下环境搭建

    3.1. 手动 编译安装 UnrealEngine

    UnrealEngine在github上私有的项目,https://github.com/EpicGames/UnrealEngine.git 不信你点点看。
    但是只要你申请加入Unreal engine项目的组织,还是可以Clone下来的,具体步骤。

    1、首先登陆UnrealEngine的缔造者Epic的官网,注册一个账号
    2、然后在Epic的个人页面下–账号关联,关联到自己的GitHub账号 (这个关联表明你申请加入EpicGames的开发,他会向你发出一个加入邀请)
    3、登陆GitHub,在https://github.com/EpicGames 确认邀请就可以了

    这里写图片描述

    接下来就按照Build It on Linux的步骤,下载、编译安装 就可以啦

    git clone -b 4.18 https://github.com/EpicGames/UnrealEngine.git
    cd UnrealEngine
    //few times Epic folks broke the build so we will get commit that works
    // git checkout af96417313a908b20621a443175ba91683c238c8
    ./Setup.sh
    ./GenerateProjectFiles.sh
     make
     //注意 UnrealEngine这个东西很占地方,不仅下载大,编译更大,所以你的HOME下至少要有20G的Free Space,不然等你编译的时候,空间占满了,就失败了,我开始就这样,后来把我的双系统Windows下的一个分区挂到home下的一个文件夹下,才解决。
    

    3.2 编译airsim 插件

         # go to folder where you clone GitHub projects
         git clone https://github.com/Microsoft/AirSim.git
         cd AirSim
         ./setup.sh  // 配置依赖
         ./build.sh  //编译airsim库
         cd ros
         catkin_make // 编译airsim_ros接口
         
    

    ./Engine/Binaries/Linux/UE4Editor 执行这个这个路径下的可执行程序,启动Unreal Engine试试。有两点说明。

    1. 如果在初始化启动的过程中出错了(比如OpenGL的错误),说明你要按照NVIDIA的显卡驱动
    2. 这个软件很大,对显卡的显存要求也比较高

    3.3 使用编译好的binaries环境+Airsim

    These are experimental Linux binaries for Ubuntu 16.04
    https://github.com/microsoft/AirSim/releases/tag/v1.2.0Linux

    • Africa (safari-like environment with moving animals and poachers)
    • Blocks
    • City (large environment with moving vehicles and pedestrians)
    • Forest
    • LandscapeMountains
    • Neighborhood (small urban neighbourhood block)
    • SimpleMaze
    • SubT
    • TrapCam (hunting trap camera simulator with large and small game)
    • Warehouse
    • ZhangJiaJie
    场景 描述
    Africa.zip 1.05G
    Blocks.zip 327 MB
    CityEnviron.zip.001 1.66 GB
    CityEnviron.zip.002 1.24 GB
    Forest.zip 1.17 GB
    LandscapeMountains.zip 657 MB
    Neighborhood.zip 1.42 GB
    SimpleMaze.zip 423 MB
    TrapCam.zip.001 1.76 GB
    TrapCam.zip.002 1.33 GB
    Warehouse.zip 837 MB
    ZhangJiaJie.zip 517 MB

    Source code (zip)
    Source code (tar.gz)

    OK 至此,Airsim+UnrealEngine 在Linux下的环境就搭建好了,可以自己先体验一下。
    后面再分享Airsim+UnrealEngine的使用

    4. 如何启动 无人车/无人机自动驾驶仿真环境

    要启动基于Airsim+UnrealEngine4 搭建无人车/无人机自动驾驶仿真环境,需要两个方面:

    • airsim+UE4 也就是配置了airsim插件的UE4 environment
    • airsim settings 不同的配置可以设置不同的仿真类型/传感器类型等
    • airsim API, 有了以上两者,我们通过什么方式取回image, 得到vehicle的状态,并执行control cmd,这就要通过api与其进行数据交互。

    首先关于airsim+UE4

    • 简单的方式,可以使用airsim发布的编译好的binaries环境,这种二进制文件,通过执行一个脚本可以直接运行。
    • 另一种方式是自己编译UE4,以及enviromnent,并且在环境中添加airsim plugin,这种方式更加灵活,有时编译容易出错,说版本不匹配。

    其次关于settings.json的设置:

    AirSim Settings.json 很总要

    最后是airsim API

    airsim 采用RPC网络通信,所以可以通过创建rpc client与仿真器的rpc server进行交互。airsim提供了C++ /Python的接口用于基于api的程序开发。可以参考相应的C++ APIs Guide设计

    [参考文档]

    5. 最简单的方式配置示例

    实现UE4+airsim 实现无人机在simple_flight mode下带有双目+深度的模式

    - 场景, 使用linux下预先编译好的 Block.zip 
    执行命令: ./Blocks.sh
    
    - settign文件
    - api
    - 
    

    6. 四种仿真类型

    {
      "SettingsVersion": 1.2,
      "SimMode": "Multirotor" // Car or ComputerVision
    }
    

    6.1 Hardware-in-Loop(HITL)

    • flight controller runs in actual hardware such as Naze32 or Pixhawk chip.
    • connect this hardware to PC using USB port
    • Simulator talks to the device to retrieve actuator signals and send it simulated sensor data
    {
      "SettingsVersion": 1.2,
      "SimMode": "Multirotor",
      "Vehicles": {
        "PX4": {
          "VehicleType": "PX4Multirotor"
        }
      }
    }
    

    参考文档px4_setup.md

    6.2 Software-In-Loop Simulation (SITL)

    {
        "SettingsVersion": 1.2,
        "SimMode": "Multirotor",
        "Vehicles": {
            "PX4": {
                "VehicleType": "PX4Multirotor",
                "UseSerial": false
            }
        }
    }
    
    • firmware runs in your computer as opposed to separate board

    参考文档 px4_sitl.md
    Airsim SIL简单说明

    6.3 airsim simple_flight (default)

    参考simple_flight.md

    • 特性:可以通过输入 angle rate, angle level, velocity or position的方式控制

    6.4 Computer Vision (without flight controller)

    {
      "SettingsVersion": 1.2,
      "SimMode": "ComputerVision"
    }
    
    • In this mode, physics engine is disabled and there is no vehicle, just cameras
    • You can move around using keyboard (use F1 to see help on keys). Or you can call APIs to move cameras around and take images.
    • You can press Record button to continuously generate images.

    7. 获取传感器的类型和数据

    参考文档 sensors.md

    airsim 目前支持六种类型传感器

    Camera 
    Barometer = 1
    Imu = 2
    Gps = 3
    Magnetometer = 4
    Distance Sensor = 5
    Lidar = 6
    

    7.1 camera数据

    • 首先指定哪个位置的摄像头,可以使用id或者name [“0”, “1”, “2”, “3”, “4”] or [front_center, front_right, front_left, bottom_center and back_center]
    • 指定图像的类型/分辨率以及各种相机参数
      图像的类型指 [场景图/深度图/视差图/语义分割图等等吧]
    // ImageType 0~7
      Scene = 0, 
      DepthPlanner = 1,   //(更类似于双目深度估计结果SGM) all points that are in plan parallel to camera have same depth
      DepthPerspective = 2,//(类似于depth_image_proc 来参生点云)using a projection ray that hits that pixel.
      DepthVis = 3, //用于深度可视化的 从近到远被量化成 从黑到白
      DisparityNormalized = 4,// 视差图,视差被归一化0-1  use (Xl - Xr)/Xmax
      Segmentation = 5, //场景的语义分割图
      SurfaceNormals = 6,
      Infrared = 7 //根据 object ID 映射成 grey scale 0-255
    
    {
      "SettingsVersion": 1.2,
      "CameraDefaults": {
          "CaptureSettings": [
            {
              "ImageType": 0,
              "Width": 256,
              "Height": 144,
              "FOV_Degrees": 90,
              "AutoExposureSpeed": 100,
              "MotionBlurAmount": 0
            }
        ]
      },
      "SimMode": "ComputerVision"
    }
    

    参考image_apis.md
    一个获取双目和深度图的示例

    7.2 Lidar data

    {
        "SeeDocsAt": "https://github.com/Microsoft/AirSim/blob/master/docs/settings_json.md",
        "SettingsVersion": 1.2,
    
        "SimMode": "Multirotor",
    
         "Vehicles": {
    		"Drone1": {
    			"VehicleType": "simpleflight",
    			"AutoCreate": true,
    			"Sensors": {
    			    "LidarSensor1": { 
    					"SensorType": 6,
    					"Enabled" : true,
    					"NumberOfChannels": 16,
    					"RotationsPerSecond": 10,
    					"PointsPerSecond": 100000,
    					"X": 0, "Y": 0, "Z": -1,
    					"Roll": 0, "Pitch": 0, "Yaw" : 0,
    					"VerticalFOVUpper": -15,
    					"VerticalFOVLower": -25,
    					"HorizontalFOVStart": -20,
    					"HorizontalFOVEnd": 20,
    					"DrawDebugPoints": true,
    					"DataFrame": "SensorLocalFrame"
    				},
    				"LidarSensor2": { 
    				   "SensorType": 6,
    					"Enabled" : true,
    					"NumberOfChannels": 4,
    					"RotationsPerSecond": 10,
    					"PointsPerSecond": 10000,
    					"X": 0, "Y": 0, "Z": -1,
    					"Roll": 0, "Pitch": 0, "Yaw" : 0,
    					"VerticalFOVUpper": -15,
    					"VerticalFOVLower": -25,
    					"DrawDebugPoints": true,
    					"DataFrame": "SensorLocalFrame"
    				}
    			}
    		}
        }
    }
    

    参考文档 lidar.md

    Aerial Informatics and Robotics Platform 官方Airsim说明文档

    【1/编译安装】
    Unreal Engine + AirSim/docs/build_linux.md
    [Unreal Engine + AirSim/docs/build_windows.md]

    【2/启动与使用】

    camera_views.md
    通过F1开关camera settings.json设置image mode 机器性能影响帧率

    flight_controller.md
    简要说明 Flight Controller HIL SIL simple_flight PX4

    hello_drone.md 介绍hello drone如何工作的
    Airsim启动时,会启动RPC server, Hello Drone uses the RPC client to connect it.

    multi_vehicle.md :Setting Up Multiple Vehicles

    px4_build.md  
    make posix_sitl_default
    ./build_posix_sitl_default/src/firmware/posix/px4 ./posix-configs/SITL/init/ekf2/iris

    px4_setup.md PX4 Setup for AirSim
    Setting up PX4 Hardware-in-Loop
    Setting up PX4 Software-in-Loop

    px4_sitl.md 详细讲Setting up PX4 Software-in-Loop

    FAQ.md

    log_viewer.md Log Viewer是一个数据调试工具

    【3/深究Airsim】
    design.md & paper

    code_structure.md Airsim代码组织结构
    AirLib包含(Physics engine、Sensor models、Vehicle models、Control library)
    Unreal/Plugins/AirSim Unreal Engine中用于自动驾驶的一个插件
    MavLinkCom  
    Sample Programs 一些例程examples hellocar helloDrone Droneshell

    custom_drone.md AirLib on a Real Drone

    apis.md —— c++ API hello drone/ hello car
    python.md——Python API接口使用
    image_apis.md

    reinforcement_learning.md Reinforcement Learning in AirSim

    Remote Control.md 遥控的使用

    Hardware-In-Loop Simulation)(HIL)

    YouTube有关HIL using Airsim的视频教程
    UE+AirSim& PX4+遥控器 在Windows环境下搭建

    Pixhawk 有关硬件在环仿真的说明


    强化学习demo
    DeepQNeuralNetwork in AirSim using CNTK
    https://github.com/Microsoft/AirSim/blob/master/PythonClient/DQNdrone.py

    Autonomous vehicle navigation based on Deep Reinforcement Learnin using AirSim

    参考文档:
    Building On Linux

    展开全文
  • Unreal Open Day 2017 活动上 Epic Games 开发者支持工程师郭春飚先生为到场的开发者介绍了在 Unreal Engine 4 中 UI 的优化技巧,以下是演讲实录。  大家好,我是 Epic Games 的开发者支持工程师郭春飚,今天给...
  • 1.动画蓝图 包含 状态机 包含 混合空间BlendSpace,即状态机包含在动画蓝图的"动画图表中",而混合空间可用于在状态机中向某(没)一个状态输出最终POSE: 动画蓝图一共包含两个东西,除了上面提到的动画图表,还...
  • Unreal Engine 4 动画系统介绍

    千次阅读 2018-05-10 10:39:45
    Unreal Open Day 2017 活动上 ,Epic Games 资深开发者支持工程师王祢先生为到场的开发者介绍了在 Unreal Engine 4 中动画系统,以下是演讲实录。 大家好!鉴于引擎移动端功能以及 UI 优化都有同事做了介绍,今天我...
  • UNREAL ENGINE 4.12 正式发布!下载地址

    千次阅读 2016-07-09 11:32:46
    UNREAL ENGINE 4.12 正式发布! Alexander Paschall 在 June 1, 2016 | 功能新闻社区 Share on Facebook Share on Twitter Share on Google+ Share on LinkedIn 此版本内含虚幻引擎 4 的数百个更新,以及 ...
  • World Settings World Enable World Composition(bool) { Eable tools for composing a tiled world. Level has to be saved and all sub - levels removed before enabling this option....
  • Unreal Engine 4 —— 反射机制的实现

    千次阅读 2016-05-23 18:46:10
    这篇博客讲解了在UE4中,反射机制的实现。
  • 这篇文章是从微软Web开发系列的一部分。 感谢您支持谁使SitePoint可能的合作伙伴。 团结和Epic的虚幻引擎,流行的中间件工具经常使用的游戏开发商,不限于创建作为一个可执行文件运行编译的应用程序。...
  • 目录 一、概述 1.1 数字人类的概要 1.1.1 数字人类的历史和现状 1.1.2 数字人类的制作流程 1.2 Unreal Engine的数字人类 1.2.1 Unreal Engine数字人的历史 1.2.2 《Meet Mi...
  • Unreal Engine 4 Gameplay框架介绍

    千次阅读 2016-08-30 16:44:50
    1、什么是框架,为什么使用框架 什么是框架 可以说,一个框架是一个可复用的设计构件,它规定了应用的体系结构,阐明了整个设计、协作构件之间的依赖关系、责任分配和控制流程,表现为一组抽象类以及其实例之间协作...
  • 在先前的博客Unreal Engine 4 —— Kajiya-Kay Shading在UE4中的实现 中过了一遍怎么在UE4中实现Kajiya-Kay Shading,但是这个着色效果还是略显简陋。因此这篇博客是基于Kajiya-Kay Shading对这个材质进行了迭代,...
  • Unreal Engine绘制实时CG影像 近年来,对实时CG的关心热度越来越高,但要想弥补与预渲染方式的差异并不是那么容易。这里就有影像业界的先锋进行挑战的MARZA ANIMATION PLANET。本文中通过Demo Movie的制作,来看...
1 2 3 4 5 ... 20
收藏数 803
精华内容 321
关键字:

unrealengine状态机