虚幻渲染系统结构解析

虚幻渲染系统结构解析

ID:12071374

大小:305.50 KB

页数:0页

时间:2018-07-15

虚幻渲染系统结构解析_第页
预览图正在加载中,预计需要20秒,请耐心等待
资源描述:

《虚幻渲染系统结构解析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、虚幻4渲染系统结构解析小米互娱VR技术专家房燕良房燕良,从2001年开始,自主研发3代游戏引擎,发布游戏超过10款。代表作品有《仙剑3》、《功夫世界》、《龙online》、《神兵传奇》等。从2007年开始接触虚幻引擎,对虚幻引擎有深入的研究和实践。目前就职于小米,从事VR方面的研发工作。【以下为演讲实录】大家上午好!今天,我和大家分享的主题是虚幻4渲染系统结构解析。内容主要包含以下几个模块:·从3D引擎架构的角度讲解渲染系统在架构层面所处的位置以及与其他模块之间的关系;·重点讲述虚幻4渲染系统的架构,主要从三个方面讲解: ·渲染线程跟主线程的基础架构;·场景管

2、理;·渲染流程控制角度详解该架构是如何设计和实现。·最后分析虚幻4的VR在引擎层实现的流程。并以谷歌VRHMD插件为例进行讲解。3D引擎渲染系统下图相当于一个3D引擎与渲染系统相关的几个模块。一个是资源系统,一个是材质系统,还有场景的管理,渲染相关的就是渲染管线的管理。这几个模块在下层都会调用图形API实现渲染功能。整个3D引擎包括渲染系统最核心面临的问题主要是两个:管理复杂度和效率。复杂度是现在整个3D引擎包括渲染难度系数最高的,要实现各种各样的渲染效果、渲染算法以及各种各样优化算法。“对游戏来说,效率就是生命”。——卡马克效率,一是从图形算法方面,可变性的

3、判定、流程控制的优化、平衡CPU跟GPU的工作。二是软件开发者一定是关心硬件的,意味着另一个核心问题是如何高效发挥GPU的高并发流水线的架构以及GPU上各种Cache如何能够帮助Driver提高命中率。虚幻4渲染系统架构渲染系统模块:·Engine/Source/Runtime,主要存放模块的源代码;·核心代码模块 ·RenderCore·Renderer·RHI抽象层 ·RHI(RenderHardwareInterface)·虚幻4的版本RHI的设计最初是基于D3D11设计的·RHI实现层,现在对于主流的平台和主流的推荐API都有相应的实现包括: ·Emp

4、tyRHI·Windows上D3D11RHI·苹果上Metal·OpenGLdRV、VulkanRHI接下来从数据和逻辑两个方面解析虚幻4渲染系统,在论及引擎的数据管理与渲染的流程控制之前,我们先理解何为渲染线程。渲染线程机制是从虚幻3开始引入的,当时有一个开发代号叫做Gemini,为什么要引入渲染线程,当然主要是从效率方法考虑。一个游戏最终开发出来之后实际上有三个大的模块是占每一帧时间最多,分别是渲染、游戏逻辑包括脚本更新、以及物理模拟。因此,如果把渲染和游戏逻辑更新并行起来,就可以得到一个显著的效率提升,如下图所示。如果没有渲染线程,游戏逻辑的更新和渲染是

5、串行的,一帧所占的时间是两块执行的总和。如果使用了渲染线程之后,一帧的时间就是两者耗时最长的那个时间,这是一个理想情况,理想情况会有一个显著的渲染提升。既然多了一个重要的线程,就会涉及到两个线程之间同步的问题。线程之间同步分两方面:1、因为游戏有运行的速率控制问题,意味着对于游戏来说,往往游戏线程负载是低一些,渲染线程是控制一些,游戏线程疯狂往前跑也没有太大的意义,所以它有一个RenderCommandFence,防止游戏线程跑得太快。好比前台我们正在看的画面,如果是第N帧,渲染线程可以渲染第N+1帧,游戏线程可以渲染第N+2帧。2、游戏线程同步场景管理增加了

6、渲染线程后,整个游戏的复杂度大大提升了。游戏线程要修改它的数据,渲染线程也要修改它的数据,也很麻烦,容易出错。所以在虚幻情景下,使用了一个Proxy对象的模式去处理它,在游戏逻辑里面处理的一个游戏对象会在渲染线程里面对应一个Proxy对象,该Proxy对象的游戏更新完全在渲染线程里面做。另外在渲染线程里,因为每一帧会有特定的状态数据,这些状态数据每一帧都在变,这个其实也没有太好的办法,在每一帧的时候,要把独特的数据进行拷贝。下图是渲染线程跟主线程的基本关系,主线程会通过渲染命令的队列往渲染线程发消息,渲染线程会从命令队列里读取命令,它们之间有一个RenderC

7、ommandFence这样一个机制。接下来看一下虚幻引擎场景的数据管理的一些核心类。虚幻引擎场景的数据管理分了两层,一层是比较熟悉的UWorld,主要面向游戏逻辑开发,为了在上层做逻辑控制时较为方便去管理,比较方便实现上层控制逻辑。对于渲染来说,UWorld对应FScene对象,这个数据接口的设计主要面向浏览器,由FSceneRenderer这一类,实现了两个派生类,一个是FForwardShadingSceneRenderer前置渲染,还有一个FDeferredShadingSceneRenderer就是延迟渲染。在model4.0以下的,是逻辑渲染。如果是

8、在ShaderModel4.0以上会选

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。