400-807-8991
奇酷学院专注于VR/AR培训,欢迎您咨询本校VR/AR培训班
网站首页 >VR/AR培训 >VR教程 >十个Unity 3D开发引擎的进阶技巧,你学会了吗?

十个Unity 3D开发引擎的进阶技巧,你学会了吗?

来源:奇酷学院 点击量: 发表于:

VR应用比非VR应用需要更强的计算,性能优化是一个很重要的任务。若目标平台是像GearVR(又名:三星Gear VR)这样的手机设备,性能方面的优化就更重要。下面是奇酷学院经过3年的教学经验总结出使用Unity的小技巧,希望能对我们奇酷学员有帮助!

一、静态批处理

场景中可能存在大量的静态几何体,例如墙体,椅子,灯光和从不移动的网格。在编辑器中将它们标记为静态对象。为烘焙光照贴图,请确保将其标记为静态贴图。不要让每个对象都会导致一次绘制调用,而是把对象标记为可被组合成一个网格的静态对象。静态批处理有个关键要求:所有对象必须使用相同的材质。若静态墙带有木头材质,静态椅子带有铁材质,所有墙会被批量处理为一次绘制调用,椅子作为单独网格进行另外的绘制调用。

二、纹理集

如之前所说,每个材质引发一次绘制调用。直觉可能是木门和铁椅子需要使用不同的材质,由于它们的纹理不同。然而,若使用相同的着色器,就可以用纹理集为它们创建共用的材质。纹理集就是一个包含所有小纹理的大纹理。我们可以使用一个材质加载一个纹理,而非使用多个材质加载多次。每个对象可以对应到纹理集中不同坐标的一个纹理。

你可以的绘制管线中手动生成纹理集,但是Juan Sebastian的Pro Draw Call Optimizer工具非常有用。它可以生成纹理集,并且在替换新对象时不会搞混资源。

三、动态批处理

非静态对象可以动态批处理为一个单独的绘制调用。我曾注意到该过程大量占用CPU且每帧都在计算,但这是一个很好的优化。这只对使用相同材质且顶点数少于900的对象有效。使用纹理集为所有的动态对象创建一个材质,就可以进行简单的动态批处理啦。

四、LODs(多细节层次)

LOD组是改善性能的简便方法。使用有多个LOD的资源,并用低分辨率的几何体渲染离相机远的对象。可以自动随着相机临近在各个LOD间转换。

lod.jpg

五、关卡设计

若游戏涉及到玩家从一个房间移到另一个房间,简单的解决方法是一个关卡包含整个游戏。缺点在于内存的消耗。尽管每个房间中的各对象和材质都不可见,但其仍会被加载到内存中。将每个房间放置于单独的关卡中,在代码中智能的异步加载关卡可以改善性能。

关卡.jpg

六、异步加载

在玩家即将进入下个房间之前,加载下一个关卡。不要使用Application.LoadLevel()同步加载,因为加载时会导致游戏挂起。由于头盔的跟踪是实时的,这会导致眩晕,对玩家来说体验太糟糕。

异步加载.jpg

使用Application.LoadLevelAsync()来加载关卡。你可以在Oculus Mobile SDK BlockSplosion例子的StartupSample.cs中找到使用方法。

七、光照烘焙

关掉实时阴影!接受动态阴影的对象不会被批处理,这会导致严重的绘制调用。

光照烘焙.jpg

在PC机上,使用单个实时方向光就可以实现很好的动态阴影效果。对于大多数现代的PC都可以提供逼真的逐像素阴影。然而在移动平台,你需要烘焙光照而不是实时阴影,以高分辨率烘焙光照结合软硬阴影实现类似的效果。

八、阴影

尤其是为了高性能的手机体验,对于3D对象的阴影处理要使用传统技巧。可以通过在对象下放置一个简单的带有模糊阴影纹理的2D四边形模拟半真实的阴影。

阴影.jpg

小提示:不要尝试使用阴影缓冲。预处理光照环境并在角色下方使用老套的模糊阴影纹理处理方法。

例如,你Hold不住像《GTA V》中这种在高性能PC机上使用的实时动态阴影。

用如下方法代替:这是一张2002年《GTA Vice City》的游戏截图,你可以在Playstation 2上使用阴影斑点来提供阴影效果的幻觉。

九、Light Probes(光照探针)

当使用烘培光照时,静态对象效果不错但动态对象还有不妥。对于动态对象可以使用光照探针来模拟简单的动态光照。

Light Probes(光照探针).jpg

光照探针是烘焙好的立方贴图,存储了场景中多个点直接、间接甚至自发光的信息。当动态对象移动时,它在光照探测器附近进行插值获取近似某个点的光照。这是一种在动态对象上模拟实时光照的简便办法,而不用成本高昂的实时光照。

类似玻璃这种使用透明着色器的对象很消耗性能。使墙壁看起来更逼真的常见做法是,用一个带有灰尘或锈斑纹理的透明材质,加上另一个单独的基本漫射材质。多材质的alpha混合是很消耗性能的,每个材质都会增加一次绘制调用!但是请注意:多个纹理并没有问题,使用多个材质才耗费性能。使用一个材质结合着色器来实现多纹理的alpha混合,而非使用多个单独材质。

十、蒙皮网格渲染器

蒙皮网格渲染器常用于角色身上,它带有动画关节,可以使用物理(布娃娃)变或自定义动画(走,跳等)来实现逼真的网格变形。

蒙皮网格渲染器.jpg

坏消息是:蒙皮网格渲染器不支持批处理。对于每只眼睛,场景中各角色都会进行多次绘制调用。目前还没什么解决方案。

以上就是奇酷学院为大家带来的关于VR开发引擎—Unity 3D的十个进阶小技巧,希望大家都能在VR学习中找到乐趣。

热门文章

开课提醒

郑州 石家庄

郑州VR/AR
开课时间离开课还有

-

石家庄VR/AR
开课时间离开课还有

-

奇酷学院培训课程

猜你喜欢

VR/AR基础教程

VR/AR视频教程