2012-06-10 22:29:30 Garuda 阅读数 3672
  • 从这里开始虚幻4-Editor介绍 v4.18

    本课程系列取名英译系列,是录制人员参考国外英文原版经典教程,结合中国人的习惯录制而成。希望能够给大家以帮助。从这里开始虚幻4系列教程,是Unreal的官方发布的入门教学,非常经典,是学习Unreal的佳入口。

    2395 人正在学习 去看看 杨石兴

看了unreal engine4的ElementalTech DemoFeaturesand Development Walkthrough两个视频,效果还是非常赞的。看来epic这几年是下了大力气了。

下面说说ue4的重要特性吧

1.     延迟渲染

Ue4完全抛弃了预计算技术,取而代之的是全实时的延迟渲染。这个应该是ue4在渲染上最大的改变。随之而来的将会是ue4比ue3对硬件的要求会有大幅的提高。(硬件厂商又高兴了)

2.    实时GI。

当年CryTech的LPV一出来立刻就成为了业内的热门话题。这回epic终于也搞了个real-time GI出来,而且更进了一步。这个所谓的SVOGI – Sparse Voxel Octree Global Illumination相比LPV最明显的优势是精度更高,能够实现high-frequency的间接光照。关于这项技术更详细的信息可以参考nvidia的paper


地面的高光反射出塑像的颜色


Ue4间接光照

3.    软粒子的光照


软粒子接受直接和间接光照


软粒子投射阴影

4.    GPU粒子

GPU粒子虽然不是特别特别新鲜的技术,但是集成到游戏引擎中我还是第一次见到。特别是ue4的实现中,通过向量场与GPU粒子交互的效果还是蛮酷的。


Ue4 GPU粒子

5.    高度可破坏的场景

这是APEX的主打技术。


可破坏的场景

6.    全新的Kismet

据说unreal engine4完全移除了动态脚本(出于效率的原因?),取而代之的是纯C++脚本系统,并且完全是实时编译,热更新。


Ue4新的可视化编程系统


实时编译和热更新

 

总之,unreal engine4还是让人眼前一亮的。期待尽快能有用ue4开发的游戏上市,到时候我就换块GTX680

2018-04-23 00:38:06 qq_16756235 阅读数 2727
  • 从这里开始虚幻4-Editor介绍 v4.18

    本课程系列取名英译系列,是录制人员参考国外英文原版经典教程,结合中国人的习惯录制而成。希望能够给大家以帮助。从这里开始虚幻4系列教程,是Unreal的官方发布的入门教学,非常经典,是学习Unreal的佳入口。

    2395 人正在学习 去看看 杨石兴

    因为虚幻的架构,我们美术做一个效果只能使用材质编辑器。这让我很不舒服,稍微想做点特别点的效果就没办法了。我又是天天在公司用自研引擎的人,这种限制让人很不舒服。所以我开始修改了虚幻的shadingmode之类的。但是感觉自己还是不满足,想调个多pass虚幻都不让我做,所以我打算加个pass什么的。但是虚幻加pass可不像unity那么简单,只有操刀去改源码了。然后我又反观了一下我前几篇博客,只简单讲了一下怎么改代码,没说原理。所以这个系列我打算系统说一下虚幻的一个架构。当然虚幻如此庞大,我也有很多不知道的地方。
    其实我写博客的目的很简单,就是想记录一下自己做的东西,有时候自己翻一下,再把问题再想一下,也许会有新的发现。虚幻的渲染方面的资料也是少得可怜,研究的人也少得可怜。大部分牛人都自己去造轮子去了。我只是个技术美术,造轮子的事情还是交给图形程序吧。不过研究虚幻4的确学到很多。如果有大牛看到我的文章中有错误,还请留言斧正。

首先在看这个系列之前,你需要具备一下:
(1)至少要敲过简单的渲染器,不管是拿dx敲还是拿gl敲或者vk之类的。
(2)对虚幻引擎有一定了解,对虚幻的渲染有一定了解。可以看我前几篇文章,或许可以有所帮助。
(3)C++基础。其实本人c++水平也是一般般(常常受到公司程序大牛的鄙视,不过我是美术哈哈哈)。

那么下面就正式开始吧!
首先,虚幻有很多个管线的。Forward和Tiled Based Deferred Lighting 还有专门适用于手机端的。我目前只研究了Deferred。首先找到。在这个函数里你将会看到很多熟悉的函数名称
虚幻就是通过调用这些函数来一步步绘制的。是不是很眼熟?这个就是各大论坛啦,博客啦讲的虚幻渲染流程的真面目。

下面就是官方的DrawOrder了。那么这个顺序是怎么来的呢。就是上面那个函数的调用顺序。

再打开这个Render函数,你就将看到延迟渲染一帧所调用的各个函数。(反正我看了半天就看到个大概的渲染顺序之外,还是啥也不知道)


那么当我们把一个模型托到场景里,这个模型被渲染出来的整个流程到底是什么样的呢?这个流程其实是非常庞大的。下面我就来一个一个拆分。
(1)第一步:资源准备阶段。这个阶段包括顶点缓冲区的准备,索引缓冲区的准备。这一步由场景代理管理完成。当然从磁盘里读取模型资源这些就涉及到StaticMesh这些了。想了解这一步可以去看我以前的博客,或者直接去看UPrimitiveComponent,UMeshComponent,UStaticMeshComponent,UCableComponent,UCustomMeshComponent。当你把这些源码全部研究一遍后,这个阶段算是了解了。这个阶段我不打算再描述了,因为已经有了很多现成的代码了。

(2)第二步就是shader资源的准备了,这个又是一个非常大的话题了。可以去看我以前关于给改材质编辑器和加shadingmode的文章便可以有个大概的了解。这一步我还会进一步阐述。
(3)第三步就是绘制了。

我们先不看Render函数那些复杂的调用,我们把精力先集中到shader层面来。一张画面是怎么开始绘制的呢?
通过这个我们便能知道一个大概的绘制流程(千万别以为虚幻只有这几步,不过主要的大概的流程是这样)。先绘制那些深度啊,初始化视口啦我们先不管。我们来看下这个BasePass。这个BasePass干的事情就是把GBuffer画出来。

这里就是像素着色器的入口。绘制完这一步后,我们就有了GBuffer然后再绘制剩下的。环境遮罩骤就先不说了。来看看最重要的光照部分。

光照部分的入口在这里:
虚幻的TiledDeferredLighting的渲染方式。不知道这个的去看毛星云的RTR3的博客的光照那节,讲得特别好。这里给个传送门:https://blog.csdn.net/poem_qianmo/article/details/77142101

这里会调用
GetDynamicLighting这个函数会调用

这里会接着调用


看到这里就很熟悉了,看过前面我修改shadingmode的博客应该会对这里很熟悉。
lighting绘制完了之后就会绘制一些反射啊之类的东西了,然后就是透明物体啊后期啊。这些后面会慢慢分析他们。我们先把两个最重量级的研究了。

接下来我们研究一下fog渲染阶段。找到FogRendering.cpp你就会发现,其实绘制fog的是一个globalshader。前面绘制各个物体的是materialshader。

你会发现绘制fog的是一个globalshader。虚幻一共有这么几种shader:Globalshader  materialshader和meshshader。

这篇博客只是一个概述性和引导性的。只是说明一下虚幻绘制的一个大概情况。下一卷我将演示一下怎么自己写个shader,引擎识别它,编译它,然后如何cpu和gpu进行信息交流的。

2017-04-27 16:51:26 xiaoxiaoxiaomaolv 阅读数 360
  • 从这里开始虚幻4-Editor介绍 v4.18

    本课程系列取名英译系列,是录制人员参考国外英文原版经典教程,结合中国人的习惯录制而成。希望能够给大家以帮助。从这里开始虚幻4系列教程,是Unreal的官方发布的入门教学,非常经典,是学习Unreal的佳入口。

    2395 人正在学习 去看看 杨石兴

这是教程的第 2 部分,旨在帮助开发人员提升 Unreal Engine* 4 (UE4) 的游戏性能。本教程对引擎内部和外部使用的一系列工具以及面向编辑器的最佳实践加以了概述,还提供了有助于提高帧速率和项目稳定性的脚本。

编辑器优化
正向与延迟渲染
细节级别
LOD 生成
自动 LOD 生成
LOD 资料
实例化静态网格
分层实例化静态网格
遮挡
级联阴影贴图
编辑器优化

正向与延迟渲染

延迟渲染是 UE4 使用的标准渲染方式。虽然这种方式似乎是最佳的,但我们需要理解一些它对性能的重要影响,尤其是对于 VR 游戏和低端硬件的影响。在这些情况下使用正向渲染可能会更好。

如欲了解更多关于正向渲染的效果,请参阅 Epic 文档。

如果查看 Epic’s Marketplace 中的反射场景,我们可以看见延迟渲染和正向渲染之间一些明显的区别。
图片描述
图 13:延迟渲染的反射场景
图片描述
图 14:正向渲染的反射场景

虽然正向渲染会因为反射、照明和阴影而导致丧失视觉保真,但剩余的场景从视觉上看没有改变,而性能的提高也许弥补了这种折衷。

如果我们在英特尔 GPA 帧分析器工具内,使用延迟渲染查看场景的帧捕获,那么我们会看到该场景正在以 103.6 毫秒 (9 fps) 运行,照明和反射占据了大部分持续时间。
图片描述
图 15:使用英特尔® 高清显卡 530 的延迟渲染捕获反射场景

通过查看正向渲染捕获,我们发现场景运行时间已经从 103.6 毫秒降低到 44.0 毫秒,或者说优化了 259%,其中大部分时间由基础通道和后处理占据,两者均可以进一步优化。
图片描述
图 16: 使用英特尔® 高清显卡 530 的正向渲染捕获反射场景

细节级别

UE4 内部静态网格拥有成千甚至上万的三角形,可以将 3D 艺术家想要加入他们作品的全部最小的细节展示出来。但是,当玩家远离这种模型时,即使引擎仍然在渲染全部三角形,他们也看不到任何细节。为了解决这个问题并优化游戏,我们可以使用细节级别 (LOD) 将该细节拉近,同时仍显示远处较弱的模型。

LOD 生成

在标准管道下,LOD 由 3D 建模人员在创建该模型时创建。由于这种方法可以对最终外观实现最大控制,UE4 现在加入了可生成 LOD 的极佳工具。

自动 LOD 生成

前往该模型的细节选项卡,可自动生成静态网格 LOD。在LOD Settings 面板选择需要创建的 LOD 数量。
图片描述
图 17: 创建自动生成的细节级别。

点击 Apply Changes…查看全文
了解更多相关内容,请关注CSDN英特尔开发专区

Intel技术双周刊已全面开启:订阅请点击这里

2017-12-14 17:14:04 cover_se 阅读数 294
  • 从这里开始虚幻4-Editor介绍 v4.18

    本课程系列取名英译系列,是录制人员参考国外英文原版经典教程,结合中国人的习惯录制而成。希望能够给大家以帮助。从这里开始虚幻4系列教程,是Unreal的官方发布的入门教学,非常经典,是学习Unreal的佳入口。

    2395 人正在学习 去看看 杨石兴

作者:王文斓

虚拟现实(VR)能够带给用户前所未有的沉浸体验,但同时由于双目渲染、低延迟、高分辨率、强制垂直同步(vsync)等特性使VR对CPU渲染线程和逻辑线程,以及GPU的计算压力较大[1]。如何能有效分析VR应用的性能瓶颈,优化CPU线程提高工作的并行化程度,从而降低GPU等待时间提升利用率将成为VR应用是否流畅、会否眩晕、沉浸感是否足够的关键。Unreal* Engine 4 (UE4) 作为目前VR开发者主要使用的两大游戏引擎之一,了解UE4的CPU线程结构和相关优化工具能够帮助我们开发出更优质基于UE4的VR应用。本文将集中介绍UE4的CPU性能分析和调试指令、线程结构、优化方法和工具、以及如何在UE4里发挥闲置CPU核心的计算资源来增强VR内容的表现,为不同配置的玩家提供相应的视听表现和内容,优化VR的沉浸感。

UE4 VR应用的CPU差异化

上面介绍了几种VR应用的CPU优化技巧,然而优化只能保证VR应用做到不掉帧不眩晕,没法进一步提升体验。如果要提升VR体验,必须尽可能最大程度利用上硬件提供的计算能力,把这些计算资源转化成内容、特效及画面表现提供给最终用户,而这就需要根据计算能力对CPU提供相应的差异化内容。下面介绍其中五种CPU的差异化技巧。

布料模拟
UE4的布料仿真主要通过物理引擎分到工作线程进行计算,对逻辑线程影响较小。而且布料模拟是每帧都需要计算的,即使布料不在画面显示范围内,也需要进行计算来决定更新后会否显示到画面中,因此计算量比较稳定,可以根据CPU能力适配对应的布料模拟方案[17]。

可破坏物件

可破坏对象在UE4里也是通过物理引擎分到工作线程进行破坏模拟计算的,因此对于计算能力较高的CPU这部分可以加强,比如更多对象可以被破坏、破坏时出现更多碎片或者碎片在场景中的存在时间更长等。可破坏对象的存在会大大加强场景的表现以及沉浸感,设置过程可以参考[18]。

CPU粒子

CPU粒子是另一项比较容易扩展的模块,虽然从粒子数目来说CPU粒子较GPU粒子少,但采用CPU粒子能降低GPU的负担,较好地利用多核CPU的计算能力,而且CPU粒子具备下列独有的功能:

  1. 可发光
  2. 可设置粒子材质及参数(金属、透明材质等)
  3. 可受特定引力控制运动轨迹(可以受点、线或者其他粒子的吸引)
  4. 能产生阴影

开发过程中可以对不同CPU设置相应的CPU粒子效果。

3D音频 – Steam* Audio

对于VR应用来说,除了画面外制造沉浸感的另一个重要元素就是音频,具有方向性的3D音频能够增强VR体验的临场感,Oculus*曾经推出Oculus* Audio SDK[19]来模拟3D音频,但该SDK对环境音效的仿真比较简单,相对并不普及。Steam* Audio[20]是Valve*新推出的一套3D音频SDK,支持Unity* 5.2以上的版本及UE 4.16以上的版本,同时提供C语言接口。Steam* Audio具备下面几项特点:

  1. 提供基于真实物理模拟的3D音频效果,支持头部相关传输函数(Head-Related Transfer
    Function,HRTF)的方向音频滤波以及环境音效(包括声音遮挡、基于真实环境的音频传递、反射及混音等),另外也支持接入VR头显的惯性数据
  2. 能够对场景中每个对象设置音效反射的材质及参数(散射系数、对不同频率的吸收率等),环境音效的仿真可以根据CPU的计算能力采用实时或烘焙的方式处理
  3. 环境音效中很多设置或参数都可以根据质量或性能要求做调整。例如HRTF的插值方法、音频光线跟踪的数目和反射次数、混音的形式等
  4. 相对于Oculus* Audio SDK只提供鞋盒式的环境音效仿真(shoebox model)而且不支持声音遮挡,Steam*
    Audio的3D音频模拟更真实而且完整,可以提供更精细的质量控制
  5. 免费且不绑定VR头显或平台

Steam* Audio从UE4的逻辑线程收集音源及收听者的状态和信息,通过工作线程进行声音的光线跟踪及环境反射模拟,将计算出来的脉冲响应(impulse response)传送到音频渲染线程对音源进行相应的滤波和混音工作,再由OS的音频线程输出到耳机(例如Windows*的XAudio2)。整个处理过程都是由CPU的工作线程进行,在加入3D音频的同时并不会增加渲染线程和逻辑线程负载,对原来游戏的性能并不会造成影响,可以说是非常适合VR的一项体验优化。详细的设置过程可以参考Steam* Audio的说明文檔[21]。

可扩展性

UE4的可扩展性设置是一套通过参数调节控制画面表现的工具,能适配不同计算能力平台[22]。对CPU来说,可扩展性主要体现在下面几项参数设置上:

  • 可视距离(View Distance): 距离剔除缩放比例(r.ViewDistanceScale 0 – 1.0f)
  • 阴影(Shadows): 阴影质量(sg.ShadowQuality 0 - 3)
  • 植被(Foliage): 每次被渲染的植被数量(FoliageQuality 0 - 3)
  • 骨骼网格体LOD偏差(r.SkeletalMeshLODBias): 全局控制骨骼网格体的LOD等级偏差
  • 粒子LOD偏差(r.ParticleLODBias): 全局控制粒子LOD等级偏差
  • 静态网格体LOD距离缩放(r.StaticMeshLODDistanceScale): 全局控制静态网格体的LOD等级偏差

图6 - 8分别显示了腾讯*<<猎影计划>>这款VR游戏对不同CPU的植被、粒子和阴影差异化效果。

图片描述图 6.《猎影计划》中的植被差异化效果。
图片描述
..
查看原文


了解更多相关内容,请关注CSDN英特尔开发专区

2017-12-14 17:05:39 cover_se 阅读数 252
  • 从这里开始虚幻4-Editor介绍 v4.18

    本课程系列取名英译系列,是录制人员参考国外英文原版经典教程,结合中国人的习惯录制而成。希望能够给大家以帮助。从这里开始虚幻4系列教程,是Unreal的官方发布的入门教学,非常经典,是学习Unreal的佳入口。

    2395 人正在学习 去看看 杨石兴

作者:王文斓

虚拟现实(VR)能够带给用户前所未有的沉浸体验,但同时由于双目渲染、低延迟、高分辨率、强制垂直同步(vsync)等特性使VR对CPU渲染线程和逻辑线程,以及GPU的计算压力较大[1]。如何能有效分析VR应用的性能瓶颈,优化CPU线程提高工作的并行化程度,从而降低GPU等待时间提升利用率将成为VR应用是否流畅、会否眩晕、沉浸感是否足够的关键。Unreal* Engine 4 (UE4) 作为目前VR开发者主要使用的两大游戏引擎之一,了解UE4的CPU线程结构和相关优化工具能够帮助我们开发出更优质的VR应用。本文将集中介绍UE4的CPU性能分析和调试指令、线程结构、优化方法和工具、以及如何在UE4里发挥闲置CPU核心的计算资源来增强VR内容的表现,为不同配置的玩家提供相应的视听表现和内容,优化VR的沉浸感。

本文已发表于《程序员》杂志2017年08月期,如需转载,可与《程序员》联系。

为何要把PC VR游戏优化到90fps

Asynchronous Timewarp(ATW),Asynchronous Spacewarp(ASW)和Asynchronous Reprojection等VR runtime提供的技术可以在VR应用出现掉帧的时候,以插帧的方式生成一张合成帧,等效降低延时。然而,这些并不是完美的解决方案,分别存在不同的限制:

ATW和Asynchronous Reprojection能够补偿头部转动(rotational movement)产生的 Motion-To-Photon(MTP)延迟,但如果头部位置发生改变(positional movement)或者画面中有运动对象,即使用上ATW和Asynchronous Reprojection,也无法降低MTP延迟; 另外ATW和Asynchronous Reprojection需要在GPU的drawcall之间插入,一旦某个drawcall时间太长(例如后处理)或者剩下来给ATW和Asynchronous Reprojection的时间不够,都会导致插帧失败。而ASW会在渲染跟不上的时候将帧率锁定在45fps,让一帧有22.2ms的时间做渲染,两张渲染帧之间则以传统图像运动估算(motion estimation)的方式插入一张合成帧,如图1所示。但合成帧中运动剧烈或者透明的部分会产生形变(例如图1中红圈框起来的部分),另外光照变化剧烈的时候也容易产生估算错误,导致持续用ASW插帧的时候用户容易感觉到画面抖动。这些VR runtime的技术在频繁使用的情况下都不能够很好解决掉帧问题,因此开发者还是应该保证VR应用在绝大部分情况下都能够稳定跑在90fps,只有偶然的掉帧才依赖上述的插帧方法解决。图片描述
图 1.ASW插帧效果。

UE4性能调试指令简介

用UE4开发的应用可以通过控制台命令(console command)中的“stat”指令查询各种实时性能数据[2-3]。其中“stat unit”指令可以看到一帧渲染总消耗时间(Frame)、渲染线程消耗时间(Draw)、逻辑线程消耗时间(Game)以及GPU消耗时间(GPU)。从中可以简单看出哪部分是制约一帧渲染时间的主要原因,如图2所示。结合“show”或“showflag”指令动态开关各种功能(features)来观察分别对渲染时间的影响,找出影响性能的原因,期间可以用“pause”指令暂停逻辑线程来观察。需要注意的是其中GPU消耗时间包括了GPU工作时间和GPU闲置时间,所以即使在“stat unit”下看到GPU花了最长的时间,也并不代表问题就出在GPU上,很有可能是因为CPU瓶颈导致GPU大部分时间处于闲置状态,拉长了GPU完成一帧渲染所需时间。因此还是需要结合其他工具,例如GPUView[4]来分析CPU和GPU的时间图,从中找出实际瓶颈位置。
图片描述
表 1.stat unit”统计数字。

另外,因为VR是强制开启垂直同步的,所以只要一帧的渲染时间超过11.1ms,即使只超过0.1ms,也会导致一帧需要花两个完整的垂直同步周期完成,使得VR应用很容易因为场景稍微改变而出现性能大降的情形。这时候可以用“–emulatestereo”指令,同时把分辨率(resolution)设为2160x1200,屏幕百分比(screenpercentage)设为140,就可以在没有接VR头显及关闭垂直同步的情况下分析性能。

而渲染线程相关的性能数据可以通过“stat scenerendering”来看,包括绘制调用(drawcall)数目、可见性剔除(visibility culling)时长、光照处理时间等。其中可见性剔除又可以通过“stat initviews”指令进一步了解和分柝各部分的处理时长,包括视锥剔除(frustum culling)、预计算遮挡剔除(precomputed visibility culling)和动态遮挡剔除(dynamic occlusion culling)等,用以判断各剔除的效率; 输入“stat sceneupdate”指令查看更新世界场景例如添加、更新和移除灯光所花费的时间。另外,也可以通过“stat dumphitches”指令,指定一帧的渲染时间超过t.HitchThreshold时把渲染帧信息写进日志。

如果要使游戏效果能够适配不同等级的PC,那么“stat physics”,“stat anim”和“stat particles”会是三个经常用到跟CPU性能相关的指令,分别对应到物理计算时间(布料模拟,破坏效果等)、蒙皮网格(skin meshing)计算时间和CPU粒子计算时间。由于这三个计算在UE4里都能够分到工作线程作并行处理,因此对这些部分进行扩展能够把VR应用有效适配到不同等级的硬件,使VR体验以及效果能够随着CPU的核数增加而增强。

另外,可以直接输入控制台命令“stat startfile”和“stat stopfile”采集一段实时运行的数据,然后用UE4 Session Frontend里的Stats Viewer查看运行期间各时间段CPU线程的利用率和调用堆栈(call stack),寻找CPU热点并进行相应的优化,如图3所示,功能类似Windows* Assessment and Deployment Kit(ADK)里的Windows* Performance Analyzer(WPA)。


查看全文


了解更多相关内容,请关注CSDN英特尔开发专区

没有更多推荐了,返回首页