Unity5

Unity5 如何做资源管理和增量更新

工具

Unity 中的资源来源有三个途径:一个是Unity自动打包资源,一个是Resources,一个是AssetBundle。

  •   Unity自动打包资源是指在Unity场景中直接使用到的资源会随着场景被自动打包到游戏中,这些资源会在场景加载的时候由unity自动加载。这些资源只要放置在Unity工程目录的Assets文件夹下即可,程序不需要关心他们的打包和加载,这也意味着这些资源都是静态加载的。但在实际的游戏开发中我们一般都是会动态创建GameObject,资源是动态加载的,因此这种资源其实不多。

  •   Resources资源是指在Unity工程的Assets目录下面可以建一个Resources文件夹,在这个文件夹下面放置的所有资源,不论是否被场景用到,都会被打包到游戏中,并且可以通过Resources.Load方法动态加载。这是平时开发是常用的资源加载方式,但是缺点是资源都直接打包到游戏包中了,没法做增量更新。

unity静态批处理原理理解

1、静态批处理的时间点

1)在游戏导出的时候,在player setting中勾选static batching,这样在导出包的时候就进行批处理,导出来的包就会比较大

2 ) 在游戏场景中勾选场景物体的static选项,在加载该场景的时候,会进行一次静态批处理的合并,这样导出来的包不大,但是在加载的时候会使得内存变大。

2、静态批处理的基本原理

场景中有4个物体,ABCD,如果都勾选静态选项,在进行静态批处理的时候,引擎会判断这四个物体是否共用同一渲染材质。

如果共用同一渲染材质,则会将这四个物体视为可以批处理的对象,引擎会基于单个渲染对象的大小拷贝出3个,总共变为4个mesh,此时这4个mesh会存在一个index buffer中,此时会让资源占用的内存变大4倍。

3、为什么要用静态批处理?

在游戏的运行中,有时候CPU的瓶颈也会至关重要。如果CPU的运行速度较慢,则GPU会出现等待CPU的情况,此时游戏主要受到CPU的限制。

Unity5中优化VR 应用的12个技巧

VR应用比非VR应用需要更强的计算,性能优化是一个很重要的任务。若目标平台是像GearVR这样的手机设备,优化就更重要了。

以下是一些应该试着了解的性能指标:

每只眼睛50次绘制调用。unity5更精确地将其称为SetPass Calls。
场景中顶点数少于50K~100K 且面数少于50~100K 。

下面是一些简单的技巧,用于满足上述要求:

静态批处理

场景中可能存在大量的静态几何体,例如墙体,椅子,灯光和从不移动的网格。在编辑器中将它们标记为静态对象。为烘焙光照贴图,请确保将其标记为静态贴图。不要让每个对象都会导致一次绘制调用,而是把对象标记为可被组合成一个网格的静态对象。

静态批处理有个关键要求:所有对象必须使用相同的材质。若静态墙带有木头材质,静态椅子带有铁材质,所有墙会被批量处理为一次绘制调用,椅子作为单独网格进行另外的绘制调用。

纹理集

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

详解Unity Profiler内存分析问题

“在使用Unity开发游戏的过程中,借助Profiler来分析内存使用状况是至关重要的。但许多开发者可能还对Profiler中各项数据表示的含义不甚明确,今天我们Unity官方的技术工程师柳振东,将针对Profiler内存分析相关的问题及解答,与大家进行分享。”

要想完全发挥Profiler内存分析的威力,首先要做的就是了解Profiler展示的数据所表达的含义,以及到底哪些模块所使用的内存才会被统计到Unity的Profiler中。Profiler涉及到的知识点还有很多,我们今天先从中挑选一些大家常有的疑问来作解答。

1. 在Unity的Profiler中看到的总内存使用和我使用其它工具看到的系统内存占用不太一样,这是为什么呢?

Profiler中看到的内存是通过Unity自身引擎看到的内存分配,凡是引擎Allocation和Deallocation的内存,引擎均有记录,所以我们可以给出确切的引擎内存占用信息。但是,仍有其他内存我们是无法获知的。

【视频】基于Unity 5的PowerVR OverDrive怪兽卡车光线追踪演示

以下视频是来自同一场景并且强调射线追踪反射可以添加到传统的栅格化游戏中,使用一种混合射线追踪渲染技术。

详解Unity 5 全局光照系统Enlighten问题(下)

我们在昨天给大家解答了:为什么场景烘焙出来的lightmap上有Realitime灯光的颜色?和为什么在Unity 5中动态更换lightmap没有作用? 这两个问题。今天,我们继续给大家解答Unity 5 全局光照系统Enlighten中的其他常见问题。

请阅读:详解Unity 5 全局光照系统Enlighten问题(上)

为什么烘焙的point灯光会有一圈圈的色阶变化?

大家在烘焙lightmap的时候可能会发现类似下图的奇怪效果。

“大家在烘焙lightmap的时候可能会发现类似下图的奇怪效果”

图中我们使用了一盏Baked的point light,烘焙之后发现光照效果会出现一圈圈的色阶突变。

原因是我们使用的是压缩版本的lightmap。如下图Lighting窗口中选项所示:

详解Unity 5 全局光照系统Enlighten问题(上)

Unity 5正式版面世已经一段时间,许多开发者都已经在使用Unity 5进行开发。那么大家在使用Unity 5时都会碰到一些问题。今天我们Unity的官方技术工程师柳振东将在本文中针对Unity 5中全新的Enlighten全局光照系统的一些问题与大家进行一些分享。

为什么Unity 5的全局光照系统会让大家踩坑呢? 因为Unity 5取缔了Unity 4中使用的Beast全局光照系统,采用了全新的Enlighten全局光照系统。而这两套全局光照系统的算法并不一样,反映到使用上就是各种参数与操作细节的变化。

对于没有系统学习过计算机图形学的开发者,还是非常建议大家去了解一下全局光照明模型的,因为大家可能对局部光照明模型(就是我们平常所说的实时光照)比较熟悉,有时可能会把局部光照明模型的一些知识用在全局光照明系统上,白白花费时间做了一些无用功。

下面挑选一些常见问题与大家分享。

为什么场景烘焙出来的lightmap上有Realitime灯光的颜色?

相信不少开发者都为这样的问题头疼过,因为灯光明明是Realtime的,怎么可能会被烘焙到lightmap里面去呢?但是这在Unity 5里并不是一个bug。

Unity5中的软阴影烘焙

此文分享在unity5中烘焙光照时关于软阴影的一些见解。光照烘焙是计算机图形学领域的一种技术,用于为计算量巨大的虚拟光照操作生成纹理,称为光照贴图。光照贴图信息被烘焙到这些纹理中,用来展现就像受实时灯光影响的虚拟场景,而开销只是使用实时灯光的一小部分。通常结合烘焙光及实时光使用以创建更真实的虚拟环境。

  观察灯光与环境中的物体交互时会发现,很明显阴影几乎不会完全平直。灯光以直线传播,但它几乎不可能无限小到可以产生完全平直的阴影。为了使场景看起来更加可信,如果软件支持就有必要考虑使用软阴影。此文将展示一些对比案例,以更好地理解如何烘焙软阴影及如何设置。虽然此教程着重于unity5,但这些内容同样适用于其它软件。

  先来讨论下Unity中灯光的衰减,以及它如何加强场景中烘焙灯光的表现。为了更直观地解释软阴影,下面展示一张关于灯光的图片。这张图片很好的展示了阴影是如何随着距离的延伸变得更加柔和。看一下如何在Unity5中实现类似的效果。

Unity中灯光

Unity局部高效实时阴影的思考和实现

无意间看到一篇文章,说是Unity5 demo中为了实现角色的良好阴影,单独给角色设计了一个角色阴影系统。而且使用的是比较老的技术,但效果很好。其实在很多时候,我们需要的并不是万能的阴影光照系统,而是局部能做到效果就行。

万能的好处在于任何情况都能看上去合理,但是相对的,性能开销也大,同时为了兼顾各种情况,只能做各种效果的折中,所以我们看到了现在移动平台上,要么就是没有实时阴影,要么就是充满锯齿的实时阴影,要么就是使用2D贴图来模拟实时阴影。

用2D贴图来模拟的效果毫无疑问是最好的,但问题在于成本太高,很多小团队资金有限,很难专门为每一个角色都让美术画一大堆阴影贴图。而这也毫无疑问会增加游戏的大小。

我主要思考的是,在某种条件下,是否可以实现局部的良好的阴影。比如角色展台,毫无疑问只会出现一个角色,那么这个情况下,毫无疑问我们需要的是一个完美的阴影。或者说某一些游戏,视角固定,而且能看到的范围很小,那么是否只针对这个部分去实现好的阴影系统。或者一个很小的室内,我们也需要一个好的角色阴影。

Unity5中的光照简介(下)

接着昨天得上篇~Unity5中的光照简介(上)

  光照探针

  如果使用烘焙光照,那动态对象就不会有精确的阴影和光照信息。它们看起来很呆滞。使用Light Probes来添加真实感光照,阴影并为动态物体着色。它是预计算的光照信息卷积,可以作用于移入和移出此区域的物体,以较小的代价模拟实时光照。下面是关于如何在场景中如何布置灯光探针的简短教程 < https://www.youtube.com/watch?v=O3DT1QDGelo >。

  光照探针用球面调和(SH)模型来存储光照信息。前向渲染器的基本通道渲染像素灯光和所有的SH灯光。这样一来,每个光照探针的CPU开销很小,也不会产生GPU开销。点此了解更多内容。

  反射探针

  对于镜子或镜面屏这样的反射表面,你需要在此表面上看到周围物体的倒影。这可以用一个反射探针简单的实现。可惜目前只能是立方体形状,最适用于立体房间。对于有动态对象的场景,你可以使用实时反射探针。对于静态场景(或为了降低性能开销),可以使用烘焙反射探针。

同步内容
--电子创新网--
粤ICP备12070055号