Unity大世界模块记录
地形分割/场景分割/异步加载
- Terrian分割,一个地形块 = 一个场景,
- 场景异步加载卸载
- 场景物体的加载卸载
- 多场景编辑操作
目前工作流:大世界由一个大场景(所有场景物体)分割
光照烘培
Terrian光照信息烘培以及正确加载
场景物体光照信息烘培以及正确加载
烘培完大场景的Lightmap后,再将光照贴图打包,记录每张贴图
运行时动态设置当前lightmap以及刷新场景物体的Lightmap数据
静态物体合批操作
静态合批:会增加包体以及内存大小,不考虑使用,
动态合批:限制过多也不考虑使用,
GPUInstacing:减少DC,使用CommandBuffer.DrawMeshInstanced更好
GPUinstacing光照贴图:https://www.xuanyusong.com/archives/4640
优化GPUInstancing:https://www.xuanyusong.com/archives/4683
BatchRendererGroup:https://zhuanlan.zhihu.com/p/105616808
SRPBatcher:不减少DC,加速CPU设置(减少SetPass Call),对于移动平台提升不是很明显,
SRPBatcher与GPUInstacing只能同时使用一种,GPUInstacing主要用于场景内重复的树等
,交互和碰撞等可以使用一个空碰撞体来实现,而SRPBatcher拥有实体,使用起来更方便
如果场景里Material多于5个 使用SRPBatcher会优于GPUInstacing
动态/静态合批/GPUInstancing/SRP Batcher:https://shimo.im/docs/6wk89JDtgQ6jcxjT/read
关于场景物体优化策略:
- GPUInstancing用于不可交互的草/树 BatchRendererGroup需要com.unity.rendering.hybrid包,官方用于DOTS渲染
- SPRBatcher: SRP材质支持就行 使用它就不用管静态/动态合批了
- 静态合批:不使用SRP还是要用,不过目前来说用处不大,还会影响内存
- 动态合批:条件太多,使用不当还会造成性能下降,不用
阴影
- 光照烘培能够正常设置,其烘培的阴影也正确了
地形刷 不能使用内置的,很耗性能
地形拼接问题 接缝处插值过渡(高度+贴图等)
结合天气系统
项目链接
相关链接
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Skier!