unity lodgroup对什么进行优化

Unity 优化 Occlusion和LOD - 简书
Unity 优化 Occlusion和LOD
场景中,有些物体可能因为一些物体的遮挡而在摄像机照射不到,比如一个人被一栋楼挡到,我们就看不到那个人了,虽然我们看不到,但是在场景中,那个被遮挡的物体还是会被渲染的,这就会影响游戏的性能,而我们就可以通过遮挡剔除不让那个被遮挡的物体进行渲染,这样就会减少内存的消耗。我们先创建一个场景
Paste_Image.png
我们就是用一个Plane和多个Cube搭建一个场景,然后调整好摄像机,这样就会有一些Cube被遮挡到。
Paste_Image.png
然后我们选中所有的Cube点开Window选项卡,选中OcclusionCulling
Paste_Image.png
在弹出的这个面板里,我们会看到遮挡和被遮挡,前者表面该物体可以遮挡其他物体,后者表面该物体可以被其他物体遮挡,比如窗户不能遮挡其他物体,但是可以被其他物体遮挡,所以根据我们需要去勾选,默认是不勾选的。当我们设置好以后,我们必须要点击Bake烘焙按钮。其他的参数我们默认就好。我们在看Scene视图,我们选中Camera
若水GIF截图_日0点31分35秒.gif
我们移动摄像机的时候就会发现一些在摄像机以外,或者被遮挡到物体就不会被渲染。
LOD为Levels of Detail的简称,简单来说即为多细节层次, 它是根据物体在游戏画面中所占视图的百分比来调用不同复杂度的模型的。简单而言,就是当一个物体距离摄像机比较远的时候使用低模,当物体距离摄像机比较近的时候使用高模。这是一种优化游戏渲染效率的常用方法,缺点是占用大量内存。使用这个技术,一般是在解决运行时流畅度的问题,采用的是空间换时间的方式。
我们选中一个物体,然后点击
Paste_Image.png
我们就会发现该物体身上多了一个LODGroup组件
Paste_Image.png
我们会看到有几个不同颜色的框框,分别有100%,60%,20%,10%这几个选项,这几个选项就是该物体占屏幕的百分比,当我们移动框上边的摄像机的时候,下边会出现Renderes里边是空,这时候我们点击Add把我们准备好的不同模型放进去就好(我这里没有准备,只用了一种,大家就将就这看吧)当我们在移到Cullled的时候,我们是选不了模型的,这个是默认的不显示,因为离得太远了。有的时候我们在项目中可能这几个选项不够我们用。那我们就可以在相应的框上点击右键来添加。
Paste_Image.png
图中我选中的是LOD2,第一个选项是在LOD2前插入,第二个是删除
Paste_Image.png
此时我们会发现多了一个LOD3,参数是27%,有时候上图的几个百分比没有我们想要的,那我们也可以通过拖拽的方式来移动百分比
若水GIF截图_日10点23分40秒.gif
通过这几个方式的调节达到我们想要的效果。上图我在60%的时候没给他传模型,意思就是不让他显示,我们在Scene视图中,通过调节他在屏幕中的百分比,来看看效果
若水GIF截图_日10点34分57秒.gif
通过这个我们就可以看到变化,当他处于LOD1和Culled的时候他是没有被渲染的,我们在Game视图时,留意下图红框里边的东西,Batches(DrawCall的别称,Tirs,verts面和顶点,跟DrawCall有关系)
Paste_Image.png
若水GIF截图_日11点4分2秒.gif
我们可以看到当cube不被渲染的时候Batches的数量也会减少1,减少了DrawCall的数量。
代码实现LOD和Occlusion
Paste_Image.png
Paste_Image.png
这个只是简单的思路,在实际中有的时候我们就要考虑是否有必要每一帧都要发射射线,可以在前边加个时间限制,隔多长时间发射一次,我们发射的这个射线只是从物体的中心点发射的,有的时候我们也需要从物体的边界去发射射线去检测,这个我就不写了。
我们在使用上述方法不让他显示的时候,只是不渲染他,并不是把他setActive(False),他自身多带的其他组件,比如说碰撞体还是存在的。Unity3D教程:游戏场景优化(二)LOD | Unity3D教程手册
当前位置 :
>> Unity3D教程:游戏场景优化(二)LOD
Unity3D教程:游戏场景优化(二)LOD
LOD(Level-of-detail)是最常用的游戏优化技术。功能众多,涉及到场景管理,模型优化,资源管理员,及显示效果变化,且不需要脚本编写,全部通过编辑器实现。如果你的程序可以定制开发应用LOD的模块,当然是很美好的事情。不过如果没有也没关系,大家可以使用UniLOD这个第三方的LOD插件。当然,Unity3D自己的地形是自带LOD功能的,当你刷好你的地形后,你只需要调整Pixel Error这个参数即可。Unity3D会自动计算生成地形的LOD,无需你做其他的任何设置。
Unity3D教程:游戏场景优化(二)
如果你使用了Lightmap,那么同时使用LOD的时候会有一些麻烦,办法是制作模型的时候事先做好第二套uv(不使用Unity的自动计算lightmapUV功能),而且所有LOD的第二套UV的分布位置都一致,很费工。
【上一篇】
【下一篇】
您可能还会对这些文章感兴趣!unity3d中lod核心脚本 - Unity3d技术 - 泰课在线 - 国内专业的Unity在线学习平台|Unity3d培训|Unity教程|Unity教程 Unreal 虚幻 AR|移动开发|美术CG|UI平面设计|前端开发 - Powered By EduSoho1697人阅读
厚积薄发| Unity优化(59)
工欲善其事必先利其器。在Unity官网的Asset Store上有不少给力的资源插件,能帮助我们减少人力资源消耗的同时,更快更好地驾驭引擎。今天我们就从善用资源的角度,推荐两款Unity热门插件,并介绍其使用技巧。
Mesh Baker
我们在项目开发的时候经常会大量使用大规模的Mesh,导致Draw Call过高。而Mesh Baker扮演了网格烘焙器的角色,其工作原理是将网格和材质合并,从而降低渲染的Draw Call。
下面,我们就来谈谈使用方法:
一、Texture Packing
我们常常会遇到角色网格相似,但是纹理繁杂细碎的情况。这时我们需要把纹理合并在同一张图上。纹理拼合的操作面板如下图所示:选择不同的网格来拼合,Texture Baker自动分析其Shader,Size等属性,最后点击Bake Material Into Combined Material,即可完成拼合。
二、Mesh Batching
在纹理拼合后已经形成为一张图片了,这时候我们需要进行Mesh拼合,即使用Mesh Baker来烘焙网格。在此,我们新建一个新的GameObject,点击Bake就把3个Mesh烘焙在一个Object上了。
同时,在进行了这两步之后,我们会发现Draw Call上的变化。
不难发现,合并前12个Draw Call,合并后只有2个,从而在一定程度上降低渲染压力。
三、对Skinned Mesh进行拼合
Unity引擎无法原生支持蒙皮网格的Draw Call Batching,而Mesh Baker能将多个Skinned mesh合并。
经过合并后,人物的材质已经相同,所以我们能在上图中看到这些角色只产生了一个Draw Call。同理,即使再加入更多的角色也能合并成非常少的Draw Call,从而减少渲染耗时。
除此之外, Mesh Baker还支持将Mesh Renderer与Skinned Mesh Renderer一起合并。比如开发中常用到的道具如帽子、剑等,使得角色在换装时也只产生一个Draw Call,非常实用。
在使用skinnedmesh时有几个注意点:
合并后将原始模型的Bone保持Active;
Disable原始模型的Skinned Mesh Renderer;
确保原始的Animation始终在运行;
如果需要Mesh Rendering与Skinned Mesh 一起合并,则需要保证在其在同一张Texture Atlas和Mesh容器中。
除了Mesh Baker,另一个插件SimpleLOD也比较适合大规模场景的制作开发。在处理多人在线的项目(如MMO游戏)时,按照我们以往的优化方法是尽可能降低Draw Call和减少渲染消耗,在远处使用低级LOD,在Run-time时根据相机距离切换合适的LOD,使得在手机性能有限的情况下尽量渲染更多的角色,达到更好的效果。
而SimpleLOD恰好可以满足这一点,除了同样拥有Mesh Baker所具有的Mesh合并、Atlas烘焙等功能,它还能提供Mesh的简化(Mesh Baker无法提供),并对动态蒙皮网格进行了很好的支持。该插件可在Run-time和Editor中都可以使用,同时开放了源码,大家可以根据项目的实际情况而作修改。
我们拿以下原始模型来举例:
一、合并模型
打开插件后有如下一些选项:点击Merge child meshes
我们知道Unity支持的网格顶点数不能超过65536,但是当我们把很多物体合成一个Mesh时很可能会超过这个限制。而这个插件会针对这种情况进行自动处理,可以看到下图中的两辆车Merge后成Merged part1和Merged part2 。
二、烘焙Atlas
下图是Texture packing,根据模型的Material自动把不同类型的Texture分类显示出来,在合并的时候,会自动把同类型的Texture合并。
合并之后的效果对比:Draw Call数量由原来的136降至24个。
三、模型简化
选择了模型之后,点击Simplify mesh,它会尽可能在保持原样的基础上简化网格。如下图,汽车模型的网格面片数从六万多顶点数减少到了两万七。
同时,它也能自动生成不同级别的LOD。这里有6层LOD(从大到小),点击Bake LOD后它会自动计算,不需要大家手动操作。我们可以通过更改脚本达到希望的效果。
如下就是使用了SimpleLOD后的效果。该插件最大的特色即是对Skinned mesh动画角色网格提供了很好的支持。
以上是我们今天推荐的插件,但愿能在资源优化中祝你一臂之力。今后我们将会结合以往的行业服务经验,为您推荐更多高效的开发利器,尽情关注!
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:42065次
积分:1487
积分:1487
排名:千里之外
原创:111篇
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'

我要回帖

更多关于 unity tex2dlod 的文章

 

随机推荐