这段时间做unity3d的优化,主要的入手是减少draw call。
    1、代码上主要是把一些零碎的同材质的合并成一个大的mesh。
    2、减少不必要的全屏后期处理。把摄像机的rendering path,由deferred修改为forward。这样修改的原因是,我们场景中只是使用了一个灯光,延迟渲染并没有很有发挥其优势,另外使用向前渲染的话,引擎的动态合并会有很好的作用。
     经过上面两部分的操作,draw call 减少的非常多,并且游戏在目标平台上也能流畅的运行。但是发现一个非常明显的问题: 在两个物体紧紧挨着的边缘会明显的有裂痕在闪烁,比如一个赛段拼接另一个赛段的连接处。
    一开始以为是depth buffer 的精度问题导致的 depth fighting。所以调整了摄像机的near clip,但也还是会出现,只是调整near clip也有限制,否则会影响游戏,在调整near clip和把抗锯齿anti aliasing设置调整4* 或8* 裂缝的闪现会没那么明显,但是同样存在。想使用w buffer 来代替depth buffer来试下,但是无奈不清楚unity怎么处理,(当时想,如果最后没办法就程序把连接的网格自己合并,这样就不会出现裂缝了)所以先停下做其他的了。后来想到之前这种裂缝现象怎么没注意到呢,至少是不明显的。所以觉得会不会是rendering path,不同导致的呢。
    分别build两个程序,使用不同的rendering path。确实是使用延迟渲染的不会有裂缝闪现的现象,而向前渲染会有,这真是使人摸不着头脑呀,两种不同的渲染方式 怎么会出现这样的情况呢?还是不相信是由于不同的渲染方式导致的,继续找原因,发现两个有裂缝闪现的mesh,是用的相同材质,想到会不会是动态批处理的原因呢?   
    使用向前渲染时在play setting中去掉Dynamic batching 裂缝闪烁的现象就不会出现了,最终确定是引擎提供的动态批处理导致的问题。那为什么用延迟渲染时没呢,那是因为用延迟渲染的话,引擎对动态批处理很有限,(你在4.x版本的unity上,每添加一个cube,就要增加两个draw call,而向前渲染的话,会帮你动态批处理,并不会每个cube都增加draw call)。
    知道问题所在,修改也比较容易了,但是为什么其Dynamic batching 会导致裂缝闪烁,这个问题还是有待研究,但是unity内部是如何实现的不知道。希望了解这方面的人能指点一二!

Unity3d 动态批处理的问题的更多相关文章

  1. Unity3d Static 静态批处理和动态批处理

    表示物体时静态的,多用于静止不动的物体,此外static有多种,有的用于烘焙,有的用于遮挡剔除 物理效果是rigidbody组件,和这个没关系,用transform.Translate 无法移动,因为 ...

  2. [Unity优化]批处理02:动态批处理

    参考链接: https://docs.unity3d.com/Manual/DrawCallBatching.html 原理: cpu每帧把可以进行动态批处理的网格进行合并,再把合并后的数据传给gpu ...

  3. 于Unity3D动态创建对象和创建Prefab三种方式的原型对象

    于Unity3D动态创建对象和创建Prefab三种方式的原型对象 u3d在动态创建的对象,需要使用prefab 和创建时 MonoBehaviour.Instantiate( GameObject o ...

  4. Unity3d 动态加载场景物件与缓存池的使用

    聊聊Unity3d动态加载场景物件那些事儿. 众所周知,在策划或美术设计完游戏场景地图后,一个场景中可能会存在成千上万个小的物件,比如石头,木箱子,油桶,栅栏等等等等,这些物件并不是游戏中的道具,仅仅 ...

  5. Unity动态批处理和静态批处理学习

    本文转自:http://blog.csdn.net/lyh916/article/details/45725499,请点击链接查看楼主大神原文,尊重楼主版权. 参考链接:Unity圣典:http:// ...

  6. Unity3D 动态改变地形

    直接获取TerrainData进行修改即可 using System.Collections; using UnityEngine; using UnityEditor; public class D ...

  7. Unity3D动态加载外部资源

    最近一直在和这些内容纠缠,把心得和大家共享一下: Unity里有两种动态加载机制:一是Resources.Load,一是通过AssetBundle,其实两者本质上我理解没有什么区别.Resources ...

  8. Unity3D动态读取外部MP3文件给AudioSource

    在PC端VR游戏开发中,需要动态加载本地的MP3文件,但是Unity3D不知道出于什么原因,到5.4.0也不支持MP3文件的外部加载(目前只支持wav和ogg). 因此要想通过www来加载mp3文件就 ...

  9. (转)Unity3d使用心得(2):Unity3d 动态下载动画资源——AnimationClip 的使用 - 斯玛特琦

    引言: 在使用 Unity3d 开发微端.或者网页游戏的时候常常须要将资源打包成 AssetBundle ,然后通过 www 的方式动态的下载资源.今天要分享的是我再动态下载 Animation 骨骼 ...

随机推荐

  1. BootStrap2学习日记22---点击展开

    先看效果: Code: <div class="accordion" id="accordion2"> <div class="ac ...

  2. B - Fill

    Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Practice UV ...

  3. Calculate the formula

    Problem Description You just need to calculate the sum of the formula: 1^2+3^2+5^2+……+ n ^2.   Input ...

  4. 数据结构【三】:简单优先队列PriorityQueue

    在数据结构[二]:简单阻塞队列BlockingQueue的基础上添加权限属性:priority,并控制enqueue时根据priority排序插入. 1.定义priority取值范围0~9 2.deq ...

  5. Oracle基础 (十一)字符串函数

    一.字符串函数 LENGTH(char1,char2) SELECT LENGTH('abc def gh') FROM dual; --获取字符串的长度,包含空格 结果: CONCAT(char1, ...

  6. 【Linux】gdb调试core文件

    编写服务器端程序,很容易遇到Crash问题,比较幸运的是Linux提供了core file,保留了Crash的现场.有时候,根据当前的调用栈,并且打印出当前栈的变量就可以分析出crash的原因,但是, ...

  7. 剑指Offer16 判断子树

    /************************************************************************* > File Name: 17_Mirror ...

  8. python实现发送邮件功能

    '''套接字是为特定的网络协议(例如TCP/IP,ICMP/IP,UDP/IP等),允许程序和接受并进行连接,要在python 中建立具有TCP和流套接字的简单服务器,需要使用socket模块,利用该 ...

  9. OpenShare新功能@2014年11月 [2014-11-30]

    新功能@Nov,2014 各门户层次主页布局自由编辑:升级为实时保存,这样用户编辑门户主页时,就算忘了点击“保存布局信息”,也不会丢失已做的工作 全方位支持匿名访问,支持构造公网以及extranet网 ...

  10. 让文字在标签li的底部

    <ul> {aspcms:navlist type=6 } <li style="border-bottom:1px solid #d4d4d4;padding-top:2 ...