对一个一万个vertex, 十万个index的网格模型, 大体消耗的内存为
1e4 * ( 32bit(position) * 3 + 32bit(normal) * 3 + 2 * 32bit(uv0) + 32bit(uv1) ) + 1e5 * 32bit(tangent) * 4
0.38mb + 1.52mb = 1.9mb ( 不包含其他 meta 信息 )
如果滥用高模网格, 尤其是没有用LOD( level of detail ), 吃干净内存简简单单 ( 尤其有出现数十上百万顶点的模型在游戏里出现, 一个模型就会造成麻烦
---
介绍一种优化方案 impostor, 通过对mesh 360°, 每隔一定角度对它进行拍照, 生成一张大贴图,
在运行时根据照相机视角位置对贴图进行采样, 可以最大程度的优化内存和drawcall
---
问题在于如果角度间隔太大会导致运行时, 摄像机转到一定角度时产生画面突变
而且对于模型的材质细节, 该方案无法满足, 最多在生成贴图的时候再生成一张法线图来对光照进行简单模拟
---
优化效果, 对于1024 * 1024 的贴图, 采用 DXT5 / BC3 压缩方案, 内存占用可以控制到 240kb~, 加上法线图等, 也依然是可观的收效 ( 计算仅基于对 1w 顶点的模型来算, 如果模型精度更高, 收益会进一步上升, 因为不论模型精度如何, impostor 的成本始终是一致的
对于gpu的成本, impostor 几乎可以忽略了
---
试用于大量采用极高模型精度的远景物件, 且没有 lod 的游戏
---
原模型在同位置的对比图
---
太棒了