1.关于unity静态批处理

unity静态批处理不是真正意义上的"静态批处理"把勾上的合并成一个mesh,
而是首先unity会先动态排序,判断渲染顺序以及静态批处理的可视。
比如有这种情况,我的场景中有4个cube和一个sphere,然后我的4个cube勾上了static静态,unity会默认帮我们静态批处理,
按照理想情况,我场景中的批次patches应该是2个,sphere和 四个cube合并后的Combined Mesh,但是,却会有这种情况。
unity静态批处理问题以及一些杂七杂八
什么,为什么会有3个batches,难道蓝色背景也是一个batches么?当然不是,unity的batches不会统计这个没有材质球的蓝色背景的。我们稍微转动一下角度,再来看一下。
unity静态批处理问题以及一些杂七杂八
怎么回事,又变成了2个batches?
就在我以为是不是unity的bug的时候,然后问了问我之前的一个大佬同事,以下是我的理解(不是原话):

我们之前写引擎的时候,我们把这种成为动态合批,
unity静态批处理不是真正意义上的"静态批处理"把勾上的合并成一个mesh,
而是首先unity会先按照顺序动态排序以及静态批处理的可视处理,因为你的球没有勾选static,然后插在了4个cube中间的渲染顺序(或者说挡住了某一个cube时,处于不可视的时候),这样unity就会先渲染2次合并后的Combined Mesh,第一次渲染球前面的Combined Mesh,第二次渲染球后面的combined mesh,因为这个球插足了破坏了合批,所以就是3个batches。
而我们更换角度后,球没有插足cube的渲染顺序,所以就不会破坏合批。

当然,这不是他的原话,但我理解的意思就是这个样子,然后我查了查相关的资料。
unity静态批处理问题以及一些杂七杂八
引用自
http://www.cnblogs.com/zblade/

所以联想我们项目以前的方案,会在代码里把mesh合并成1个整理,而且也会分块(具体的我只知道大概,因为我没有参与),然后后期我会查询更多的相关方面的资料来完善知识的扩充。

2.Unity中静态合批与ShadowMap的宏设置冲突问题

简单来说,unity内置的阴影可能会破坏掉静态批处理,原因是静态合批首先对场景物体进行了排序准备静态批处理,但是当引入了动态阴影之后,会去修改物体材质的shader接受阴影的宏开关,导致原本排序好的物体无法正常进行合批,从而导致之前静态合批之后理论上可以做到很低的Batches数值增加了很多,使得场景渲染的效率大幅下降。

关于这部分有详细的解说,比如
https://answer.uwa4d.com/question/5a0946fb545cfbcc70fd5ecc

3.未来shader的趋势是shader forge,或者unity自带的材质编辑器,

渐渐的会替代手写shader代码,就彷佛《我的世界》
内部生成shader代码的原理要懂,把shader模块化管理。
这部分也是大佬点透我的,之前一直认为我知道内部的shader代码能够手写就不需要学习shader forge材质连接线了,现在看来不是。有些无用代码,去看最终编译后的汇编语言,untiy(或者硬件底层?)会自动优化掉的。

mipmap能够优化带宽问题,远处采样小贴图分辨率低的贴图,而且据说采样小贴图的采样率计算量也会优化,不过没有证明。

最后,基础一定要好,懂得内部实现原理,底层原理,不要求精通,但最起码要懂一些。
图形的话,opengl是必学的。。。

相关文章:

  • 2022-12-23
  • 2021-06-25
  • 2021-05-28
  • 2021-05-16
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-09-26
  • 2021-10-01
  • 2021-10-05
  • 2022-12-23
  • 2021-11-10
  • 2021-06-20
  • 2021-10-18
相关资源
相似解决方案