Files
obsidian-notes/4Archives/动态图集/动态图集.md
zzzisfunnyboy ab75441581
2025-11-28 08:44:02 +08:00

38 lines
1.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
tags:
- 性能优化
- 动态图集
---
---
### 目的
- 减少*零散图标*导致使用不同材质球的批次
- 需要注意*内存(在显存中)*的开销,如果释放策略不对,有可能导致内存泄露
- [[2Areas/游戏开发/Texture、Texture2D与RenderTexture|Texture、Texture2D与RenderTexture]]
- [[通过Unity申请的RenderTexture的内存在显存中还是在内存中]]
### 过程注意
- 算法
- 通过
-
- 负责记录有哪些图片以及所在的位置和对应的PageId
- 插入策略
- 在页满的时候先找外部传进来的策略先释放掉RefCount\==0的位置
- 再根据权重重新排列
- 计算重新排列后的空间是否足够插入
- 回调
- 当页因为释放/重排等原因变换位置的时候需要触发区域变换的回调通知到每个涉及到的图片Handle
- 释放
- 定时器+脏标
- 每次释放重置定时器的倒计时,在倒计时结束的时候如果为脏标,则触发重排重新计算权重
- 脏标干净的时候不触发定时器的tick
- Debug
- 需要告知页的数量
- 每个handle的refCount出生时间最后调用时间所在页Id所在区域
- Blit
- 需要注意不要使用SetPixel因为这种方法是CPU的耗时
- 使用Graphics.Blit这种方法是告知GPU往RT上Blit
### 结果
- 一张2048 * 2048的图片对于主场景能减少20个批次左右
- 方便为未来的HUD功能做铺垫