如何实现最佳的跨平台游戏体验?Unity成亮解密实时渲染
7月31日,2018云创大会游戏论坛在杭州国际博览中心103B圆满举行。本场游戏论坛聚焦探讨了可能对游戏行业发展有重大推动的新技术、新实践,如AR、区块链、安全、大数据等。

Unity大中华区技术经理成亮表示,实时渲染技术的跨平台性能让游戏体验变得更好
Unity大中华区技术经理成亮做了《解秘Unity2018最新实时渲染技术》的主题演讲,分享了2018年Unity在实时渲染方面实现的三个重要技术,包括图形相关的可编程渲染管线、基于渲染管线推出的Shader Graph、PostProcess工具以及ECS、Burstcom等性能相关技术。
成亮表示,Unity具有完整的生态环境,一直致力于解决图形、网络以及AR问题,让越来越多的开发者做出炫酷的游戏或者动画。目前,Unity已经开发了大量耳熟能详的游戏,还为电影行业、工业、医疗、汽车等领域提供了远程数据分析、数据追踪、远程调试、货币化等能力。而这其中,一个关键的技术应用就是今年推出的实时渲染相关技术。
Unity实时渲染技术具有强大的跨平台能力,主要包括图形相关的可编程渲染管线、基于渲染管线推出的工具、以及ECS、Burstcom等性能相关的技术。
成亮介绍到,随着游戏种类越来越多,传统的渲染管线已经越来越难以满足游戏功能的需求。而Unity推出的可编程的渲染管线,不仅可以让用户自定义渲染流程,而且具有非常好的扩展性,在保留了经典C++内核的前提下提供了更多的接口。可编程渲染管线提供了两套开源的模板,用户可以根据需求来实现定制化的功能:
HD(High-Definition)主要针对高端的PC平台,这一类管线提供了更加精确的模型和高级材质,在定制渲染管线时对用户更为透明,对于灯光的配置也有所增强,能够帮助用户实现非常华丽的渲染效果;
• Lightweight主要针对移动模块和XR平台,让用户在兼顾性能的同时可以适配到更多的设备。它采用的Single-Pass Forward Rendering可以支持8盏像素光在一个批次内进行渲染,而且提供了非常便利的材质升级工具。
随后,成亮还详细阐述了Unity基于渲染管线所推出的Shader Graph、Progressive Lightmapper和Post-processing v2三个工具:
• Shader Graph是一种节点图方式,能帮助用户无需编程即可创作,极大降低了编程门槛;
• 后处理站提供了丰富的效果功能,支持设置不同的区域和灵活可拓展的框架,此外也兼容最新的可渲染管线;
• 渐进烘焙可以方便用户实时看到烘焙的过程,给用户的工作流带来了非常大的便利和效率提升。今年还会推出基于GPU的渐进光照功能,效率将提升10倍以上。
在性能方面,成亮最后提到,Unity推出的一套新系统,可以帮助用户实现性能上的巨大飞跃。这一系统包括三部分:Job System,帮助用户利用GPU多核处理能力;ECS,让数据的内存排列更为紧密,提高缓存的命中率;Burst Compiler,技术优化的编译器。
以下是成亮演讲实录:
大家好!我是来自Unity的成亮。今天非常高兴有这个机会来到杭州,跟大家分享Unity在2018最新的实时渲染技术。
今天主要分享的内容有四点,首先我会对Unity做一个基本介绍,后面则会介绍今年Unity在实时渲染方面比较重要的三个技术:一是图形相关的可编程渲染管线;二是基于渲染管线推出的工具,包括Shader Graph、PostProcess;三是ECS、Burstcom等性能相关的技术。
首先介绍一下Unity。2014年Unity在丹麦哥本哈根成立,它有三个创始人,他们分别提出了三个公司理念:开发民主化、解决困难问题以及帮助开发者成功。民主化这个概念很好理解,就是降低技术的门槛,让越来越多的开发者能够做出很炫酷的游戏或者动画。相对应来说,就要求Unity公司解决比较困难的图形、网络以及AR问题。
Unity具有完整的生态,它有很强的实时渲染引擎,具备强大的跨平台能力,除此之外还提供了远程数据分析、数据追踪、远程调试、货币化等能力。截止到2017年统计数据,有200亿应用软件安装量,有30亿移动设备是用Unity软件安装的。在排名前1000名的游戏中有40%是用的Unity,新的制作游戏超过了50%,还有60%的VR和AR应用是用Unity来开发的。Unity开发了很多耳熟能详的游戏,以及在电影行业、工业、医疗、汽车等等领域,也有不少厂商用到Unity来做实时渲染的工具。
下面开始介绍实时渲染相关的技术。首先看一下图形方面,今年我们最重点推出的技术是可编程渲染管线,相比之前的管线,可编程渲染管线提供了更多渲染的接口给到开发者,你可以按照自己的需求定义你的开发。当然我们为大家准备好了两个模板:HD(High-Definition)主要针对高端的PC,这个管线提供了更加精确的模型,提供了非常高级的材质,帮助大家能够实现非常华丽的渲染效果;Lightweight主要针对于移动模块,让大家在兼顾性能的同时适配到更多的设备。

这是目前的渲染管线,它可以定制的功能很少,你可以选择Forward或者Deferred:Forward中物体接受的光照数量决定其渲染批次,当光照数量很多时就会遇到新的问题;Deferred中是在最后应用一次光照,但是Deferred有对硬件的要求,所以在某些移动平台是不支持的。 除此之外,还可以编写一些Command Buffer,也就是在渲染管线的时间点,比如上图中绿点的地方,你可以插入自己的渲染。
随着游戏种类越来越多,传统的渲染管线越来越难以满足游戏的需求。比如我们看到有非常3D的、光照非常多的游戏,也有2D的卷轴游戏,这些游戏用一条管线很难兼顾到这样的性能;又比如一个2D的游戏或者一个FPS游戏渲染的时候有很多权衡的点,2D根本不需要光照,材质也不用是基于物理的材质......等等。
所以Unity在今年推出了可编程的渲染管线,它可以让用户自定义渲染流程,比如你的剪裁或者绘制物体,这些流程都可以按照自己需要进行控制。新的渲染管线有非常好的扩展性,针对原来的渲染管线进行了有效的提升,保留了经典的C++内核,提供了更多的接口,帮助大家尽可能化地定制自己的功能。除此之外还提供了两套模板,大家可以根据需要去定制功能,而且这两套功能都是开源的,所以也是给了大家一个非常好的参考。
首先看一下Lightweight,它主要针对移动和XR平台,提供了非常方便的材质升级工具,而且对于一些不需要光照的材质完全兼容,所以升级到这套管线非常方便。它的渲染也和原来有所不同,采用了Single-Pass Forward Rendering,可以支持8盏像素光在一个批次进行渲染。我们之前做了一个Trash Dash实例,它是一个3D游戏,但实际上没有利用到光照,所以它利用我们的材质升级工具,就非常容易从原来的管线升级到了现在的管线。
下面看一下High,High功能很多,在这里就给大家做一个详细的拆解和介绍。它分成六大块功能,首先它的渲染管线有一个比较大的改变,渲染管线相对之前采用了新的模型,物理计算会更精确。它在定制渲染管线时对用户更为透明,用户只要关注设置的属性就可以了,而不用关注选择什么样的管线。它主要针对高端的PC平台,对于灯光的配置有增强,光照和阴影方面可以采用色温来控制光照的颜色。光线形状也有很多选择,还增加了新的区域光。材质比较多,提供了非常多的高级材质,供大家选择。还有基于分层的材质系统,有变形的特效。调试方面,提供了新的可以观察调试的窗口。
新的管线不用再去选择配置,用户根据自己的需求来设置渲染管线就可以了。一是增强了光照配置,能根据色温来控制颜色,支持更多的形状,包括锥形、方形或者金字塔形状,支持光线颜色的效果;二是新增了区域光类型,支持实时区域光,而且区域光形状包括了橘型、圆形等形状;三是提供了新的光照模型GGX,在传统模式下是单显色模型,粗糙表现颜色不会饱和,而且会带有发暗的现象;此外还新增了非常多的材质,包括彩虹色加透明漆材质的效果、双面透明的效果、分层的模型、体积光和光速效果、No Occlusion Probe效果等等。
除此之外,新的管线还新增了调试窗口,在这个窗口中可以看到丰富的信息,包括材质、光照等等。如下所示,这个图可以看到正在渲染的物体表面的发线,它不光可以在编辑器上面使用,还可以实时连到PC端上进行查看。

在调试窗口支持只显示某一种光照,比如只显示慢反射。还支持中间的渲染目标,比如Depht Buffer显示,左边只显示了Diffuse Lightin。

以上给我们展示的是Unity可编程渲染管线所能够呈现出的实时渲染的效果。下面我们看一下方便大家创作的工具,Shader Graph、Progressive Lightmapper和Post-processing v2。
Shader Graph是一种节点图的方式,来帮助大家无需再用编程的方式进行创作。它带来的好处是不用编码,可能减少了一些语法或者调试的痛苦,降低了大家编程的门槛。
后处理站有非常多可以选择的效果,可以设置不同的区域,还支持灵活可拓展的框架,因为这也是一个开源的功能,所以大家可以根据需要去看,一方面提供了自定义的API,大家可以自定义,另外也可以看到整个代码。另外也兼容最新的可渲染管线。
再看一下渐进光照烘焙,实时渲染场景有很多灯光是先静态烘焙上取得,尤其是像间接光照,都是烘焙上去的,因为如果实时计算肯定来不及,所以通常在做项目的时候有光照烘焙的功能。而渐进烘焙可以实时看到烘焙的过程,而且可以优先看到视图窗口显示的效果,这样给大家工作流就带来了非常大的便利和提升。除此之外,今年应该还会推出基于GPU的渐进光照功能,这样光照烘焙效率就会提升10倍以上。
今年在性能上面Unity推出了一套新的系统,可以帮助大家在性能上面有质的飞跃。最新的系统包括三个部分:一是Job System,帮助你利用GPU多核处理能力;二是ECS,能够让我们数据的内存排列更紧密,提高缓存的命中率;三是Burst Compiler,是技术优化的编译器。

如上所示,这是现在的系统。其中会引用到各种各样的组件,它就是一个引用列表。这样一来,这些引用类型没有办法控制它在内存中的排布,所以它是分散在内存中的,这样数据分散的结果是导致缓存命中率比较低。还有一个问题,如果单核的情况,一旦任务比较多,它处理的速度就会越来越慢。
Entity Component System中,我们把数据和函数分开,Render包含了数据,通过对数据进行分类处理,再派发给不同的任务进行处理。如下所示,这就是一个结合的架构图。

来看一个实际的例子,来看它具体提升了多少性能。如下图显示,传统方式下飞船包含了Movemen组件,在这种情况下,同屏渲染了18500个飞船。但是再加入变形,在飞船里面就没有了任何的应用。所有的任务都是通过函数来执行的,所以把它Job system变形化之后,性能大概可以提升到25000个,提升了三分之一的性能。
 
再看ECS With Job system,数据紧密化加上并行化之后,在ESC With Job system情况下,我们从最开始的18000个变成了96000个,性能提高了5倍。再加上Burst Compiler,数量达到了156000个,比最开始的做法性能提升了接近10倍。


以上就是Unity最新的关于实时渲染的技术进展,希望能够帮助到开发者能够实现更炫酷的效果,谢谢大家。
如何实现最佳的跨平台游戏体验?Unity成亮解密实时渲染的更多相关文章
- "xaml+cs"桌面客户端跨平台初体验
		
"Xaml+C#"桌面客户端跨平台初体验 前言 随着 .Net 5的到来,微软在 .Net 跨平台路上又开始了一个更高的起点.回顾.Net Core近几年的成果,可谓是让.Ne ...
 - 3D位置语音,引领吃鸡游戏体验升级
		
欢迎大家前往云加社区,获取更多腾讯海量技术实践干货哦~ 作者:腾讯游戏云 导语:在刚刚结束的首届腾讯用户开放日上,腾讯音视频实验室带着3D位置音效解决方案,向所有用户亮相,为用户提供360度立体空间的 ...
 - Camel Games借助AWS在爆发式增长中提供优质游戏体验
		
关于Camel Games Camel Games 成立于2009年,是中国首家得到google市场官方认证的顶尖开发公司.长期以来,Camel Games始终依靠于率先的技术背景,致力于成为国际一流 ...
 - 玩家福音:10款最佳Linux免费游戏
		
“我能在Linux平台上游戏吗?”这类疑问正困扰游戏玩家,那么答案就是“快去Linux平台吧!”.开源组织一直以来坚持不懈为Linux操作系统开发不同类型的游戏,在Linux平台下的游戏完全不亚于其他 ...
 - [ASP.NET Core 3框架揭秘] 跨平台开发体验: Windows [上篇]
		
微软在千禧年推出 .NET战略,并在两年后推出第一个版本的.NET Framework和IDE(Visual Studio.NET 2002,后来改名为Visual Studio),如果你是一个资深的 ...
 - [转][ASP.NET Core 3框架揭秘] 跨平台开发体验: Windows [上篇]
		
微软在千禧年推出 .NET战略,并在两年后推出第一个版本的.NET Framework和IDE(Visual Studio.NET 2002,后来改名为Visual Studio),如果你是一个资深的 ...
 - Fuel4D 2.1 免费跨平台游戏引擎 现已发布
		
Fuel4D 2.1 免费跨平台游戏引擎 现已发布 开发环境:纯 C/C++,无JAVA.O-C. 支持 WIN32.安卓 系统. 详情见官方网站:http://www.fuel4d.com 或者进F ...
 - HTC VIVE 虚拟现实眼镜VR游戏体验
		
HTC的VIVE入手一段时间了,体验了几个免费的VR游戏,效果还不错,分享一下. 1. VIVE主要部件 VIVE的主要部件有3个,分别是头盔,两个无线控制手柄和两个定位器. 1.1 头盔 头盔整体照 ...
 - [ASP.NET Core 3框架揭秘] 跨平台开发体验: Docker
		
对于一个 .NET Core开发人员,你可能没有使用过Docker,但是你不可能没有听说过Docker.Docker是Github上最受欢迎的开源项目之一,它号称要成为所有云应用的基石,并把互联网升级 ...
 
随机推荐
- [19/03/30-星期六] IO技术_四大抽象类_ 字节流( 字节输入流 InputStream 、字符输出流 OutputStream )_(含字节文件缓冲流)
			
一.概念及分类 InputStream(输入流)/OutputStream(输出流)是所有字节输入输出流的父类 [注]输入流和输出流的是按程序运行所在的内存的角度划分的 字节流操作的数据单元是8的字节 ...
 - hpp.h与.h的区别
			
hpp,其实质就是将.cpp的实现代码混入.h头文件当中,定义与实现都包含在同一文件,则该类的调用者只需要include该hpp文件即可,无需再将cpp加入到project中进行编译.而实现代码将直接 ...
 - CentOS gitlab 安装配置
			
CentOS gitlab 安装配置 2018-11-02 11:23:09 Visit 5 在/etc/yum.repos.d 目录下创建文件gitlab-ce.repo,使用国内的安装源 b ...
 - 二十二、详述 IntelliJ IDEA 中恢复代码的方法
			
在咱们正常开发项目的时候,难免遇到在开发过程中由于某种原因,想要将代码恢复到前一版本的情景.特别是在咱们删除了某些代码,想要恢复之前删除的代码的时候,了解这个在 IntelliJ IDEA 中恢复代码 ...
 - Android 第三方应用接入微信平台研究情况分享
			
微信平台开放后倒是挺火的,许多第三方应用都想试下接入微信这个平台,毕竟可以利用微信建立起来的关系链来拓展自己的应用还是挺不错的 最近由于实习需要也在研究这个东西,这里把我的整个研究情况给出来 微信平台 ...
 - input输入框中list属性不能没有效果
			
网页代码入下,就是出不来效果. 人物:zslsww 解决办法: 将option中的value属性去掉: 张山李四王五爪留 显示效果,问题得到解决.
 - javascript入门教程 (2)
			
这篇我就不铺垫和废话了,我们开始正式进入JS核心语法的学习… 首先我们从基础入手... 一. 基础语法 1.1 区分大小写 JS语法规定变量名是区分大小写的 比如: 变量名 learninpro 和变 ...
 - servlet,过滤器,监听器,拦截器的区别
			
一.目录 1.概念 2.生命周期 3.职责 4.执行过程 二.内容 概念 1.servlet:servlet是一种运行服务器端的java应用程序,具有独立于平台和协议的特性, 可以动态生成web页面它 ...
 - webpack报错Cannot read property 'presetToOptions' of undefined
			
在学习react全家桶时,webpack首先报错,报错内容如下,最后我是因为没有全局安装webpack导致的报错,使用npm install webpack -g安装解决了这个问题.
 - 如何让tomcat服务器运行在80端口,并且无需输入项目名即可访问项目()
			
这个问题最开始遇到的时候是半年前,自己买了个服务器玩,但是域名解析的时候出了问题,我查了查资料才知道腾讯云是默认解析到80端口,而且还改不了. 首先是修改tomcat运行端口号,默认是8080,但是我 ...