从引擎核心谈页游处理 flash平台和 webgl_html平台的硬件加速 2d处理

来源:互联网 发布:关于网络喷子的见解 编辑:程序博客网 时间:2024/04/29 19:45

 

flash的stage3d 以及  webgl    只要是两者都接触过人得会发现  他们其实是类似的

他们的硬件编程并没用多大的区别

唯一令我不能释怀的是 js的面向对象写的太痛苦 

但是从编程上讲 stage3d的东西全部完全可以移植到 webgl上去    而且处理手法 一样

下面说的无关平台   当页游中  有大量资源时如何发挥 GPU  flash 一样  哪怕webgl页游也一样

 

正如前文 本人的 yf2d引擎一样    <js版本在开发中>,当处理 比如人物角色  武器 等等海量图片  如何  处理 

 

在yf2d引擎中其实就是用Nd2d的 batch 技术    但是 有一个缺陷  那就是 贴图最大的比例是2048*2048

 

也就是一张最大的地图集 也只有 2048*2048 不可能将所有的素材全部放在一张地图上

 

最开始的处理手法 是      比如   人物衣服放在 一层《服装贴图集》 武器放在一层《武器贴图集》   每一层都是一个贴图集

 

效率毋庸置疑这样渲染的次数最少  ,但是这样处理发现人物遮挡不能正确处理《武器装备 和人去分层了》 因为  武器 和人物已经分开   我这样做最先是按照GPU效率最大化利用去做的

最终发现这样不行  只有 对素材较小 的才有用 能在2048*2048全部画出来的才有用 

最后只能按照第二套方案  将每一个人物  就是一个Batch对象  ,将这个对象里面的所有图片,  人物服装    武器 刀  坐骑马  以及后面的随着游戏要变化加的一些新装备都可以放进去 这样 然后通过这些东西生成新的texture ,不用担心 2048*2048完全够用

但是这样的话 一千个角色 就要 渲染一千下  我测试了一下   我只设置了值为1000 个对象 采用一千个渲染对象  发现  帧频稳定60  当然我已经加了地图滚屏  地图滚屏 就是 一层 一个Bath对象     在滚屏下 1000对象 60帧频

 

 最终得出这样一个结论   就是一个 角色对应一个batch对象   能达到 1000对象  这样完全满足 游戏需要 ,基本上 不可能 一个屏幕1000人  就算的 也可以游戏适当处理 屏蔽些

 一个角色一个batch对象    下面就开始  处理 batch所需要的贴图

  唯一需要注意的是 贴图是动态生成的  比如 人物有 服装 fBitampData      武器 wBitampData  坐骑 ZBitmapata 

我们就需要将这三个BitampData合成一个Texture 来进行处理 

 

在整个游戏中 我们可以对所有的 角色的Texure统一处理      使每 个组合只有 一个Texure    比如 f1 w1  z 组成Texture1  

f2 w2 z2 组成Texture2      我们通过唯一ID 将已经出现的缓存下来   当有相同的对象创建时直接取Texture  当然  根据游戏的不同 也可以临时创建Texture  不同情况  不同处理

 

 

上面的东西 完全适用webgl  这些 处理手法和 平台无关   coco2d  也是采用 Batch的手法  总来说batch是王道         和平台无关