NVIDIA TEGRA3与PhysX技术在UNITY引擎的使用及优化技巧

来源:互联网 发布:sqlserver2017 for mac 编辑:程序博客网 时间:2024/05/14 20:06
摘要:NVIDIA中国资深软件工程师杨雪青和陈泉今天的演讲主题是“使用Unity引擎在NVIDIA Tegra 3上打造次世代移动游戏优化技巧和利用NVIDIA PhysX技术在Unity引擎中创建交互的物理世界”。PhysX作为一个单独物理引擎,所做的事情为大家做一个物理世界模拟,为了支持这样一些物理世界模拟,为大家提供非常完备的创建...

NVIDIA中国资深软件工程师杨雪青和陈泉为大家做“使用Unity引擎在NVIDIA Tegra 3上打造次世代移动游戏优化技巧和利用NVIDIA PhysX技术在Unity引擎中创建交互的物理世界”的演讲。首先是NVIDIA中国资深软件工程师陈泉为大家介绍关于NVIDIAPhysX和APEX的相关情况。

以下是陈泉的演讲实录:

图:NVIDIA中国资深软件工程师陈泉

首先介绍一下PhysX和APEX方面的相关工作。什么是PhysX?PhysX从最开始PC,到现在基本上有快10个年头了,但是在近两年移动平台,包括手机,平板电脑性能提升起来之后,才开始真真意义上把PhysX移植到移动开发上来。

PhysX作为一个单独物理引擎,所做的事情为大家做一个物理世界模拟,为了支持这样一些物理世界模拟,为大家提供非常完备的创建物理世界所必须的一些功能。可以说,现在PhysX是所有商业物理引擎里面提供最为完备的一个结合。创建完物理之后,因为物理模拟,物理世界模拟,非常简单的,不管直接使用SDK,或者通过引擎方式使用,都是非常直接非常简单的。

还有要针对多核趋势,以前可能在移动平台上面都是一些单核文本,以前手机都是性能比较差的单核CPU,这两年包括双核,或者四核架构公开之后,包括这些CPU上已经有了很好的多核支持,PC上更不用说了多核支持也非常好。所以,在这上面优化下了很大功夫,现在SDK多核优化,我们测试这块是相当好的,大家可以试一下。接下来,我就为大家介绍一下PhysX支持模拟功能,首先所有物理都需要用到刚体模拟,也是游戏世界里面最基本游戏模型,比如我们最喜欢看到产品类型,还有一些建筑物,一些可移动的小的桌椅,或者一些车辆都可以用刚体模拟。然后有一些柔软物体模拟,PhysX就支持两种,一种是以布,还有人身上衣服,包括动物身上一些,怪兽身深一些肉,成为软体一样的东西。

做FPS经常用到粒子系统,以及软体模拟。一般来说会做一些图形模拟,给场景增加一些动态感觉。粒子文化是跟场景里面其他的刚体和布料有完全碰撞,流体是每一个粒子上面添加的作用,这样由于粒子有相应作用力,可以模拟一些水,或者油状物,除了这些之外还提供比较丰富一些支持功能。

当然了粒子效果使用,因为会涉及到场景里面模拟,这个时候需要在设计的时候就考虑到,把这些东西怎么加到游戏里面去,如果要让玩家感觉效果很好,同时心灵上也不会有什么担忧的时候,一般来说像PC上面加上几千个这样的粒子基本上是没有什么问题的,这是粒子效果。PhysX刚才说了,最成功利用更成功的商业物理引擎,现在支持所有的武力平台和普通PC,现在有Unix和Linux版本,一般Linux是作为Server上模拟用的,还有一个PS,包括最新XBOX个360。并且在所有平台上面开发API都是一致的,只要针对一个平台开发,所有都可以非常透明的,在物理这一层面非常透明移植到所有平台上去。

粒子也是非常适合在显卡上面进行模拟,加速软体粒子模拟,把大规模刚体模拟也做到GPU上面。

实际上APEX五就有一个问题,很多东西都需要游戏厂商自己来做,并且做到最后。各个平台不一样,会根据平台的硬件性能,划定一个级别,每一个级别做平台对应的内容,虽然这样可以带来一个好处,拥有一定级别的游戏,拥有比较好的效果,但是这样也就带来一个问题,有更好的效果,如果只用一个级别,剩下级别内容是不需要,这个游戏也就变的非常大。

同时,提供一个运行时,支持Runtime,会提供一些读写到文件磁盘,根据文件磁盘上的东西,进行物理操作。做图形方面可伸缩性可能稍微容易一点,根据这个选择使用或者不使用就可以了,或者直接选择都可以。但是,因为图形输出是物理游戏输出,物理内容是游戏输入,如果做物理可伸缩性只能从输出,也就是源头上面来做。游戏物理制作工具,要从源头上来做。要求APEX制作一次之后,一定要在所有平台上支持,包括根据其性能,包括在Android平台上都已经有支持,这个同样是跨平台的东西,跟PhysX一样。

还有APEX Destruction,这是一个破碎的Motion,这是一个破碎刚体和粒子结合,这样的效果让程序员来做基本上不可能,只能通过美术怎样搭建进而拼接然后破碎。我们APEX就提供这么一个专门模块来做这个事情,在程序员集成APEX之后,使用APEX工具来把这个破碎完成。当然了这个破碎跟我们之前见到破碎不太一样,我们把几个东西简单拼接起来,这种破碎有LOD的方面问题,但是久而久之就会厌倦这样的东西。我们这个破碎非常彻底,也可以根据LOD破碎的非常简单。

刚刚看过破碎这个模块之后,大家看这个图就会更加理解,APEX简单来讲就是这么一个架构,是基于PhysX SDK,上面做一些单独应用,都是一些比较下层东西,都是面向开发人员,像这个上面,DCC Plug-In插件上的东西,还也一些单独工具。

像精准度非常高的东西最好用APEX来做,特别当人物动作比较大的时候,因为PhysX是一个最基础的API控制是没有的,但是APEX Clothing就是专门制作人物上衣。并且,有非常完整LOD支持,因为编辑的时候就要求哪些东西是可以LOD的时候,根据所设计的东西进行关掉,最完美的情况所有东西都可以进行,非常平滑的过度。

动作会用几万个粒子来做,现在一般PhysX只用在GPU上,如果在GPU上就可以来做了。

最后,Unity里的PhysX支持问题。Unity中可用的PhysX功能特性,刚体模拟,布料,软体都可以使用,还有多数一些集成方面工作。最后就是APEX这方面,因为SDK也在开发阶段,现在正在集成可能是4.0里面就会有PhysX支持。

接着工程师杨雪青也会为大家介绍TEGRA3,如何针对Unity去做一些图形方面优化,主要讲使用Unity引擎在NVIDIA Tegra3上打造次世代游戏渲染效果实践及优化技巧。让大家能够在Unity使用的时候,能够有更多内容,并且更有效率的运行。

图:NVIDIA中国资深软件工程师杨雪青

以下是杨雪青演讲实录:

移动平台受到消费者热爱,移动游戏也进入一个大发展时代。Unity作为一个世界主流游戏开发引擎之一,有众多开发者选择Unity来开发移动游戏。作为世界主要移动芯片设计厂商之一,NVIDIA也早已被广泛应用到各个手机和品牌电脑上,这样一来就户有越来越多Unity开发者游戏聚集在我们开发平台上。

如何在我们最新移动芯片Tegra3上提高渲染实践,以及如何对渲染进行优化。首先介绍一下Tegra3芯片,然后介绍一下我们移动芯片第一个工具PerfHUD ES,可以在官网上进行下载,介绍一些实例基于无源码用户,动态阴影的渲染,后处理优化,LUT Shading,最后是一些Tegra3相关建议。

Tegra3芯片,主要特点是世界首款拥有4+1的芯片,拥有12核CPU,读取能够达到Tegra3倍,还有2倍数独立信号处理器,2到6倍处理数据,还有4-5倍高清视频,还有高清音频等等。Tegra3会根据工作量不同来自动开关,我们也就开启了高屏的四核进行工作,比如在待机的时候,听音乐的时候,播放视频的时候,没有必要开启部分功能,而且可以降低消耗。多个机构对游戏开发有什么好处呢?大家知道Unity3.5采用一个多线程优势,Tegra3就可以充分发挥Unity3.5多现程的优势。

在Tegra3游戏渲染方面带来的好处,一个是游戏当中可以使用更加复杂的渲染流程,比如动态光照,阴影,折射,放射,后处理都可以,可以在游戏当中使用更精致的模型和纹理,在移动游戏上面使用非常精致的模型,同而使场景中模型数量,以及游戏视觉效果都得到提升,而且还可以在移动设备上面制作更多艺术分割,例如卡通效果就已经有游戏在移动平台上面做了。

Tegra图形调试工具就是NVIDIA PerfHUD ES,不需要原代码就可以对程序进行调试,有三个界面。可以实时看到各种硬件信息,而且可以通过技术实现确定管道瓶颈,可以实时开关渲染,或者进行屏蔽。通过开关很容易确定所在位置,还可以快速分析整个图形渲染过程。在使用调试模式的时候,可以逐个进行可视化分析,可以看到当前所使用的模型,贴图性能,以及当时渲染状态,还可以实时中编辑,也可以看到改动后的实施效果。这个工具在Android4.0上可以直接使用。

在高品质3D游戏中动态阴影不可或缺,特别在PC,Console上3D游戏的标配都用到动态阴影,但目前在移动游戏中很少应用。Tegra3在架构和性能上都适合动态阴影的渲染,其实在Tegra3上无论从构建上面都非常适合动态阴影渲染。Tegra2上面也已经有游戏使用动态渲染了,作为硬件设计厂商非常希望游戏开发者能够将这些效果都应用到Tegra3上面去。

先Unity到目前为止在移动设备上实现动态阴影的障碍,目前还没有完美,也没有办法修改程序,修改其渲染。不追求像PC和Console非常级别的动态阴影渲染,就使用线程Unity功能,使用简单的Shadow Map效果来实现。有的时候用户在渲染的时候还是使用了非常复杂的角色本来有的Shader,这就造成性能浪费,在渲染Shadow Map为的时候,替换角色原有的复杂Shader,这是简单的Shader,效益很高,不需要以前复杂,在渲染的时候完全没有必要用。

在实际操作过程当中我们发现,根据那些具体情况这些效果也都有优化空间,通过PerfHUD ES进行调试,可以安全消耗大小进行排序,通过这个东西可以发现,在这一张当中,消耗非常大。而且,通过跟Frame Debugger,发现其中一个Draw Call做了一次全屏的Alpha混合,并且把这两个Draw Call进行合并。根据提示,我们该在Craw Call上面找到这个脚本,这是以后代码,我们把两个合并成一个,这是优化之后的,合并Draw Call前后的Shader,这是优化以后的结果,合并之后减少了一个Draw Call,并且没有Alpha混合,渲染从43.9fps提高到47.9fps,真正提高9.1%。

为了达到很好效果,有的时候需要对进行逐象素照射,逐象素复杂光照比较昂贵,光照的时候会根据实施的光照条件,这样就避免实时复杂光照开销,这个方法既保证了渲染品质,也提高了渲染效率。Tegra3的顶点着色器功能,将来对于象素来说不变,线性变化的,或是接近线性变化的操作尽量移至顶点有色器中。要避免在象素着色器当中使用Fragment Shader中使用条件语句,渲染象素时,条件语句的分支都会被执行一遍。然后避免在象素着色器使用discard,如PhysX test。

同时,还要避免在象素着色器当中使用复杂函数,如pow,sqrt,可以使用LUT,还要尽量从顶点着色器向象素着色器传参时尽量将多个标量合成到向量中去。避免在屏幕上进行大面积的Alpha混合,尽量使用压缩格式纹理,比如ETC纹理就非常好,可以有效减少带宽使用量。

一共有三种渲染方式,一种是Fixed function shaders,这种非常简单,梳理也非常简单,不需要写太多代码,但是灵活度不高,无法实现非常复杂的图形效果应用。还有Surface Shaders,这种可以适合各种光源应用,书写也非常简单,但是工作负荷不是完全可控的,而且对象素着色器负担较大,顶点这色器不可控。第三种Vertex and fragment shaders,可以充分优化着色器代码,平衡顶点着色器和象素着色器负荷,我们建议在移动平台上尽量使用这种方法做,缺点就是书写比较复杂,需要有一点技术实力。

在实际工作过程当中,即便是非常简单的光照也使用这种东西,结果整个程序在移动平台上跑起来非常重,希望开发者能够根据不同情况选择合适的Shader实现方式,以实现效能,平衡工作。Unity是一个功能强大齐全,并且具有十分出色跨平台能力非常好的游戏。无论是移植还是院士开发Android平台游戏,都相当便利。

Tegra3是一款具有强大综合性能SoC移动芯片,拥有4+1核CPU,适合发挥Unity3.5多线程优势,12核GPU具备完全适合次世代游戏渲染要求的图形能力,完善的调试工具,NVIDIA将不断推出性能更强大移动芯片,两者结合,一定给游戏玩家打造绝佳移动游戏体验。

0 0
原创粉丝点击