unreal 开始的位置设置_unreal 如何调用unreal studio - CSDN
  • 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 光照设置

    2019-05-23 18:00:58
    UE4 中灯光包括:定向光源、点光源、聚光灯和天空光照4种。 在介绍这个几个光源前,先介绍一个共同的属性------可移动性。 每个管卡种的网格,都有这三个属性:静态、固定、可移动。 ...处在的状态不同,渲染的效果...

    UE4 中灯光包括:定向光源、点光源、聚光灯和天空光照4种。

     在介绍这个几个光源前,先介绍一个共同的属性------可移动性。

     每个管卡种的网格,都有这三个属性:静态、固定、可移动。

     

     

    处在的状态不同,渲染的效果也不一样,其中:

    静态:渲染效率最快,在运行时不能移动或以任何形式改变形状/

    固定:在运行时可以改变颜色和亮度,但不能移动、旋转改变影响范围。

    可移动:几乎可以改变光源的任何属性,在运行时效果最好。

    定向光源

    这个光源就是模拟现实生活中的太阳,即模拟从一个无限远的地方源头发出的光照,

    在实际运用过程中,只要记得一点就行了,这个光源只于角度有关,而于位置无关,

    定向光源细节面板: 

     

     

     点光源

    点光源和现实生活中的灯泡工作原理相似,

    其属性面板为: 

     

     attenuation radius:衰减半径,表示在这个值范围之外,光照开始衰减。

     Source length :设置光源长度,即在模拟现实中灯管。

    sourse Radius :设置光源的大小。即灯泡的大小

     

     

     

     再介绍一个重要的工具:IES Light Profiles (光源概述文件)--------他的作用就是使得光照更加真实,就像考虑了灯泡周围的为物理环境一样

     

    这里我们可以添加,UE4自带的文件,查看光照效果 

     聚光灯

    它提供了一个锥形的光源,主要由两部分组成:内锥和外锥角组成,就是最中央的部分最亮,向外亮度逐渐减少,其工作原理和手电筒相似。

    其细节面板: 

     Inner Cone angle (内锥角):设置内锥角的大小

    OuterConeangle(外锥角):设置外锥角的大小

     I

    天空光源

     

    其细节面板: 

    source type :

    SLS Captured Scene :表示以远处的场景作为光源的来源,

    SlS Specified Cubemap :表示使用特定的Cubemap,作为光源

    Intensity:发射光子的总能量。

     

    展开全文
  • 今年是第二次参加UnrealOpenDay活动,收获颇丰,也认识了很多业界大咖。这里稍微详细点的总结一下会议内容和参会心得。 首先是行程: 会议9点签到,9:45正式开始。地点和去年一样还是在宝华万豪酒店,位于上海马戏...

    今年是第二次参加UnrealOpenDay活动,收获颇丰,也认识了很多业界大咖。这里稍微详细点的总结一下会议内容和参会心得。


    首先是行程:

    会议9点签到,9:45正式开始。地点和去年一样还是在宝华万豪酒店,位于上海马戏城地铁站旁边,从火车站到酒店也就半个多小时,很方便。

    今年可能是因为会议持续两天,会场变大等原因增加了活动预算,所以既没有衣服也没有午餐(附近有一个商场)。

    23号当天有三个会场,24号有两个会场,官方会在会议前几天公布会议流程,由于三个会场同时进行,所以需要自己规划好时间。会议内容如下图,
    这里写图片描述

    有几点需要注意一下

    1. 中午时间非常紧,吃饭要排队的,建议听完后立刻就去吃饭
    2. 有一些演讲可能超时,也许会影响到你的计划
    3. 有一些内容对你可能没什么用,另一些看起来没用还可能有意外收获,该换就换

    另外会场有一些展台可以去体验游戏(我试玩了失落之魂,感觉还可以),和去年相比最大的变化就是VR游戏基本上都没了。

    会议内容总结:这个是我事先规划好的参会行程,稍微有一点调整,下面就我听到的内容简单给大家总结一下。
    这里写图片描述


    2018.5.23

    9:45-10:45 会场A OpenSpeech&KeyNote

    全球虚幻开发者截止2018年3月已经到达500万,最近一年虚幻制作出了很多火爆的游戏如堡垒之夜,绝地求生,绝地求生手游等,优秀的独立游戏也越来越多。堡垒之夜很快要实现全平台发布,任何平台的玩家都可以匹配到一起进行游戏,同时Epic会把优化内容添加到引擎里面。除了在游戏领域,UE还广泛应用在汽车展示,建筑行业,航空航天,影视制作(武庚纪,斗罗大陆等动漫),AR(苹果2017发布会展示的The Machines),真实人物模拟渲染(Siren)等。

    10:45-11:30 会场B 腾讯Wetest

    Wetest是腾讯推出的一个一站式测试平台,提供了包括可视化的性能监测,数据分析,自动采集日志,准确定位单个用户操作信息,机器人模拟运行等功能,个人觉得这些东西对游戏的上线与测试确实非常有用,特别是各个流程都不完善的中小团队,不过价格与实际的使用体验还要亲自测试才行。
    这里写图片描述
    这里写图片描述
    这里写图片描述
    11:30-12:00 会场B 影视制作圆桌会议

    13:00-13:30 会场A 加勒比海盗手游海洋系统

    主要是讲了海洋系统需要考虑的一些方面,并给出了实现与优化策略。这里挑几点说一下,

    1.波浪动画 为了避免游戏进行中大量的实时计算,他采用了FFT算法提前将水体的运动轨迹数据计算并保存到贴图里面,然后在运行时读取这些数据,这种方式稍微增加了内存开销。同时参考了刺客信条里面海洋的实现方式对具体细节做了一些优化
    这里写图片描述
    这里写图片描述
    2.海洋的光照模型采用GGX舍弃Phong

    3.材质方面采用平面反射,细节法线与次表面散射提升画面表现。泡沫使用的是预生成的蒙版图。浅海水底的焦散方式采用Epic GDC2017的Talk:Content-Driven Multipass Rendering inUE4,也是事先计算好数据存储到贴图里面
    这里写图片描述
    这里写图片描述
    4.船体与水面交互 在船的周围放上几个球形检测体,通过计算球形体与水面的位置等执行交互逻辑

    5.船尾的波纹如何实现 为了表现乘风破浪的效果,他利用粒子系统生成相应的高度图来产生海面的交互起伏

    13:30-14:00 会场C PSVR

    去的晚了,只听到一部分,他通过修改RHI的API利用PS4专有的硬件加速手段开启了PS4上面的MSAA,提升了清晰度。另外,在渲染上将画面分成了几个区域分别处理,提升了帧率。
    这里写图片描述

    14:00-15:30 会场A 堡垒之夜性能优化

    主要讲了手游上如何在尽量不影响玩家体验的情况下优化系统,包括声音优化,物理优化,渲染优化,材质大小,资源加载优化等。Epic测试了不同机型的各方面的测试数据,提出来手游优化很艰辛(特别是安卓)。。。

    • 增加了针对手游(各个平台)更为细致的scalability层级划分,可以在不同的平台上更细致的调整特性。简单来说就是在不行的机器上能砍掉就砍掉,砍不掉就想办法砍掉一部分(稍微皮一下)
    • IOS上,新增了三个Task线程来处理并行动画,粒子模拟,物理,贴图的流式加载,场景查询,渲染裁剪等,另外,还增加了一个Audio线程。对于安卓机型,新增了RHI线程
    • 通过距离,Occlusion裁剪,层级Lod,HLOD,动态阴影等方式减少DrawCall
    • 地形上Lod也做了优化,使远近的LOD面数差距更明显,性能提升效果更明显

    这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述
    15:35-16:05 会场B Incredibuild分布式编译

    Incredibuild可以大大提高编译,烘焙,shader的速度,看数据确实很诱人。根据服务器数量,配置等按照时间收费。好像是8台8核机器,一年1000美元?
    这里写图片描述

    16:05-16:15 会场C 本地化

    我原来以为是分析引擎本地化原理与流程,其实就是简单介绍UE官方文档方面的本地化流程。

    16:15-16:45 会场C VR方舟公园性能优化

    • 粒子优化 不在发射器里面加光照组件,少用GPU粒子,
    • 使用Unlit着色模型,如果使用DefaultLit着色模型,LightMode选用VolumetricPerVertex NonDirection shader 使用Mask材质尽量不用透明材质
    • 设置合适的裁剪距离与LOD,使用Precomputed
    • Visibility来减少硬件遮挡查询的消耗,采用渲染实例化工具来降低渲染批次(可以自己写实例化工具处理植被以外的对象) 光照尽量使用静态光源,其次是半动态光源,最后再考虑动态光源。动态物件IndirectLightCacheQuality设置为ILCQVolume。不要勾选摆动植被CastDynamicShadow选项
    • 阴影 半动态光源下动态物件均使用Per-ObjectShadow绘制阴影会导致动态物件过多的时候半动态光源比动态光源消耗还大,所以尽量减少动态物件的使用。渲染阴影选用LOD级别较低的渲染
    • 后处理 静态、半动态光源,推荐使用的后处理有Distortion,TemporalAA,Tonemapper,Bloom。动态光照相比前面加一个SSAO。
    • 采用NVIDIA的VRWorks优化VR 但VRWorks不支持胶囊体阴影,距离场AO,还有场景边缘不清晰的问题。例外,MS与SPS只适用于Pascal架构的显卡
    • 前向渲染+TAA的效果比较好 Draw线程优化
    • 使用PrecomputedVisibility,减少视频播放,减少参与计算动态物件的光源数量 使用VRworks-Single Pass Stereo合并左右眼渲染重复计算的部分
    • 碰撞 不需要事件的对象不要勾选GenerateOverlapevents,减少物理资产碰撞体数量,只需要射线检测的不需要完全开启CollisonEnabled
    • 动画 更新模式选择OnlyTickPoseWhenRendered

    这里写图片描述
    这里写图片描述

    16:45-17:05 会场B Unreal大地形加载

    总结来说就是讲解如何把Unity里面的数据移植到Unreal并做了一下性能对比,发现Unreal性能基本上完胜Unity(吃惊)

    之前他们在网上有一篇文章,很详细,参考链接:https://zhuanlan.zhihu.com/p/36731312

    17:15-18:05 会场B 跨平台VR

    18:05-18:35 会场B 区块链与游戏

    简单讲解了区块链的概念与基本原理,展望了一下区块链在游戏行业的未来。感觉大家热情不是很高,对区块链的认识还是有一定的限制吧


    2018.5.24

    09:45-10:35 会场B 编辑器扩展

    讲解非常全面,从菜单栏到工具栏再到配置选项,蓝图节点。基本上你在编辑器上的所有操作都涉及到了,不过内容太多导致很多细节不够,API名称太多也记不过来(不过听说有PPT)。

    10:35-11:05 会场B 救赎之路

    主美:展示了大量的作品与草稿。总结一句,创作要靠感觉~
    制作人:项目立项遇到了游戏体验差时间与资金不足的问题,然后及时中断调整
    主程:手动计算锁链动画位置解决原生模拟效果不好的问题,通过CustomMask实现传送门场景的效果。
    这里写图片描述
    这里写图片描述
    11:05-11:35 会场A 如何渲染出一个真实的人物角色

    Epic的TA ,ZakParrish(非常活泼开朗的一位技美,很羡慕这样的大佬)分享了像Siren这样一个超级真实的人物是怎样用虚幻引擎渲染出来的。(然而水平有限,并没有都跟上)

    • 基本的面部数据是通过扫描得来的 头部4万个左右的三角形
    • 头发使用xgen工具创建。分为四个部分,包括基本的轮廓模型可以飘动的细节模型等,有三张UV贴图。对于真实的角色,面部的模型走向,发型走向是非常重要的
    • 调整了牙齿与嘴唇的边界过度问题,眼部增加了虹膜阴影 使用cavitymaps增加面部细节。
    • 绒毛采用半透明材质,根部是颜色深,头部发亮

    这里写图片描述
    这里写图片描述

    11:35-12:05 会场A 失落之魂动作表现

    • 刀光 第一种是AnimaTrail粒子(再通过材质系统控制Alpha通道),第二种是Faketrail 打击效果一个简单的击中效果就由刀光,血雾,碎片等多个特效组成,很多情况要配置后处理实现(Blur)
    • 残影 使用网上的插件GhostMesh,基本原理是在玩家移动的轨迹上创建一个新的Mesh
    • 辅助效果 钝帧Dilation,手柄力反馈

    13:00-14:00 会场A 构建高端表现效果的粒子

    现场讲解并操作了一个激光枪打到地面上实现灼烧以及周围冷却凝固的效果。

    14:00-15:10 会场A 手游大世界(刺激战场)

    通过流关卡切换高空与落地时不同的植被模型

    将地形数据拆成单独的Level加载,通过地形Lod系数等降低精度,采用镂空简单模型覆盖在真实地形外围来减少DrawCall
    这里写图片描述

    不同的level存放不同的lod,根据配置距离加载不同的level进而加载不同的模型Lod

    采用离线烘焙减少内存与包体,提升工作效率

    阴影优化 包括FarFadeOut,层级间软过度,HardWarePCF提升采样性能,CSM阴影缓存,MoreCSMStable,指令优化,不同材质采样书目调整

    抗锯齿 MSAA+AlphaToCoverage

    带宽优化 HDR rendertarget选择 RGBA16F或R11G11B10f,IOS下剔除了Stencil
    这里写图片描述
    这里写图片描述
    15:10-15:40 会场B 光明记忆

    分享了蓝图下Gameplay框架与相关技能的实现

    15:40-16:10 会场B 在线开放世界

    主要讲述了大世界场景地图的工作流是什么样的
    这里写图片描述

    16:10-16:40 会场B 探索VR的无限可能

    16:40-18:10 会场A 新的粒子系统Niagara

    听到了一点Maya与UE的livelink,可以实现Maya到UE的单向数据传输。

    4.20版本会新增粒子系统Niagara,相比Cascade粒子系统多了时间轴编辑与蓝图功能,可以在Niagara内部调整粒子的运动速度与方向等,总结来说就是可以在不用写代码的情况下实现更多酷炫的粒子效果
    这里写图片描述


    会议相比去年的另一个进步就是三个会场都有全程的视频录制,官方说之后会放出来。如果有的话,我这里会第一时间更新视频链接。

    最后,这次行程最高兴的就是认识了很多牛人,非常感谢知乎 @大钊 组织的聚会!

    展开全文
  • 上一篇《浅谈Virtual Texture》主要是对理论知识的介绍,本篇开始Unreal Virtual Texture的源码做一个导读。 内容包括Virtual Texture的流程和一些技术实现细节,默认你已经对Virtual Texture有一定的认识,如对...

    上一篇《浅谈Virtual Texture》主要是对理论知识的介绍,本篇开始对Unreal Virtual Texture的源码做一个导读。

    内容包括Virtual Texture的流程和一些技术实现细节,默认你已经对Virtual Texture有一定的认识,如对技术概念有疑惑,可以先看上篇。本文会先从整体出发,介绍Unreal实现的大概内容和流程,以及结构关系,然后再深入到细节,尽量还原Unreal的设计。

    一、Unreal 实现的内容

    首先,先给Unreal的Virtual Texture的实现给一个大体上的介绍。Unreal是基于Software Virtual Texture,并未涉及Hardware的内容,实现了Procedural Virtual Texture,Unreal叫Runtime Virtual Texture,并未实现Adaptive Procedural Texture。地址映射使用了indirection texture的page和MIP level的映射方式。Texture Filtering方面实现了Bi-linear Filtering、Anisotropic Filtering和Tri-linear Filtering,Bi-linear Filtering是基于border来实现的,Tri-linear Filtering则是利用TAA的一个实现,这个实现是其特有的,Anisotropic Filtering则是自己计算AnisoBias来实现的。

    Feedback Rendering是跟GBuffer同时的,也就是结果会延迟一帧,分辨率可以用VIRTUAL_TEXTURE_FEEDBACK_FACTOR来控制,是UAV来操作的。Transcode方面使用的是Crunch,也就是压缩方式是DXT,由于Unreal的磁盘上的纹理是uasset,所以没有其他通用image格式的压缩了。


    二、Unreal Virtual Texture流程

    Unreal Virtual Texture的基本流程跟Software Virtual Texture是一致的,主要的逻辑在FVirtualTextureSystem的Update函数里。

    可以看到,FeedBackAnalysisTask和GatherRequestsTask是多线程做的。虽然是多线程,这边是同步等待执行的,因为后面的执行依赖前面的结果。在这些流程中,SubmitRequests这个流程会比较复杂,我从中再抽取出与Physical Texture加载相关的流程,Steaming Virtual Texture的加载过程:

     

    可以看到,这里包含了Streaming Load的部分和Transcode的部分。Runtime Virtual Texture就比较简单了,因为是实时生成的:

    包含了渲染Mesh,压缩和重新编码纹理的过程。这里纠正官方视频中的一个错误,视频中说Runtime Virtual Texture只会渲染一次,这是不对的,它会实时渲染不存在Physical Texture中的Tile,为什么移动物体不会使得Physical Texture更新,是因为Tile已经存在于Physical Texture上了,只有当当前的Tile被替换出去,才会发生再次渲染更新Tile。


    三、Unreal Virtual Texture 结构

    Unreal设计了一个非常漂亮的结构,使得整个系统能够优雅的合作运行。

    从数据结构方面主要分为两大块,就是上图的左上方部分和右上方部分。FVirtualTextureSpace用来管理Virtual Texture部分,FVirtualTexturePhysicalSpace用来管理Physical Texture部分,中间的FVirtualTextureSystem则负责具体的行为逻辑,串联起两边。左下角的Producer部分是负责制造Physical Texture Tiles的,右下角的IVirtualTextureFinalizer部分则是负责将Tiles “拷贝”到Physical Texture的确定位置上。

    如果只是想大概了解一下Unreal的实现,到这里就可以结束了,后文会是比较琐碎的实现细节。


    四、FeedBack Rendering

    Unreal的FeedBack Rendering的实现是和BasePass渲染同时的,使用一个RWBuffer来实现不同分辨率的输出,VIRTUAL_TEXTURE_FEEDBACK_FACTOR参数来调整分辨率。具体代码在VirtualTextureCommon.ush的FinalizeVirtualTextureFeedback中,这个在每个需要生成Feedback buffer的pixel shader的末尾调用。FinalizeVirtualTextureFeedback需要一个FVirtualTextureFeedbackParams.Request,这个需要找一个Material,然后看它生成的HLSL,会找到是如下方法得到的:

    VTPageTableResult Local1 = TextureLoadVirtualPageTableBias(VIRTUALTEXTURE_PAGETABLE_0, VTPageTableUniform_Unpack(Material.VTPackedPageTableUniform[0*2], Material.VTPackedPageTableUniform[0*2+1]), Parameters.SvPosition.xy, Parameters.VirtualTextureFeedback, 0 + LIGHTMAP_VT_ENABLED, Parameters.TexCoords[0].xy, VTADDRESSMODE_WRAP, VTADDRESSMODE_WRAP, View.MaterialTextureMipBias);
    

    数据编码是放在了一个32bit uint里了,|4bit pageid|4bit level|12bit pagex|12bit pagey|。对于半透明物体和单像素多Page的情况,是使用了一个跟pixelpos、depth、FrameNumber相关的随机值来解决的:

    const float AlphaThreshold = frac( PseudoRandom(PixelPos) + // Random  value in 0-1 on 128 x 128 pixel grid
    
    SvPosition.w + // Add in depth so we pick different thresholds on different depths 
    
    (FrameNumber / (float)VIRTUAL_TEXTURE_FEEDBACK_FACTOR) // Add in framenumber for extra jitter so the pseudorandom pattern changes over time
    
    );
    

    上一篇文章提到过,这种方案理论会出现同一个Pixel引起反复加载的情况。


    五、FVirtualTextureSpace

    FVirtualTextureSpace代表的是相同FVTSpaceDescription的一个空间,这个空间包括多个FAllocatedVirtualTexture,然后需要提出一个Unreal的新概念——Layer。一个FVirtualTextureSpace下有多层Layer,Layer之间是同UV的,这样可以减少同UV的VT的地址转换。FVirtualTextureSpace还包括VirtualTexture和PageTable相关内容,以及处理PageTable的更新。

    5.1 Virtual Texture Allocating

    Unreal的Virtual Texture实现不是像传统的VT,一个逻辑VT对应上一个已经存在的大的Texture,而是会将几个Texture合并到一个Virtual Texture上,这里的地址的分配由一个Allocator来实现。这个Allocator的算法有点像Buddy Allocator,只不过是二维的。

    首先,先将Virtual Texture的大小Ceil到二次幂的正方形大小,然后在Allocator中申请。假如大小不够了,会调用Grow方法,在小于阈值的情况下增倍总大小;如果够,会尝试逐渐分割大小,直到大小合适,下面是一个比较简单的例子:

     

    5.2 FTexturePageMap

    这个类是负责一个Layer的Page Table,包括Page Table的数据结构和Map Page的操作。Virtual Address在代码里面为vAddress,它的编码方式是Morton Order。

    这个编码有很多好处,在Update Page Table中,需要有一个很重要的操作,就是当我们得到需要更新的Tile后,我们需要不仅仅更新这个Tile,还需要更新对应的低MIP Level对应的位置的Tile,这样可以减少Texture Poping。这里就需要快速找到与当前更新Tile的所谓子Tiles,它维护了一个叫SortedKeys的数据,这里面的key是编码过后的vAddress和Mip。

    用上面的图编码(实际是U32的),如果要找到与vAddress为000001,Mip为1的子Tiles。首先对vAddress操作一下,000001 << (vDimensions * Mip) = 000100。这里vDimensions这里我们默认为2,因为Unreal是支持体纹理的,所以有可能为3。然后再计算一个Mask,~0u << (vDimensions * vLogSize) = 00100,就可以发现使用Mask对左上第二个Quad操作,地址就等于vAddress了,这样就找到了它的所有子Tile。

    其实,原理上说,Morton Order可以快速构建四叉树,而我们的MipMap其实结构上就是一个四叉树。这里的相关代码在,ExpandPageTableUpdateMasked和ExpandPageTableUpdatePainters上,这两个方法都是用来做MipMap的Tiles的更新的。

    两者的区别是,前者会找出原本低Mip的需要更新的Tile,并剔除掉;后者则是用painters算法来保证正确性,也就是每个Tile可能会被绘制多次,用户可以根据情况选择,一个GPU友好,一个CPU友好。

    5.3 PageMap Update

    通过Feedback Analysis我们得到需要Update的Tile,然后再通过上面说到的Expand函数补充好MipMap的Page,根据上面的结果就可以开始Update PageMap了。Unreal的做法为,为每个Layer,每个MipMap,Draw需要更新的Page的数量的Instance。然后在VS中改Pixel Position和计算Page的值,具体代码在FVirtualTextureSpace的ApplyUpdates中,Shader在PageTableUpdate.usf里。


    六、FVirtualTexturePhysicalSpace

    FVirtualTexturePhysicalSpace主要内容是Physical Texture的GPU资源和FTexturePagePool。本身的逻辑比较少,多数逻辑在FTexturePagePool中。

    6.1 FTexturePagePool

    这个类主要和FTexturePageMap一起负责Mapping的相关逻辑。它的主体是Physical Texture,主要负责Physical Texture Tiles的分配,Physical Address在代码里为pAddress,它的编码方式是X优先的展开到一维。它里面有几个数据结构,其中之一是个二叉堆,这个是它的核心数据结构,是用来实现Physical Textured的Tils的LRU算法的。所有的Tiles的地址会在这个二叉堆中,当申请分配的时候,会得到堆顶的地址,每次操作也会更新这个二叉堆,保证堆顶是最旧被使用到的。还有一个FPageEntry的数组,这是以pAddress为Index,存储所有Physical Texture Tiles,对应还有一个方便用FPageEntry找pAddress的HashTable。还有一个FPageMapping的数组,前面的NumPages的内容索引后面的列表,除了最后一个是存了FreeList,其他存的是每个pAddress的Mapping信息。

    6.2 FVirtualTextureProducer

    这个负责对Physical Texture Tiles的制造,一个FVirtualTexturePhysicalSpace对应一个FVirtualTextureProducer,主要的逻辑在IVirtualTexture的接口中,包括两个流程,一个是RequestPageData,这个流程主要是负责Tiles的加载过程。一个是ProducePageData,这个流程主要负责更新需要最终拷贝到Physical Texture的Tiles的列表。

    Runtime VT的实现比较简单,因为它是实时生成的,只是将需要生成哪些Tiles记录下来就可以了。这里再补充一下Stream VT的RequestPageData,除了上文提到过的加载流程。在RequestPageData流程中,有一个会根据平台来做决策的方案,就是会判断是否支持Persistent Mapped Buffers,这个技术可以Map一次,一直保留Map返回的指针,由于Streaming的原因,这个指针确实有一直到加载完才使用的情况。可惜这个在手机和PC平台是不支持的,甚至相关方法在开源的Unreal中是空实现,只有主机版本才有。开源的版本中的实现是申请了一份临时CPU Buffer,先将加载的放到这个临时Buffer中,在后续流程中再将这份内存拷贝到Physical Texture上,这个就是IVirtualTextureFinalizer的工作。

    6.3 IVirtualTextureFinalizer

    这个接口负责,将FVirtualTextureProducer整理好的数据最终拷贝到Physical Texture上。Runtime Virtual Texture的流程上文已经提及,就是那三个Pass。Streaming Virtual Texture的流程用到上面Producer提供的那份临时Buffer。这里由于Physical Texture被设置成了TexCreate_ShaderResource,也就是CPU是不可写的,需要有一个中间Staging Texture,先把Buffer拷贝到这个中间Staging Texture,再从这个Staging Texture拷贝到Physical Texture上。

    6.4 Virtual Texture Filtering

    上文已经提到了,Unreal是支持Bi-linear Filtering、Anisotropic Filtering、Tri-linear Filtering的,如何计算坐标这里就不说了,可以看上篇文章,这里说一下Unreal是如何实现这些Filtering的。Bi-linear Filtering就是用Border来解决的,Anisotropic Filtering的实现是Unreal软计算了Anisotropic的偏移,具体算法在MipLevelAniso2D里,然后通过SampleGrad方法传上dUVdx、dUVdy,让硬件完成Anisotropic Filtering。

    Tri-linear Filtering的实现比较Trick,它是用一个噪声去让Mip Level在一个范围内变化,参数是位置和帧数,这样就会让一个像素的采样值在一定时间范围内是变化的,配合上TAA来实现了Tri-linear Filtering。


    上文所说的一切,还需要配合Unreal的易用而稳定的多线程框架,内存管理机制,Streaming系统等等。我只是简单介绍了一些点,管中窥豹,Unreal对Virtual Texture的实现,需要引擎大量的基底,而在上面又是每行代码的精益求精。读Unreal的代码往往如沐春风,每读一段就感慨他们对技术的执着,以及与他们的差距。

    本文的目的是一个导读性质,如果感兴趣,建议大家自己去看看源码。进行下一步的使用、优化和定制修改。


    感谢李兵的分享,如果您有任何独到的见解或者发现也欢迎联系我们,一起探讨。(QQ群:793972859)

    作者主页:https://www.zhihu.com/people/li-bing-77-8,作者也是U Sparkle活动参与者,UWA欢迎更多开发朋友加入U Sparkle开发者计划,这个舞台有你更精彩!

    展开全文
  • 这里的镜头需要提前设置位置,因为这里创建的摄像机默认是按照透视图中摄像机的位置的。 图片中最下面的方块框选的意思是让创建的摄像机在显示视图中。 这张图片中第一个框中深红色三角是K的帧,...
  • Unreal的GameMode开始

    2017-01-05 18:25:54
    所谓GameMode,顾名思义就是游戏模式,也可以理解为游戏规则。一个游戏可以有任意数量的GameMode,但是在一个时间点,只能有使用一个GameMode。
  • 入门VR游戏开发者在Unreal Engine 4上开始VR设计所需要知道的 游戏开发者 VR2048(vr2048) · 2016-01-12 18:38 首先,不要被标题吓到,这其实是一篇面向游戏开发者的入门科普文章,对于有致于开发...
  • Unreal网络架构

    2017-03-11 16:44:19
    最初的多玩家游戏是双玩家的调制解调器游戏,以DOOM为代表,而现在多玩家游戏已经进化成为大型的、持久的、交互形式更加自由的游戏,如Quake2,Unreal和Ultima Online,共享现实背后的技术已经有了巨大的进步。...
  • Unreal Open Day 2017 活动上 ,Epic Games 资深开发者支持工程师王祢先生为到场的开发者介绍了在 Unreal Engine 4 中动画系统,以下是演讲实录。 大家好!鉴于引擎移动端功能以及 UI 优化都有同事做了介绍,今天我...
  • 本节书摘来异步社区《精通Unreal游戏引擎》...第1步 开始行动精通Unreal游戏引擎亲爱的开发者们,大家好!今天我们来解决Bojan邮件中提到的问题: “我想做一个点击式冒险游戏,以及一些智力逻辑类游戏。可以在您以...
  • 以前玩过unity,所以一些东西理解起来很容易,入门unreal4也很快(当然只指基本关卡操作,其他的还没开始看),写一波笔记记录一下; 介绍 如图; 区域1 放东西的栏目; 可以发现旁边有许多东西: 基本:...
  • 对Unity3D和Unreal Engine 4两套引擎的学习经验总结,以及两者的架构思路的对比。
  • 文章目录1. 开始(其他资料)1.1 其他教程1.2 论文1.3 问题2.... 设置Unreal工程3.1 编译Unreal工程-option1(quick steps):blocks environment3.1.1 前言3.1.2 win10下的编译过程3.2 编译Unreal工程-o...
  • Unreal Engine 4 书籍翻译 Building an RPG with Unreal 三 第3章 探索和战斗 创建角色 接口 PlayerController The Pawn 游戏模式类 Unreal Engine 4 书籍翻译 Building an RPG with Unreal (三)好记性不如...
  • 近日,Epic 公布了他们为次时代游戏准备的 Unreal 5 游戏引擎,以及一份效果惊艳的 Demo。据称,游戏中的每个资源有一百万个绘制三角面,每一帧有超过十亿个绘制三角面。也就是说...
  • 今天先完成一个小的UI界面的设置,通过小项目来了解一下UI到底是什么。 在我自己学的时候发现最重要的一点是英文单词,在这个新的界面中有很多专业的术语,所以一定要懂得这些英文单词的意思才能灵活的应用。 本来...
  • Unreal Engine 4.9 开始 虚幻 4 之旅 本页面的内容: 编辑器 快速词汇查找表 项目文件和文件 从 GameObjects 到 Actors 如何在虚幻 4 中编写代码 在虚幻 4 中编写游戏逻辑代码 常见问题 然后呢? 本指南...
  • Unreal蓝图入门 节点

    2019-12-21 16:49:45
    最近开始摸索Unreal的蓝图基础使用,一些基本的操作大家可以在官方网站中的教程中找到,所以我们直接跳到事件图表上来讲。 首先,Unreal有丰富的注释功能,按住键盘C可以创建出注释区域,在右侧的“细节”面板我们...
  • 想创建自定义曲线,自定义的管道,路径,或者...在上面随便搜个spline unreal都非常多的,因为官方有个示例 我就写个使用说明吧 首先的首先,创建一个actor蓝图吧 然后创建个scene的root节点吧 之后添加一个 ...
1 2 3 4 5 ... 20
收藏数 1,259
精华内容 503
关键字:

unreal 开始的位置设置