1、蒙皮网格动画改顶点动画
空间换时间
2、Animator LOD
远处动画降频
3、Animator Instancing
同模角色、花草树木、体育场里的观众
4、慎用MeshCollider
低模或改胶囊体
场景模型合并:Mesh.CombineMesh,
在线合批:程序运行中实时的合并模型,如果场景中模型数量、位置不固定,则必须在线合并
离线合批:程序启动之前利用unity的合批功能,提前把模型合并好
动画模型合批:在Hub里面下载Animation-Instancing直接拖到项目里面去,所有人物动画的模型就有有带脚本的动画模型
CPU:mainthread(主线线程,MonoBehviour), render thread(专门的一个线程来控制我们的GPU)
Bathches:游戏场景的物体,分几个批次,提交给GPU来绘制;
Saved By Batches:多少物体被合批绘制了;
Set Pass Call:每次绘制的时候,我们要将Shader等参数设置到渲染管道;(消耗性能的)
Shadow Casters:阴影开销;
Visible Skinned Meshes:游戏场景中可见的SkinnedMesherer的物体的数目;
Animations:动画的开销;
阴影开销,看不见的;多人场景的时候;
屏幕的低和天空盒占据了两个Bathches
优化动画插件:AnimMapBaker
将动画生成到shader,并合批;
合批有几种技术:GPU instancing
800分两批:是因为显卡没处理一批,三角形的数目是有上限的;
第一批数目N,第二批M N+M=800
N-1 M-1 N-1+M-1=(N+M)-2=800-2=798
什么是内存
.物理内存
-CPU访问内存是一个慢速过程
-减少Cache miss
-ECS and DOTS
-台式设备与移动设备内存架构差异
-没有独立显卡
-没有独立显存
-CPU板上面积更小,缓存级数更少,大小更小
-Androld内存管理
-内存基本单位 -Page
-内存杀手 -Low memory killer
-内存指标 -*SS
-内存指标
-Resident Set Size(RSS)
-Proportional Set Size(PSS)
-Unique Set Size(USS)
-Unity内存管理
-Unity是一个 C++引擎:
-底层代码完全由C++写成
-通过Wrapper提供给用户API
-用户代码会转换cpp代码(112cpp)
-VM仍然存在
-Unity内存按照分配方式分为:
-Native Memory
-Managed Memory
-Editor & Runtime是不同的
-Unity内存按照管理者分为:
-引擎管理内存
-用户管理内存
-Scene
-Audio
-DSP buffer
-Force to mono
-Format
-Compression Format
-Code Sizs
-AssetBundle
-TypeTree
-Lz4
-Lzma
-Size & count
-Resoures文件夹
-R-B Tree
-Texture
-upload buffer
-r/w
-Mip Maps
-Mesh
-r/w
-oompression
-Assets
Unity Managed Memory
-VM内存池
-VM会返还内存给OS
-返还条件是
-GC机制
-Boehm
-Non-generational(非分代式)
-Non-compacting(非压缩式)
-Memory fragmentation(内存碎片化)
-Zombie Memory(僵尸内存)
-无用内存
-没有释放
-通过代码管理和性能工具分析
-GC机制考量
-Throughput(回收能力)
-Pause times(暂停时长)
-Fragmentation(碎片化)
-Mutator overhead(额外消耗)
-Soalability(可扩展性)
-Portability(可移植性)
内存最佳实践-Managed内存
-Don’t Null it,but Destroy it (用Destory,别用NULL)
-Class VS Struct
-Pool(池中池)
-Closures and anonymous methods(闭包和匿名函数)
-Coroutines(协程)
-Configurations(配置表)
-Singleton










网友评论