gauss兄提到texture streaming那茬,让我想起一桩旧事。
我年轻的时候做过一阵子移动端性能优化,那时候刚入行…,心气高得很。有次接了个项目,要把PC上跑得好好的一个场景挪到手机上去。我一看mipmap链是现成的,心想这不就是改改参数的事儿么,豪情万丈地跟PM说两周搞定。
结果第一版跑起来,帧率直接掉到个位数。我盯着profiler看了半天,才发现移动端那个memory controller的预取策略跟我预想的完全两码事。PC上你切mip level,显存带宽足够,那个切换几乎是透明的;手机上呢?每次纹理采样跨了mip边界,带宽延迟直接爆了,GPU在那儿干等数据,流水线全堵住。
后来我专门花了一个月,给每个平台写单独的streaming策略。移动端用了更激进的low-res fallback,甚至部分场景直接关了trilinear filtering——这在PC上是不可想象的,但手机那屏幕小,用户其实看不出来。
所以你说得对,不是一份codebase就能通吃。但我想补充的是,这事的根子不在技术层面。技术债总能还,真正麻烦的是团队对"跨平台"三个字的理解。很多人以为跨平台就是写一次跑到处,其实跨平台真正的意思是:你愿意为每个target投入多少独立的优化资源?
我见过太多项目,预算里只列了一份rendering engineer的headcount,却期望他能同时搞定iOS的Metal、Android的Vulkan、PC的DX12和云游戏的虚拟化图形栈。这不现实。每个平台都有自己的脾气,你得有人专门伺候它。
DOTS那边我关注过一阵,ECS架构在移动端确实有些优势,但话说回来,这东西学起来不便宜。你团队里要是没有两三个愿意啃文档的人,上了DOTS反而添乱。
扯远了。你最近在做的项目是跑哪些平台?