如何在手机fps帧数显示软件上显示fps和drawCalls次数

主题 : [已解决]关于drawCall的问题,请官方大神回复
级别: 新手上路
可可豆: 82 CB
威望: 82 点
在线时间: 57(时)
发自: Web Page
来源于&&分类
[已解决]关于drawCall的问题,请官方大神回复&&&
我在使用UI编辑器导出json文件来作为游戏UI的资源,发现发布成小图(散图)和大图(图集),两者在游戏中的drawCall是一样的,理论上使用图集应该减少drawCall才对,希望官方人生或者大神给于解答,谢谢[ 此帖被superdragon在 13:45重新编辑 ]
级别: 新手上路
可可豆: 82 CB
威望: 82 点
在线时间: 57(时)
发自: Web Page
大神呢,期待回复
级别: 版主
UID: 362141
可可豆: 1300 CB
威望: 1275 点
在线时间: 413(时)
发自: Web Page
回 1楼(kingone999) 的帖子
drawcall这块我也不太熟悉。我帮你问下其它人哈。
cocos2d-js----------dragon
级别: 版主
UID: 362141
可可豆: 1300 CB
威望: 1275 点
在线时间: 413(时)
发自: Web Page
回 1楼(kingone999) 的帖子
&& 使用图集无法减少drawcall,&&材质从哪来的和glDrawElements次数没关系啊
cocos2d-js----------dragon
级别: 新手上路
可可豆: 82 CB
威望: 82 点
在线时间: 57(时)
发自: Web Page
回 3楼(superdragon) 的帖子
哥们,其他引擎(unity,starling等)使用图集都能有效减少drawCall,不然一个稍微复杂的UI,drawCall能达到几百,这还了得。
级别: 侠客
可可豆: 208 CB
威望: 208 点
在线时间: 256(时)
发自: Web Page
使用图集减少draw call是有一定前提条件的,图集并不是减少draw call的直接条件。真正减少draw call是需要多个连续绘制的节点使用同样的贴图时,可以一次性批量绘制举个栗子当你有A, B, C三种节点,其中A, B使用同一张贴图(在同一个图集中),C使用另一张贴图假设绘制顺序是:ACB这种情况下是无论任何引擎都无法减少draw call的,因为A绘制完需要替换贴图,然后绘制B之后再替换贴图,最后绘制C。draw call:3假设绘制顺序是:ABC那么是可以做到将A, B同时绘制,最后绘制Cdraw call:2如果你需要达到这样的效果,需要将所有使用同一个图集的Sprite对象用SpriteBatchNode来管理起来,这样SpriteBatchNode就可以一次性绘制自身所有的子结点(WebGL模式下)。在Cocos2d-x 3.x中,已经做到了自动批处理,所以省去了用户的一些操作,但是当你想要最大化这种效应的时候,还是建议使用SpriteBatchNode从逻辑上自己控制以上讨论都是基于WebGL,Canvas模式不具备批处理的能力,所以draw call数量无论是否使用SpriteBatchNode都无法减少,必然是一个对象一个对象的绘制,但是SpriteBatchNode依然可以在一定程度上提高性能。此外,Layer的bake方法也可以有效得减少draw call:
级别: 新手上路
可可豆: 82 CB
威望: 82 点
在线时间: 57(时)
发自: Web Page
回 5楼(fysp) 的帖子
这个回答我相当满意,赞,多谢多谢
关注本帖(如果有新回复会站内信通知您)
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 关注CVP公众号
扫一扫 浏览移动版建筑效果图
承接全国室内外效果图制作◆品质专业◆价格从优!
当前位置: >
控制drawcalls,提升性能 - 东阳效果图制作
图50团队拥有900余名设计师。专业室内设计及室内外效果图制作:室内效果图,家装效果图,装潢设计效果图,建筑效果图,景观效果图,鸟瞰效果图等;在室内装修效果图大赛中屡获荣誉,是上海效果图、深圳效果图制作顶级精英团队。很多效果图设计,装修效果图,装修设计效果图等3d效果图作品,堪称最全的中国室内效果图大全。
随着人们室内环境意识的提高,人们对室内环境对自身及家人健康的影响越来越关心,那么,怎样判断您和您家人生活及工作的环境安全和健康呢?室内环境监测中心和健康医疗中心根据多年来进行室内环境检测和治理的实践,归纳和总结出了室内环境污染造成危害的12种主要表现。
卧室效果图制作
卧室的温柔是民族遗风、文化修养、性格培养。善于在纷繁琐事,忙忙碌碌中温柔,善于在轻松自由,欢乐幸福中温柔,善于在柳暗花明中温柔。善于在关切与疼爱中温柔,善于在负担和创造中温柔,更善于填补温柔、置换温柔,这是卧室一个柔美的、不可轻欧洲室内设计风格视的艺术。卧室设计师充分利用这一柔美的,带有成熟气息的设计理念,材质颜色为白色,基层色彩为浅驼色,这两酒店 3d效果图个颜色的相结合体现出诗般的柔美及浪漫的情调。
书房效果图设计
书房地面的拼花彰显淡淡的,低调的奢华,背景镜面的搭配,不但扩展了视线空间,也为空间的装潢设计增加了几分妩媚,清新淡雅中不失高贵,高贵中呈现出婉约的温柔。
这张电视背景墙效果图,给你绝对的视觉享受。对比强烈的色彩,独到的灯光运用让客厅电视背景墙成为最夺目的一角。
时代在发展,如今居家的电视背景墙款式越来越新颖。
目前来看,客厅是家人休闲、亲朋好友相聚的场所,而目前大众家庭乐的手段主要是看电视3d工装效果图、看vcd、唱卡拉ok等,于是,客厅的电视背景墙成了最吸引人们眼球的地方。
实际上,在家装设计中,电视背景墙早已成了设计的亮点,也是体现主人个性化的一个特殊空间。与原模型相比,每个模型均保留了一定层次的细节首先看下手机场景要求,明确了要求,就会有问题有针对性drawcalls,控制在100一下,同屏不超过2w三角面需要看到远景的用lod,鸟瞰用低模漫游的话就是1、2层精细点,其它粗糙点地图面积大,得用分部加载的drawcalls:这个东西值越小,你的游戏性能越好介绍:在游戏中每一个被展示的独立的部分都被放在了一个特别的包中,我们称之为&描绘指令&(draw call),然后这个包传递到3d部分在屏幕上呈现出来这就和你希望你的亲友收到准备好的圣诞礼物需要包装好然后穿过城市准时放在他应该出现的地方一样没什么不同你的cpu来完成包装和传递他们的活,同时会消耗很多的带宽,所以最终分配好这些关键性资源很重要目前,真正可怕的事情是从&描绘指令&消耗远景开始,每一个独立的飞溅到地板上的血迹和一个角色或者一具死尸消耗的字节是一样的多的他们都消耗同样的描绘指令除此之外,没有什么更多的差别降低drawcalls:那么如何降低 draw call 呢??那么我们就用到culling(剔除)技术如果不应用这个技术,电脑是不管3721把场景里所有的东西都送去渲染的看得见的也渲染,看不见得照样也送去渲染很傻是吧,那咋办呢得告诉电脑,那个你看得见的渲染,看不见的就算了于是就有了1.视锥体剔除(frustum culling)这个unity系统自带了好像,就不用操心了2.遮挡剔除(occlusion culling)culling的实现对于realtime interactive 3d environment,现实的速度是非常重要的,虽然现在的硬件能力非常的快,但是要想保持30fps的同时处理数十万的三角形,以现在的主流机器来说还是非常困难的为了解决这种问题,人们提出了很多方法,其中有lod,有culling,对于lod,它可以从2fps提高到10fps,但是很难从4fps提高到20fps这两种方法并不矛盾,而且我们往往需要在culling的基础上再使用lod进一步解决pipeline的负担这里我主要希望讨论一下culling方面的技术:culling的意思是select from a flock,就是&从一群里面选择一部分&对于3d engine来说,就是要从几十万的triangle之中选择出一小部分送给pipeline进行渲染选择的方法总的来说有如下几种途径:最简单的就是backface culling,这个已经很普通,我就不说废话了然后就是view frustum culling,只选择在view frustum中可见的部分送入pipeline,通常人们会采用hierarchy的数据结构来有效的进行view frustum culling,层次型的结构在各种图形学算法中普遍采用,比如碰撞检测,光线追踪,radiosity等等我尝试过一种基于aabb tree的view frustum culling,加上frame coherency,plane masking等优化的方法之后,我认为效率已经非常高了但是对于现在的游戏场景viewfrustum culling是远远不够用的,因为view frustum实在是非常的大,现在的场景又非常的复杂,采用view frustum culling对于场景漫游的视角来说,平均可以删除场景中60%左右的数据,对于一个100,000triangle的场景来说,剩下的数据也会有好几万多边形,对于pipeline来说依然是比较重的负担不过view frustum culling是最容易实现的算法了,非常的方便和有效,对于一部分3d rpg来说,我认为是一个不错的选择,因为你可以要求camera处于较高的位置,并且总是向下观察,这样用view frustum culling就可以以非常低的代价筛选出很少的一部分场景数据了,对于《格兰蒂亚》,《星辰物语》,还有最新的《绝冬城之夜》等,是足够了,他们对于镜头都有比较严的限制,正好适用于viewfrustum culling.如果大家想做3d游戏,还是先从这类游戏入手的好,因为可以直接集中精力于渲染技术和其他有趣的部分但是对大部分第一人称射击游戏而言,view frustum culling是远远不够的,事实上,在实际的环境中我们的视野总是被各种物品遮挡住,所以我们往往只能看到整个场景中的一小部分,远远小于我们的view frustum的范围这些物品被称作occluder,所以有很多方法就是在考虑如何使用occlusion culling来提高显示的性能然而,occlusion culling比起view frustum culling复杂度上升的太多,直径也很难找到一个很完美的解决方案,下面我就将现有的一些途径简单的介绍一下:这些方法都有需要将整个场景进行层次划分(用bsp tree,kd-tree),分解成一个个cell可见性判别的力度往往就是到达cell的级别,你可以根据自己需要决定cell的粒度来平衡效率先介绍run-time的一些方法:1.基于portal的occlusion culling,这是一种基于object space的run-time method,这种方法特别适用于全封闭的建筑类场景,洞穴类场景,因为这些场景有一个特点,遮挡非常明显,比如一个大楼,每个房间(cell)的大部分都被墙壁所遮挡,只能透过少数的门,窗看到场景中的其他部分对于这种场景,我们可以采用如下的方法进行有效的culling:首先,识别出场景中每个cell的portal(门,窗),渲染的时候,找到view point所在的cell,然后view frustum从当前cell开始,一次通过该cell的portal来遍历场景,每经过一个portal,就对view frustum进行一些修正,因为这些portal与视点形成更多的限制,直到看不到任何portal位置遍历过的cell就是可见的cell.这种方法对于这类场景非常有效,因为通常我们的遍历透过几扇门窗就停止了portal需要事先人工设置,或者用算法自动识别然而对于很多户外场景,很难存在这样的cell和portal,因此对于那些场景这个方法就不适用了2.single occluder culling在portal算法的基础上,这又是一种基于object space的run-time method,这种方法可以用于那些有很多高大的遮挡物的场景,比如大都市,高山环绕的场景这些场景的特点是,存在很多单个的高大有效的遮挡物,比如大山,大楼,他们往往能够遮挡住viewfrustum中的很多部分当然对于portal算法对应的室内场景该方法也同样适用算法的过程如下:维护一个occluder列表,利用层次性的结构,从视点出发,以从前往后的顺序访问各个cell,判断是否被occluder列表中的某个occluder挡住,如果没有对于该cell中的物体,判断它是否是比较好的occluder(根据它在是平面上的投影面积等因素),如果是则加入occluder列表,继续遍历这种方法有时也会采用一些与处理的过程,标记一些物体为好的occluder,或者生成一些virtual occluder(外形更加简单,近似代替一些occluder),这些都是为了减少运行时选择occluder的时间,以及让occluder的选择更加有效这种方法的缺陷是,无法考虑几个occluder共同的作用效果,有很多东西也许既不能被occluder a挡住,也不能被occluder b挡住,但是有了occluder a和b,你确实看不见这个东西了所以对于没有非常大的occluder的但是仍然遮挡很密集的场景,比如丛林,这个方法一点用也没有然而要想在run-time的时候考虑多个occluder共同的影响(在object-space中),是非常难以做到速度的保证(计算的代价太大)3.由上面两个例子,可以看出如果可以考虑多个occluder的作用影响,那么viewfrustum中的部分就可以限制得非常多,而且也可以处理更加复杂的场景但是像在object-space中处理这种情况实在是很难以很低的计算代价来获得因此一些基于image-space的方法就诞生了最普通的例子就是z-buffer.利用image-space来处理的好处就是image-space的可见性是由有限的元素(屏幕上的像素个数)来决定的,比起object-space有很大的优势但是依靠z-buffer已经到达了渲染阶段,是不够的有一种hierarchy z-buffer的做法,也称作z-pyramid,因为它生成一系列的不同精细度的z-buffer,比如,最大的z-buffer是32*32的一块suface,那么它生成16*16,4*4,2*2,1*1的另外4级z-buffer,每一级z-buffer对应上一级中的四个像素,并且取其中的最远深度因此我们在绘制场景的时候可以通过层次性结构,从前往后渲染,并且每次可以先拿层次结构中的结点的bounding box先进行比较(从最粗的那一级z-buffer开始),那么就可以非常有效的绘制遮挡关系复杂的场景这种方法我感觉非常有希望,但是唯一不足的是如果没有硬件的支持,考软件的方法来实现这种z-pyramid以及相应的检测,速度还是非常慢的因此我认为如果以后硬件开始很好的支持z-pyramid,那么这会是一个非常好的方法,说不定会成为一个标准方法,就像现在的z-buffer那样4.image-space确实是一个解决多个occluder共同影响可见性的好途径,但是没有硬件的支持,使得他的效率降低然而对于某些特殊的环境,可以采用一些特殊的方法,使得我们也可以将objec-space和image-space的方法结合起来从而得到一个比较好的trade off.这种场景就是那些2.5d的场景,最常见的就是城市环境基本上,绝大部分在城市场景的游戏都可以看作是2.5d的环境,可见性的判断只要在2d的基础上考虑一下高度的因素就可以了因此这里有一个方法可以有效的处理城市的环境算法如下:首先将cell的划分严格限制在平面上(比如水平的地面上),比如256*256个cell的方格,大小和粒度可以根据具体的场景来决定每个cell记录属于该cell的objects(需要绘制的),以及该cell中最高object的高度为了提高效率,也需要事先标记一些良好的occluder,比如各个楼房的正面,不过这里有一个限制,就是occluder必须是垂直于水平面的矩形有一个surface buffer,比如我们这里的是256*256的一块surface对应各个cell,一开始该surface对应的z-buffer都是0,然后我们根据视点选择附近的一些occluder,可以选择上百个,(这是比object-space方法好的一点,一般的object-space算法只能是用少量的occluder),将视点与occluder形成的shadow volume以正投影视角(从天空上往地面的方向正投影)渲染在我们的surface上,这样surface对应的z-buffer上就留下了该shadow volume的高度,多个shadow volume的影响只要将他们都渲染到该suface上就可以得到,而且这种渲染可以使用硬件加速,所以可以使用许多occluder.最后对于每个cell的可见性判断,只要比较cell的高度和surface中对应的点的z-buffer的高度就可以判断出来了这里还有一点需要改进的是,直接读取z-buffer是非常慢的,所以必须用个比较好的办法,将这种信息转换到surface buffer上,将surface buffer的数据拷贝到系统内存中的代价要低很多具体做法如下:一开始surface buffer全部清0,对应的z-buffer设置为各个cell的高度然后关闭z-buffer check和write,现将view frustum以颜色1渲染到surface buffer上,打开z-buffer check,用颜色0渲染shadow volume,最后将surface buffer拷贝到系统内存,数据为1的地方就是可见的cell这种方法对于2.5d的城市来说确实是个好办法,不过他也有很多限制,比如对occluder的限制,你可能不得不为此专门写一个编辑器对于其他全3d的复杂场景,这种方法也不行了介绍了这些run-time的方法,我们可以看一下很多preprocess的方法,在run-time的时候计算可见性,对于一个相当复杂的场景来说,代价确实非常高而事先计算好可见性的一些方法却可以取得非常好的效果这种方法放弃了计算point to cell的可见性,转而计算cell to cell的可见性,这样虽然增加了可见部分,把一些不可见的cell也送入pipeline处理,但是preprocess却不用占用run-time的时间,这一节省大大提高了效率,因为在很多最坏的情况下,特别是在处理复杂场景的时候比起run-time就非常具有优势基本的做法是计算出在每个cell中任何一个视点可能看到的其他cell的集合,也叫做pvs运行的时候只要将pvs中的cell同时又处于view frustum中的cell绘制出来就可以了然而如何计算出好的pvs却是一件非常复杂的事情每个人也有不同的方法,具些简单的例子如下:1.在portal引擎适用的环境中,利用portal间形成的全影半影来计算pvs2.在cell的附近,选择一些occluder,然后不断的与周围的某些occluder形成一些virtual occluder(可以这挡住一些比较大的范围),然后再用这些virtual occluder去计算对其他cell的可见性3.有一种针对2.5d的城市环境的pvs算法,对occluder也仅限于垂直于地面的rectangle,基本计算都是在进行2d空间的visibility计算,只在需要的时候才进行高度的检测还有其他的一些算法,感觉都非常的复杂,我也还没有完全搞清楚,就不在这里乱说了lod技术lod技术(levels of detail,简称lod,多细节层次)在不影响画面视觉效果的条件下,通过逐次简化景物的表面细节来减少场景的几何复杂性,从而提高绘制算法的效率该技术通常对每一原始多面体模型建立几个不同逼近精度的几何模型在绘制时,根据不同的表准选择适当的层次模型来表示物体lod技术具有广泛的应用领域目前在实时图像通信、交互式可视化、虚拟现实、地形表示、飞行模拟、碰撞检测、限时图形绘制等领域都得到了应用,已经成为一项要害技术很多造型软件和vr开发系统都开始支持lod模型表示关于页游以下是我以前弄的一点心得和网友其它人分享的优化方案:1、将gameobject逐个禁用,确定影响性能的gameobject2、stats里面的draw calls & 三角形的个数,尽量减少draw calls的个数,据说上限是353、合并网格物体、合并材质张数4、不要用网格碰撞5、unity对带动作的模型渲染消耗比较大,如果是静态的不带动作文件的模型渲染不会出现效率问题,但是要确保只绘制屏幕内的东西6、batched越高越好, 整合渲染7、灯光能不用就不用, 阴影用个面代替, 投射阴影和实时灯光,简直就是framekller8、模型尽量减少面. 这个和drawcall相辅相成. 我上个游戏满屏只有400面, drawcalls都干到快90了,还一样能跑到30帧在真机上. 当然没有复杂的运动是另个方面9、模型尽量不要分开, 比如我现在坦克游戏, 车身和履带是分开的, 分别都是一次drawcalls10、最终输出的时候,在unity -edit - project setting - player 里, 把 othersettings - script call optimization 改成 快速, 但没有例外. fast but no exception低模和高模大众的通常说法是高模指的面数多的模型,看起来精细低模指的就是面数低了,看起来当然没有高模细致至于游戏一般为什么都用低模,因为游戏厂家要考虑大众的电脑配置了(一般都是用最少的面表现模型的大体形状)玩游戏的时候模型的每个面都得你的电脑去运算,面数多了无疑就给电脑增加负担使游戏不流畅了在max里,你把一个物体加上网格平滑命令,然后把迭代次数的值调到10 看看你的电脑是否能承受得了,旋转它看卡不卡在日常工作交流中,最通常的定义方式就是"用面数定义"如:上3000面的是高模上4000面的是高模上4500面的是高模上10000面的是高模单纯的用面数来区分"高模"、"低模"的话,不太精确百度上的说法:高模一般经过smooth处理&&这是从做法上讲的高模一般用于影视、广告低模一般用于游戏&&这是从用途来说的高模一般用于烘培,贴在低模上&&这是从制作法线贴图上来说的个人认为, 有一种定义方式比较合理对面数有控制的模型&&低模对面数无控制的模型&&高模这既体现了制作方式,也体现了模型用途一般来讲:用于渲染的模型,都不控制面数基本上可以用模型编辑的一切功能达到效果用于效果图,影视动画,2d游戏(模型变为图片了),法线烘培&&而用于即时显示的模型,需要控制面数,基本使用editablepoly一般只用于3d游戏也许建筑家装中所用的一个桌子模型是100面,一个3d游戏角色是3000面 但是桌子仍然是高模因为没有人规定你桌子要控制在多少面内你可是肆意倒角,肆意平滑,只要你电脑扛得住,你高兴,你甚至可以模型做出桌子上的纹理,把100面的桌子做到100万面而3d游戏模型,限定了面数你一定要控制在3000上下的范围内总之, 从面数上去定义"高模"、"低模"的绝对错误的个人推荐的定义是: 对面数有控制的模型&&低模对面数无控制的模型&&高模渲染调用(drawcalls)每个物体的一个不同的材质都会引起一个单独的drawcall调用每一次drawcall都会引起引擎的一次额外开销,所以在关卡任何点观察时都要避免超过2000次的drawcalls不同的材质应尽量少的使用合并一些纹理(例如:如果你在同一个物体使用使用了2个不同的512x256的纹理,应该把它们合并到1张512x512的纹理里)正方形的纹理会更好的应用到纹理流每个物体尽可能使用越少的不同材质,对象的每一个材质都会引起至少2次的drwacall,如果开启阴影就是3次延迟渲染使用,延迟渲染在cpu方面的开销比前台渲染开销要小的多,主要开销只在gpu渲染方面而之前前台渲染的多次drawcall可以用延迟渲染统一的一次屏幕drawcall替代场景复杂度通过关闭的门将房间隔离开使用过渡区域为没有遮蔽的环境使用雾效对于大物体使用visblocking/occluders在特别多对象的区域调整减小可见区域删除player看不到的地型平滑地表以减少顶点密度为每个物体调整可见范围设置最大drawcalls警戒值为2000,或者更小地表尽量使用越少纹理越好避免多种材质重叠不要覆盖多个非常大的透明层(transparent)或者添加层(additive)为美术资源设置合适距离的lod范围cpu性能使用尽量少的复杂的材质(性能成本便宜的)在cbuffer中尽量少的三角形(节约drawcalls,减少drawcalls的冲突)限制cbuffer中的覆盖的区域减少动画角色的骨骼数不要使用角色动画模糊(蒙皮需要更多的骨骼)谨慎使用texture streaming(需要解压缩)尽可能少的在天气效果中使用通明混合的物体(cpu计算雾效的近似值)物理代理体尽量使用三角形(要做碰撞检测)谨慎使用可破坏的物体gpu性能与分辨率无关的:使用尽量少的顶点渲染.(每个顶点是一个独特的位置和纹理坐标点)使用一个不太复杂的顶点格式使用尽量少的会投射阴影的灯光谨慎使用decals与分辨率有关的:渲染对象在屏幕上占用尽量少的象素使用成本较低的pixel shader(较小的灯光,较少的shader特性如反射,简单的shader)场景中每一种材质使用尽量少的纹理使用廉价的纹理格式(要尽量使用压缩的dxt1,dxt3,3dc/dxt5)使用mipmapalphablend比alphatest要慢,而alphatest又比不透明渲染的物体要慢延迟渲染的灯光要比正常的灯光要廉价,所有的光影响的半径应尽量的小如果需要一些灯光在一些区域的时候(如box区域),这会导致灯光大量的重叠,使用irradiancevolumes是非常必要的尽可能少的同时开启多种后处理效果,另外一种策略是减少后处理效果开启的时间不使用或使用开销小的全屏抗锯齿(msaa/fsaa)使用劲可能少的天气效果使用尽量少的地形材质混合内存使用:使用尽可能少的贴图使用一个低分辨率的纹理分辨率使用纹理压缩格式(dxt1最好,dxt5和3dc也是不错的选择)使用尽可能少的顶点使用尽可能简单的物理替代体使用尽可能少的动画使用尽可能少的模型或lod层级使用尽可能少的材质和粒子发射器使用尽可能少的道路谨慎使用贴花使用尽可能少的可投射阴影的光源纹理流:(与纹理传送带宽相关)可流化的纹理应该是正方形大小的(宽和高相等如:1x1 256x256)最好使用尽可能少的不同文理格式用来更好的做纹理池的统一管理每个区域尽可能少的使用独特的大纹理来减少i/o带宽的耗费严格遵守每平方米texels(个数)的规则(distance streaming是基于它的),使用r_texelspermetter 1来检查它不要尝试使用大于512x512的纹理大小(拆分一些大的纹理成小的纹理)尝试避免使用小于128x128的纹理单元(这会引起内存碎片),把同一区域的小纹理拼接他们成一个大纹理如果你仍坚持使用大的纹理集(texture atlases)(不建议),确保你不会使用这些物理到场景的不同区域(例如植被)通用的程序性能准则:越简单的材质使用越精简的纹理附加物(attachments)应该是可调整的,当在屏幕上过小是应该不显示他们眼睛根据距离是要关闭的,以减少眼球渲染上的消耗(如果把渲染眼睛的情况下)可摧毁的物体应该尽量让避免过快的散开(我的理解是爆炸的破损物体尽量散落的要慢,不要设置成太小的破坏体?)纹理展开时应该使用越少的顶点(展开成大块)贴花要谨慎的使用制订纹理分辨率(根据不同范围设置适当比例)设置阻挡地带体来减少物体渲染个数静态场景中使用protals可以带来更好的效率blockygeometry helps to get more for the same vertex count.(理解不了)重用几何体与纹理来减少内存使用避免在场景中使用独特的细节(尤其是一些复杂的场景中)需要多遍渲染的材质层比正常的要慢,谨慎使用在导出之前手动做reset xfrom和reset transformations操作,如果不做,这些值会被引擎检查出来生成断言,比如物理模型与渲染几何体不匹配原点应该在物体的包裹盒内部以避免与预期不一直的渲染结果跟踪解决控制台输入窗口显示的所有关卡错误级别的错误渲染调用(drawcalls)每个物体的一个不同的材质都会引起一个单独的drawcall调用每一次drawcall都会引起引擎的一次额外开销,所以在关卡任何点观察时都要避免超过2000次的drawcalls不同的材质应尽量少的使用合并一些纹理(例如:如果你在同一个物体使用使用了2个不同的512x256的纹理,应该把它们合并到1张512x512的纹理里)正方形的纹理会更好的应用到纹理流每个物体尽可能使用越少的不同材质,对象的每一个材质都会引起至少2次的drwacall,如果开启阴影就是3次延迟渲染使用,延迟渲染在cpu方面的开销比前台渲染开销要小的多,主要开销只在gpu渲染方面而之前前台渲染的多次drawcall可以用延迟渲染统一的一次屏幕drawcall替代顶点个数在引擎中uv边界会增加顶点个数,使用尽量少的uv边界顶点法向量会在一些硬边被分割,保证平滑的多边形减少硬边的数量物理代理良好的物理代理在降低cpu物理计算时间上是非常重要的,如果没有物理代理性能会变慢使用简单的物理代理体替代渲染模型来处理物理计算,减少cpu物理计算时间渲染几何体的物理计算应该只被应用于一些可破坏的三维体,如可破坏的树干物理代理替应尽量使用(图元)primitives尽可能利用粗糙的物体代理体处理角色碰撞和渲染集合体与子弹的碰状检测为每个物理代理替使用一组平滑体(只有软边缘)在材质编辑器的3d package中设置物理类型(set the proper physics type inthe material edtior of the 3d package)闭塞代理为大的物体设置角色视觉遮挡,使用闭塞代理替,使用单面的闭塞代理(因为默认多边型被视为双面),尽可能的简单,越少三角形越好物体的lod为每个美术资源设置lod层级,每个lod的层级中的多边形个数必须至少减少p以上利用3dmaxd的instancing和reduction 修改器减少lod岑寂的材质数于节省drawcalls良好的lod是的良好性能和良好资源外观的关键材质设置使用尽可能少的材质数量合并纹理减少材质数和纹理提取保持所有纹理使用crytif格式使用128/128/128作为默认漫反射颜色使用简单的灰色128/128/128或快速的色彩纹理做早期的纹理大小的实验,以获取一个合适的内存开销的解决方案确保所有纹理都做过性能检测植被在室外游戏中,植被是一个植被覆盖场景中非常大的开销,确保每棵数不超过1或2个drawcalls减少植被物体的材质数以节省drawcalls只使用最优化的shader在植被物体上减少多边型个数,因为这些物体会被在屏幕上绘制很多遍合并文理以减少材质数和最少的纹理提取(texturefetches)为树叶添加多边型以匹配文理减少overdraw(遮挡绘制),在树干上使用面片粒子尽可能使粒子特效有效,因为他们会带来很大的开销,对性能有很大影响,此外,尽可能的在不影响视觉的条件下用简单粒子替代标准粒子以减少性能开销frametime:如果你的frametime的目标是每秒30帧,那么每帧的消耗不应该超过33耗秒可以使用r_displayinfo 2来检测帧时间,或者开启性能评测模式(profile= 1)帧速率 = 1.0/1秒中的帧时间例如1.0/0.033(3) = 30gpu时间是非常依赖于屏幕的分辨率,如果使用fsaa和render target的格式,例如720p()并且hdr关闭越高的设置,性能越差具体而言,这以为着对于xbox360,如果你花费5毫秒做zpass,6毫秒做一般pass,10毫秒做阴影处理(如果开启这个功能的话),这加起来大概花费21毫秒,理论上gpu上的帧速率不会超过47帧非延迟渲染光照的开销太阳光的渲染使用一个简单的pass点光源的渲染使用一个单独的pass,可以被合并,最多一个pass处理4盏灯聚光灯渲染总是使用单独的pass这以为着如果你场景有阳光,你添加一个点光源,对于每个物体会带来额外的drawcalls的光源影响额外的drawcall开销意味着更多的数据需要被处理在cpu方面,每个drawcall会带来更多的填充率开销限制纹理数shaders读取纹理对于主机类和老pc硬件是非常昂贵的尽量使用diffusealpha的shader中gloss选项来替代发光贴图(glossmap)这将节省一个着色器的纹理读取你可以安全的使用不必担心任何质量的损失如果你使用这个功能并且你的光泽只有单色调,你可以通过高光颜色(specular color)中的颜色材质参数来调整对于植被的shader,使用merged textures选项对于叶子这意味着glossmap纹理的rgb通道包含了你的透明度rgb通道,glossmap alpha将会包含你的灰度光泽信息对于树干意味着diffusealpha包含了你的灰度光泽信息请不要忽视这点,因为它对gpu(减少读取开销)和cpu(更少的设置纹理采样的开销)两方面都有好处正确的使用shader着色器选项使用grassshader generation选项当你做草渲染的时候,这个选项是非常便宜的渲染方法,会生成所有阴影、使用最少的纹理读取,正确的使用这个选项是非常重要的,尤其是对主机游戏使用decal shader generation选项当你把一个材质当作贴花使用时这对于确保适当的渲染非常重要,比如你要避免z-fighting(z竞争)在某些硬件和一些渲染条件下另外延迟渲染(deferredrendering)将只能正常渲染不透明几何体/地表层/贴花,如果没有启动这个选项,你要重新读取normalmap并再次渲染和计算雾效water/riversvolumes当使用watervolumes和水下雾效的时候,如果是浅水应将density设置为0这样可以跳过雾效处理在在小范围可见区域内使用water volumes,如果要覆盖一个大区域的话尽量使用小块进行替代控制drawcalls,提升性能 - 东阳效果图制作TAG:,
家装效果图①
工装效果图②
建筑效果图③
景观绿化效果
其它效果图}

我要回帖

更多关于 手机 drawcall 原理 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信