unreal_unrealcop@gmail - CSDN
unreal 订阅
Unreal是UNREAL ENGINE(虚幻引擎)的简写,由Epic开发,是世界知名授权最广的游戏引擎之一,占有全球商用游戏引擎80%的市场份额。虚幻技术研究中心在上海成立,该中心由GA国际游戏教育与虚幻引擎开发商EPIC的中国子公司EPIC GAMES CHINA联合设立。 展开全文
Unreal是UNREAL ENGINE(虚幻引擎)的简写,由Epic开发,是世界知名授权最广的游戏引擎之一,占有全球商用游戏引擎80%的市场份额。虚幻技术研究中心在上海成立,该中心由GA国际游戏教育与虚幻引擎开发商EPIC的中国子公司EPIC GAMES CHINA联合设立。
信息
原版名称
unreal
开发商
Epic
发行商
EPIC GAMES CHINA
中文名
虚幻
Unreal技术
“Unreal Engine 3”3D引擎采用了最新的即时光迹追踪、HDR光照技术、虚拟位移…等新技术,而且能够每秒钟实时运算两亿个多边形运算,效能是“Unreal Engine”的100倍,而通过NVIDIA的GeForce 6800显示卡与“Unreal Engine 3”3D引擎的搭配,可以实时运算出电影CG等级的画面,效能非常非常恐怖。
收起全文
  • 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 引擎更多关于蓝图的内容。

    展开全文
  • 官方 官方文档 中文版 http://api.unrealengine.com/CHN/ 英文版 https://docs.unrealengine.com/en-us/ 虚幻学院(英文教程,未来可能有汉化) https://academy.unrealengine.com/ 官方B站 ...【吕鑫】【VS20...

    官方

    官方文档

    虚幻学院(英文教程,未来可能有汉化)

    https://academy.unrealengine.com/

    官方B站

    https://space.bilibili.com/138827797/#/

    C++

    • 【侯捷】《C++系统工程师》课程
    • 【吕鑫】【VS2015】C/C++/数据结构教程(推荐有选择的看)http://class.qq.com/class/22124.html
    • 书籍推荐
      《C++ Primer Plus》或《Essential C++》或《C++ Primer》
      《大话数据结构》或《C++数据结构与算法(目前第4版)》
      《Effective C++》
      《More Effective C++》
      《Effective STL》或《STL源码剖析》
      《设计模式》、《游戏编程模式》
      《C++沉思录》
      《深度探索C++对象模型》

    UE4教程

    基础操作

    蓝图编程基础

    蓝图编程简介

    蓝图的类型 注:此处的种类只说直接实现游戏逻辑的蓝图,动画蓝图等暂不谈

    变量类型

    UE4的组件

    【官方文档】

    【猎梦虚幻研究社】

    事件节点

    事件调度器(事件分配器)

    【官方文档】事件调度器的使用

    事件分配器

    • 【官方文档】 UE4的蓝图编程中,所有游戏逻辑的函数都需要通过事件来驱动,而自定义事件可以当做函数来驱动,同时也可以通过事件调度器进行驱动,通过事件调度器,可以让蓝图实现的游戏逻辑更加灵活

    流程控制

    蓝图的函数

    枚举类型

    蓝图的数组

    【官方文档】

    【大神博客】

    蓝图的结构体

    【官方文档】

    【大神博客】 结构体的使用(包含部分关于枚举类型的操作)

    【大神博客】结构体数组及多维数组

    【猎梦虚幻研究社】

    HitResult

    蓝图的容器

    Map

    【官方文档】

    Set

    【官方文档】

    蓝图宏

    【官方文档】

    【大神博客】

    Timeline(时间轴)

    随机流

    数学表达式

    蓝图的面向对象

    构建脚本(蓝图相对于C++的构造函数)

    面向对象特性

    继承
    多态
    • 重写父类函数:在MyBlueprint栏的Function组上方,有一个Override菜单,下拉并选择要重写的函数,派生类中重写的函数会覆盖基类的函数
    • 调用重写后的父类函数:右键重写后的函数节点,选择“Add call to parent function”选项
    抽象
    • 如果了解面向对象思想中的抽象概念,自主按照需求定制蓝图类即可
    封装
    • 蓝图类中的变量的细节面板中的“Instance Editable”如果打对号(或者MyBlueprint栏中让变量对应的眼睛睁开,即暴露蓝图变量),则当蓝图在关卡中被实例化后,可以通过实例的细节面板进行修改相应变量的值
    • 蓝图类中的变量和函数在细节面板中都有Private选项,如果Private打钩,则该变量或函数无法被蓝图类的派生类继承

    蓝图通信 注:蓝图通信可以理解为不同蓝图间的信息传递和共享

    【官方文档】 蓝图通信方法(没有提GetAllActorOfClass)

    【大神博客】 https://www.cnblogs.com/songiveideas/p/learnmore2.html

    1、直接蓝图

    2、事件调度器

    • 参考上方“事件节点”

    3、蓝图投射(CastTo节点)

    4、蓝图接口

    实现蓝图接口 http://api.unrealengine.com/CHN/Engine/Blueprints/UserGuide/Types/Interface/UsingInterfaces/index.html
    使用蓝图接口 http://api.unrealengine.com/CHN/Engine/Blueprints/BP_HowTo/Interfaces/index.html
    蓝图接口迁移 http://api.unrealengine.com/CHN/Engine/Blueprints/UserGuide/BlueprintComms/InterfaceMigration/index.html

    5、GetAllActorOfClass

    • 这种方式并不能算是严格意义上的蓝图通信,其作用是通过该节点直接操作某一个类在关卡中所有的实例对象

    视频教程

    B站

    人人素材

    ABOUTCG在线课堂

    SiKi学院

    我的联系方式:

    QQ:2161044579
    邮箱:mogoostudio@outlook.com
    Github:https://github.com/MogooStudio

    展开全文
  • 虚幻4开发入门

    万人学习 2018-10-22 21:38:03
    UnrealEngine向来以一流效果和难以上手而著称,本课程就是帮助你跨过入门的这道门槛,能够上手掌握这个国际一流的3D引擎。
  • Unreal4游戏实例

    2020-07-31 02:41:04
    虚幻4引擎的一个游戏实例,可以学习蓝图脚本的使用。
  • 2019独角兽企业重金招聘Python工程师标准>>> ...

    碰到游戏开发,一定会要面临在这3个引擎里面的选择。网上一搜,不管中英文,找到的比较文章浮于表面,不触及雷区,根本无法帮助开发者进行选择。

    所以,自己亲自使用了3个引擎后,来帮大家扫雷,少走弯路。

     

    先说结论:Unnreal最方便,最完善,已经成为超越Unity的全平台首选。包括腾讯,网易在内,越来越多的公司选择用unreal开发手游,Unity最近有被大公司逐步淘汰的趋势。

     

    游戏引擎的需求,一般来说有如下几个:平台支持,渲染效果,编辑器易用性,文档完善程度,编程难度,第三方包数量,引擎收费方式。

    我们一个个来看。

     

    1. 平台

    unity和unreal如今都是全平台,包括手机。在手机上,unreal效果还比unity好。

    cryEngine目前还是不支持手机,但从官方论坛看,似乎正在开发对手机的支持。

     

    2. 渲染效果

    Unity从v5.x开始,支持GI(全局光照),到2018,把GI+PBR提升到了标准流程。

     

    从GI的实现方式看,Unity和Unreal采用了一模一样的方式:用非实时的光线追踪渲染器,花长时间,对场景进行GI渲染,并把GI进行bake,保存下来。这样,实时游戏时,不再计算,直接用bake好的。

     

    所以,我们看到的Unity和Unreal的GI效果,其实是光线追踪渲染器,花长时间渲染出来的照片级效果。再有游戏主播说游戏画面多么好的时候,你可以去笑话他了,因为这画面根本就不是实时渲染的。

     

    这种方式,只能用于静态物体,静态光源,也就是,物体和光源不能动。那动态物体怎么办?

    方法是:在bake的时候,把空间每个点,不管有没有物体,每个点的光照信息,也都bake到数据结构中。动态物体,实际上不能反射GI,但是能接收这些保存过的GI,从而达到还算不错的效果。

     

    unity和unreal采用了完全一样的GI实现方式,于是,也就有了完全一样的GI渲染效果。

     

    unity只提供bake的这一种方式,而unreal还提供无需bake的实时GI。但是,unreal的实时GI,效果非常差,绝对不会有人去用,所以不提也罢。

     

    CryEngine则非常猛,它不是bake,而是真的实时GI。它不需要bake,真正做到了所见即所得。它的GI,叫做Voxel-Based GI,和这两年,NVIDIA到处宣传、演示的实时GI,是一样的实现方式,都是基于同样的论文实现的。这在2018年底的今天来看,也是真正的次世代引擎。

     

    视觉效果上,VB GI也有局限,和Baked GI一样,VB GI只计算静态物体,动态物体不反射GI,但接受GI。所以画面效果上,它和Unreal,Unity3D的效果,其实是一模一样的。

     

    VB GI的好处是,它不需要bake,开发者永远不用面对bake后效果不如意,反复调整,反复bake的尴尬局面。这种尴尬,在unity和unreal很常见。

     

    也就是说,VB GI效果其实并没有提升,但是制作效率得到提高。

     

    对玩家来说,VB GI有2个短板:

     - 对电脑性能要求更高。

     - 当镜头从一处,不移动,直接跳到另一处时,光线可能要花约2秒重新计算才能达到准确。现象是,镜头跳过去瞬间,画面全亮,约2秒内逐渐回到正常亮度。

     

    而手机平台上,GI是不用想了,手机性能跟不上。不过,GI还是可以bake到贴图上的。在这种情况下,Unreal的渲染效果,明显比unity好得多,这是众多公司改用unreal开发手机游戏的一个重要原因。

     

     

    3. 编辑器易用性

    Unreal完胜,近乎碾压级别的胜利。最能一眼看出区别的,就是材质系统。

     

    Unreal拥有最直观,最方便,最强大的节点式材质,其材质选项,也完全基于PBR(基于物理的渲染)。不管是设计人员,还是开发者,都能很舒服的上手,很舒服的使用和调整。

     

    Unity则简陋的让人意外,尤其是作为一个热门游戏引擎。整个材质体系都给人感觉是业余的设计。尤其是对于用过3dmax, maya, c4d的3D人士来说,Unity的材质体系,有点看不下去。

     

    功能强大方面,Unreal提供了你能想到的几乎所有功能。而Unity自身,很多功能都是缺失的,但是都能在市场买到,如果你有预算的话。这个部分,可以往后看“第三方包”的环节了解详情。

     

    CryEngine难用的让人吐血。因为它所有的资产/素材,都没有预览图,只有文件名列表。当点选到某个资产时,是有预览窗口的,也就是说,你要一个个去点选,看哪个素材是你要的,而不能从预览图列表一眼看出来。

     

    这种强大和便利方面的差异,体现在3个引擎的各处。

     

    Unreal的编辑器易用性,也是越来越多公司选择unreal做手游,而不选择unity的一个重要原因。

     

    4. 文档完善程度

    unreal和unity的文档完善程度,可以说不分上下,都很完善,不管是跟着向导走的新手,还是老手速查,都没有任何困难。

     

    在新手引导方面,unity做的更好一点。因为unreal一上来,就以大型游戏的需求举例,提供的入门项目,也比unity的入门项目,更复杂一些。

     

    而CryEngine的文档,可以用严重不足来形容。cryEngine做出了次世代的引擎,却因为没有文档,没人会用,公司直接破产了一次,你敢信。幸好亚马逊把它买了,不然它就消失了。

     

    cryEngine的文档存在2个问题:

    (1)文档版本跟不上软件版本:

        cryEngine 在v5开始,编辑器经历推倒重写,现在是v5.5,重写基本完成,文档手册跟上了,但教程还没跟上

        现在,官网教程 和 最新版编辑器对不上。而最新版的视频教程,其实放在官方youtube里,却没放在官网上

        所以,对于不知道的人,会觉得CryEngine上手好难,教程和自己软件上看到的,根本不是一回事

    (2)编程文档极度匮乏:

        cryEngine的大部分文档,都是 编辑器 和 无代码的节点式编程 的。而C#/C++文档,极度匮乏。教你怎么新建脚本,怎么编译之后,直接就是API手册!

        获得常用api的唯一方法,是查看官方提供的游戏模板项目的源码。

     

    5. 编程难度

    unreal只支持C++;unity主用C#;CryEngine从v5之后,C#和C++是同等待遇。

     

    在游戏编程方面,C++其实并不比C#复杂多少,但是,unreal的C++ 代码,却总是给人一种不太易读的感觉。对比后,发现差异在于api和变量命名。Unity的api命名更加简洁,而unreal的,不管是api还是示例代码,变量命名都特别长。

     

    这种过长的命名,以及C++本身复杂性的名声在外,吓住了不少其实应该选择Unreal的用户。

     

    所以,有时候不太理解,unreal为什么不像CryEngine那样,官方支持C#。就算unreal一直在说,它的C++其实并不复杂,但C++险恶的名声,不是Unreal能改变的。

     

    6. 第三方包

    unity压倒性的多,其他两个都不能比。

     

    但unreal编辑器压倒性的强大,做游戏的大部分功能,unreal都想到并提供了。

     

    比如,流式地图加载(玩家边跑边加载地图,从而能无缝体验无限大的地图),unreal本身就提供了,unity本身没有,但市场有卖,价格50美金。

    这样看,或许unreal包不如unity多,但是游戏需要的功能,unreal编辑器一般都提供了,于是反而省了不少钱。

     

    CryEngine包就很少了,不过,官方很舍得给免费素材。一上来,就先给你4G免费素材库。然后,应用商店,再来一堆免费素材库。基本上,制作野外地图,你不再需要另找任何素材。但是,城市场景,它就没多少素材了。

     

    7. 引擎收费

    unity是收软件月费/年费,成本有上限。

    unreal是收5%的游戏利润。

    CryEngine有段时间是靠随意捐款,现在也改成了收5%的游戏利润。

     

    结论:

    CryEngine完全出局,文档不全、且不支持手机,找不到任何使用的理由。

     

    Unreal在强大、性能、编辑器易用等方面,都是超过unity的,平台支持两者一样。越来越多的公司已经在抛弃Unity,换用Unreal。

     

    但是,近期,依然有些公司在比较Unreal和Unity后,毅然选择Unity。主要是产品、系列已经固定的小公司。原因在于:

    • 系列产品已经固定,已经明确知道下一个产品收入也不会高,不舍得被unreal抽成

    • C++的开发人员工资,比C#要贵。

     

    基本上,如今要在unreal和unity做选择的小公司里,有个趋势:越是觉得自己收入少的公司,越是会选择unity。而越是觉得自己收入高的公司,越是会选择unreal。

     

    比如,网络游戏更愿意选择unreal;单机+内购+DLC的游戏,更愿意选择unity。手机和PC平台都是这样。因为,网络游戏运营更久,开发商会预计自己收入更高。

     

    背后的逻辑是,如果开发商挣钱多,被引擎抽5%也能承受;如果开发商本来就挣钱不多,还被抽5%,或许就很难接受了。

     

    转载于:https://my.oschina.net/butaixianran/blog/2990223

    展开全文
  • unreal 的初步认识

    千次阅读 2017-08-17 13:07:54
    游戏结构先说怎么多 ,我们来玩玩引擎把,先来来说一说一个普通虚幻游戏的框架吧(好对照着引擎说) 上图是我在ununreal 官网抓下来的。现在我们来梳理一遍。可以看见 一个游戏(Game)的核心是游戏模式(Game...

    游戏结构

    我们来玩玩引擎吧,先来来说一说一个普通虚幻游戏的框架吧(好对照着引擎说)
    这里写图片描述
    上图是我在ununreal 官网抓下来的。现在我们来梳理一遍。可以看见 一个游戏(Game)的核心是游戏模式(GameMode)和游戏状态(GameState)。他们决定了游戏怎么玩(准确说怎么结束)。之后我们看见他把一个玩家控制器(PlayController) 加入(join)进去了,而这个控制器他控制(possess)着Pawn(不知道怎么翻译,暂且认为旗子吧)。而这个Pawn也可能是有AI控制器控制着(AIController)。再来看看玩家控制器中还有一个包含(Contains)这玩家界面(HUD),输入(input),玩家相机管理器(PlayerCameraManger)。

    引擎的初步认识

    这里写图片描述
    Viewport
    上图红色区域叫做Viewport,他实时显示着我们的游戏世界,一下是操作,请自己试试

    • 鼠标左,右键的拖拽和两个键一起拖拽
    • 像上面那样按住鼠标按键之后我们可以按q,w,e,a,s,d,z,,c建
    • alt 建+鼠标左,右键拖拽
    • 鼠标左键选择好ViewPort中的物体之后按F键会把窗口聚焦到该物体上。

    World Outliner
    绿色的World Outliner ,显示这我们游戏世界(Viewport)中所有的东西,无论是看得见还是看不见。

    Content Browser
    黄色区域Content Browser对应这游戏工程在硬盘中的Content文件夹下的文件结构。file->open project->右键某个工程->show in explorer

    modes
    蓝色modes 窗口,是一些预设的东西,你可以把想要的东西拖拽到ViewPort中,这样World outliner中也会出现该东西。

    Details
    其实右下角还有一个窗口 Details ,当你在在world outliner 或者Viewport中选择了相应的东西之后,Details 就会显示该物件的详细信息,因为我们没有选择任何东西,所以上图时空的。

    tips:
    如果你不小心把上面的窗口给关闭了,可以在左上角菜单栏window中找到所有窗口

    我们都知道unreal engine 是用c++最为开发语言的,而c++虽然很强大,但是因为c++编译语言的特性导致一些开发效率上的问题。所以epic 在开发unreal 的时候给他开发了很多有用的工具可以解放很多生产力。而这些工具放心使用的前提是你要遵守unreal 代码的书写规范。我会在以后陆续归纳其中的规则。

    类命名前缀

    虚幻引擎为您提供在构建过程中生成代码的工具。这些工具的使用必须遵循一些类命名规则。如命名与规则不符,将触发警告或错误。下方的类前缀列表说明了命名的规则。

    派生自 Actor 的类前缀为 A,如 AController。
    派生自 对象 的类前缀为 U,如 UComponent。
    枚举 的前缀为 E,如 EFortificationType。
    接口 类的前缀通常为 I,如 IAbilitySystemInterface。
    模板 类的前缀为 T,如 TArray。
    派生自 SWidget(Slate UI)的类前缀为 S,如 SButton。
    其余类的前缀均为 字母 F ,如 FVector。(为什么以F开头 官方给了链接

    UObject和AActor

    UObject和AActorn的是c++类名,名字遵循之前讲的类命名前缀
    UObject很像java 中的Object类,是Unreal engine 中绝大数类的父类,然而UObject类还不是根类,他”上面“还有 UObjectBaseUtility, UObjectBaseUtility”上面“还有UObjectBase。但是相对于UObjcet的父类来说,UObject是Unreal engine 最小的 ”单位“了,就像细胞内部其实还有东西,但是相对于人体来说我们可以把细胞看成最小的单位。这样你说你可能还是觉得有点抽象,那么我们来看看作为最为最小”单位“UObject能完成什么工作吧。(官方给的)

    • 垃圾回收
    • 引用更新
    • 映象
    • 序列化
    • 默认属性变化自动更新
    • 自动属性初始化
    • 自动编辑器整合
    • 运行时类型信息可用
    • 网络复制

    你可能不知道上面各项具体意思,没关系我也不知道。但是我们可以知道,官方认为上面的功能是Unreal engine 中每一个“东西”都可以有,但是不一定有的,所以就把这些功能写在了UObject类中了。

    现在来看看AActor。字面意思“演员”,但是不要被它迷惑,其实它是能被放入游戏世界场景的所有游戏性对象的基础类(不论能不能看见)。其实官方给了一个更好的解释,“AActor是一堆UActorComponent的容器” 现在你可能不知道什么是UActorComponent,没关系以后你自然会知道。还有一点很重要AActor继承自UObject,所以一个AActor也是一个UObject。

    知道这些之后我们就可以在来玩一玩unreal了。下面其实是一个官方案例,我觉得很不错就拿他来说一说了(其实就是懒)

    首先我们要新建一个AActor,
    在content Browser 中-> Add New->New C++ Class
    这里写图片描述
    然后你会看见Actor,注意不是AActor,为什么会这样呢,因为unreal 在设计时就定了一个小目标,那就是无论你是不是程序员都可以来开发游戏,
    所以写程序的人和设计游戏的人工作环境时相互独立的(visual studio 和unreal engine),程序员在visual studio 写的代码必须遵循之前所说的类命名前缀,之后官方开发的”小“工具就会把这些类的名字前缀在unreal engine中给屏蔽掉,所以设计人员在unreal engine 中看见的都是没有类命名前缀的代码。事实上官方为了设计分离还做了一个叫做blueprint的东西,
    好了回到之前的话题,选择它在选择Next,之后就是起名,我就起一个”FloatingActor“,路径就不要碰了(除非用文件夹分类)。不然会出现意想不到的错误(比如 ,必须在Source目录下才能存储我们创建的类)。然后 Create Class。之后会出现自动启动Visual studio 。
    tips:
    如果你 因为不可抗逆原因打不开的话,你可以unreal工程文件夹下,有一个以你工程名命名.sln结尾的文件,用visual studio 点开它 然后在Games-> Source->工程名 ,也会出现你AActor

    这里写图片描述

    Hot Reloading

    现在来说一说Hot Reloading 。这是个什么东西呢。我们都知道c++是一个需要编译的语言,解决方案分为两个你部分一个Engine,一个Game。Engine就是我们的unreal engine的本体了,也就是我们之前的操作界面,当我们编译运行上面代码时,会把unreal 引擎和我们的游戏代码一起编译运行(不信你可以试试)那么问题就来了,如果每一次我们修改代码都要编译一次。我的天,那么每一次都要关掉之前的界面,在打开编译的界面。于是hot reloading技术就诞生了。在unreal界面仍在运行时直接以普通方式从 Visual Studio 或 Xcode 进行编译。unreal 界面将检测到新编译的 DLL 文件是否修改并即时重载变更!当我们修改完代码我们可以
    这里写图片描述
    然后就出现
    这里写图片描述
    这样我们的unreal 就会自动更新我们编译之后的代码了
    或者
    这里写图片描述
    也可以完成上面的效果

    回到之前,我们创建完floatingActor 我们就会在unreal 的content browser中看见
    这里写图片描述

    unreal property system (reflection)

    接着我们回到visual studio中,先看我们

    //防止多次include 
    #pragma once
    //AActor定义在一下头文件中,看起来像文件夹结果,其实就是
    #include "GameFramework/Actor.h"
    //很重要单独说
    #include "FloatingActor.generated.h"
    //很重要单独说
    UCLASS()
    class STUDY_API AFloatingActor : public AActor
    {
    //很重要单独说
        GENERATED_BODY()
    
    public: 
        // Sets default values for this actor's properties
        AFloatingActor();
    
    protected:
        // Called when the game starts or when spawned
        virtual void BeginPlay() override;
    
    public: 
        // Called every frame
        virtual void Tick(float DeltaTime) override;
    
    
    
    };
    

    学习过c++的人看见这个类,有一种似曾相识的感觉。但是又有一点不一样,因为这是编辑器给我自动生产的代码。很多代码的运转,都有底层的一些”小“工具(程序)来协同运转。而上面有很多代码都是写给这些“小”工具看的。下面我们一一道来。#include "FloatingActor.generated.h"这句预编译语句非常重要。想要解释我们必须知道一个叫做 unreal property system 又叫reflection,这个套系统为程序赋予运行时进行自我检查的能力。很像java 中的反射机制。翻译成大白话就是当我们的游戏程序跑起来的时候,让unreal知道类中都写了什么。当知道程序中写了什么之后。这写信息就可以被用于诸如 编辑器中的细节面板、序列化、垃圾回收、网络复制、以及蓝图与C++交互等功能。是不是很强大。上面你看见的宏 UCLASS(),GENERATED_BODY(),这些宏标记了需要反射的东信息,当我们编译上述源代码时,UnrealBuildTool工具就会调用UnrealHeaderTool工具,UnrealHeaderTool工具会生成一些代码,~.generated.h,~.generated.cpp就是其生成的代码,其中包含了实现反射的详细代码。在C++定义内部它还包含一个GENERATED_UCLASS_BODY()的宏。GENERATED_UCLASS_BODY() / GENERATED_USTRUCT_BODY()在需要反射的类或者结构体里面是必要的,因为它们会加入额外的函数和typedef到类的内部。这方面的内容有很多我暂时也不懂,不想因为这个打乱学习接着只能不求甚解了,以后遇到会接着说。
    参考:
    https://www.unrealengine.com/blog/unreal-property-system-reflection
    翻译:
    http://www.cnblogs.com/ghl_carmack/p/5698438.html

    BeginPlay(),Tick(float DeltaTime)

    可以看见自动生成的代码覆盖了两个方法,BeginPlay()是一个事件,将告知您 Actor 已以可操作状态进入游戏中。现在便适合开始类的游戏性逻辑。Tick() 每帧调用一次,参数对应的时间量为自上次调用传入的实际运算时间。在此可创建反复逻辑。

    现在我们来看看源代码

    // Fill out your copyright notice in the Description page of Project Settings.
    
    #include "Study.h"
    #include "FloatingActor.h"
    
    
    // Sets default values
    AFloatingActor::AFloatingActor()
    {
        // Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
        PrimaryActorTick.bCanEverTick = true;
    
    }
    
    // Called when the game starts or when spawned
    void AFloatingActor::BeginPlay()
    {
        Super::BeginPlay();
    
    }
    
    // Called every frame
    void AFloatingActor::Tick(float DeltaTime)
    {
        Super::Tick(DeltaTime);
    
    }
    

    对于以项目名命名的头文件Study.h大家可以先忽略,如果像了解可以参考下面链接
    参考
    http://www.cnblogs.com/wellbye/p/5837108.html

    这个类只有一个可以说的PrimaryActorTick.bCanEverTick = true;。设置这个参数之后,就会不间断调用Tick函数,如不需要此功能,最好将其移除(设置为false),以节约少量性能开销。如要移除此功能,必须将构建函数中说明 tick 应该发生的代码行删除。

    AActor在世界的表现

    现在我们会到unreal中,把我们创建FloatingActor拖到Viewport中
    这里写图片描述
    可以看见右边的world outliner中已经有我们的Actor,但是你在ViewPort中我们什么也看不见啊。先别急,我之前说过AActor是能被放入游戏世界场景的所有游戏性对象的基础类。但是还有一个更好的解释,**“一堆component的容器”现在就是你理解这句话的意思的最好时候,现在请安下面图片进行操作

    这里写图片描述

    这里写图片描述

    这里写图片描述

    这里写图片描述

    现在来你应该知道了,AActor派生的类其实就是一个容器,而UComponent派生的类就是真正的功能模块,对于component以后会说,现在有一个了解就可以了。

    现在我们我们回到Visual studio ,在floatingActor.h中加入下代码

    ....
        float RunningTime;
    ....

    在floatingActor.cpp加入下面代码

    ...
    void AFloatingActor::Tick(float DeltaTime)
    {
            Super::Tick(DeltaTime);
    
            FVector NewLocation = GetActorLocation();
            float DeltaHeight = (FMath::Sin(RunningTime + DeltaTime) - FMath::Sin(RunningTime));
            NewLocation.Z += DeltaHeight * 20.0f;      //把高度以20的系数进行缩放
            RunningTime += DeltaTime;
            SetActorLocation(NewLocation);
    
    }
    ...

    然后像上面热重载章节所说的那样选择一种方法 来编译。之后点击ViewPort上面的Play 按钮浏览一下画面

    这里写图片描述

    Tips:
    shift+1或esc来退出

    展开全文
  • 官方 官方文档 ...中文版 http://api.unrealengine.com/CHN/ 英文版 https://docs.unrealengine.com/en-us/ 虚幻学院(英文教程,未来可能有汉化) https://academy.unrealengine.com/ 官方B站 ...
  • 刚入职新工作一个多月,目前不算太忙,晚上在家浪费时间心里难安。介于本人热爱游戏,最近闲来无事自学虚幻4引擎,若能坚持下去,希望有朝一日可以自己做出一款游戏(想吃屁)。 今天是第一篇,从安装、启动到第一...
  • 上一篇《浅谈Virtual Texture》主要是对理论知识的介绍,本篇开始对Unreal Virtual Texture的源码做一个导读。 内容包括Virtual Texture的流程和一些技术实现细节,默认你已经对Virtual Texture有一定的认识,如对...
  • Unity3D和Unreal Engine 4对比(转自知乎)

    万次阅读 2018-03-02 14:06:18
    作者:谭草头乙链接:...什么是游戏引擎,什么是虚幻引擎(Unreal Engin 4)?游戏引擎是由多个子系统共同构成的复杂系统,它几乎涵盖了游戏开发过程中的所有重要环节,是游戏开发的流程核心。 UE(Unreal...
  • I’m thrilled that he has taken the time to bring all his knowledge and experience in working with Unreal Engine and Virtual Reality to the Unreal? Engine VR Cookbook…. Mitch is uniquely qualified ...
  • linux 下编译Unreal Engine

    千次阅读 2019-01-01 22:10:48
    近日想学习unreal引擎,去官网看的时候,发现只有windows和mac的,而博主用的linux。不过这倒不存在不过很早就听说unreal4已经开放了源码了,不过不知为何,博主去看的时候,unreal的官方github里只有两个项目,难道...
  • If you are building any type of content in Unreal Engine and looking forward to getting the most epic render quality over the best performance, then this book is for you. In this book, you'll find a ...
  • Unreal开发HoloLens2内容

    2020-07-30 14:35:05
    Unreal Engine 4 开发 HoloLens2 入门 开发环境 最新版Win10家庭版,如果要用模拟器开发的话必须使用Win10开发版 Visual Studio 2019 Unreal 4.25.3 开发的前置条件 Unreal 安装选项中勾选HoloLens平台 开启如下...
  • Unreal4 学习资源合集

    2020-06-14 07:40:19
    Unreal4 学习资源合集 https://zhuanlan.zhihu.com/p/23712250?refer=VR2AR Unreal4 在国内资料还不是很多。列举一些资料供大家查阅学习。 Epic 官方有一个完全中文的文档: Unreal4 官方中文文档 基本大多数都...
  • 2018 Unreal Open Day参会总结

    千次阅读 2018-05-26 11:59:21
    今年是第二次参加UnrealOpenDay活动,收获颇丰,也认识了很多业界大咖。这里稍微详细点的总结一下会议内容和参会心得。 首先是行程: 会议9点签到,9:45正式开始。地点和去年一样还是在宝华万豪酒店,位于上海马戏...
  • Unreal Engine 4的认识还只是在第八周开始,虽然一开学的时候就已经下载了,但是真正的去使用和了解还只是在Unreal 4老师上课的这一周开始。 接下来可能会很久吧,也可能只是这一年,会用CSDN记录我的Unreal ...
  • 随着游戏内容的日趋精品化和重度化,Unreal引擎逐渐走进国内开发商的视野并被使用,然而其高门槛的操作使用和项目本身的重度性也使得优化工作愈发复杂艰难。作为性能优化的服务商,UWA测评今天正式支持了Unreal 引擎...
  • Unreal Open Day 2017 参会总结与心得

    千次阅读 2018-03-03 12:47:07
    2017.04.24,一年一度的Unreal Open Day在上海宝力豪酒店如期举行,确实来了很多大咖。这次我很侥幸的从腾讯GAD的活动中获取到了一张免费门票,(活动链接:http://gad.qq.com/content/wendetail/7194642 不知道以后...
  • Unreal Engine——碰撞系统 在游戏的开发之中,玩家和场景的交互,有一点就是碰撞,这里讲解最基础的碰撞 一、碰撞的删除与添加 游戏会使用到许多的模型,有的时候,有的模型不想和玩家碰撞就要取消,例如:草。(UE...
1 2 3 4 5 ... 20
收藏数 13,319
精华内容 5,327
关键字:

unreal