2d游戏引擎png8(调色板)图片渲染构想
2013-07-14 17:04
225 查看
所谓调色板就是保存256个颜色数据的数组,然后图片数据使用这256个数组中的索引表示,这样一个颜色就只占8位,同时大多数情况下还能够达到真彩色的效果。但是调色板毕竟不是真彩色,在现在的游戏做的越来越绚丽,并且显卡越来越牛x的时代,调色板就没有太大存在价值了。
原本现代游戏引擎已经基本抛弃调色板的使用了,但是手机游戏的兴起和最近png8的使用让我有了一个新的想法。
原来在端游时代,我们不会如此在意内存和客户端体积,但是手游时代就需要精打细算,一兆一兆的扣数据。 正因此,png8的图片格式显得非常有价值。他使用调色板的数据索引形式,体积比png32或png24的真彩色图片减少60%~80%,并且借助算法的优异性,压缩后的图片与原来图片一般无二(详细请查阅上一篇文章,里面有介绍相关工具)。我的游戏的绝大多数图片都是经过png8压缩的,甚至很多图片(颜色比较少的背景图片)png8比jpg还要小一半。
但是游戏引擎(cocos2d-x)在加载png8的时候直接把其扩展为32位真彩色数据,然后当做正常png图片数据来进行渲染,这么做很简单,但是由于颜色位数直接扩展,所以内存占用上png8与png32是等价的。
我认为应该有更加酷的解决方案。理想情况下,png8的内存占用应该是png32的八分之一。排开渲染效率问题,这几乎就是一个通用的压缩纹理。
我的思路是这样的(注意,还没有试验和制作),从png图片中读取调色板信息,然后把其保存成一个调色板纹理挂接到真实纹理数据上面,png8图片创建时直接把调色板索引数据传入显卡,然后渲染使用特殊的shader,这个shader会自动从调色板纹理里面取颜色数据,返回真实的像素信息。这样只消耗八分之一的内存就可以达到很好的效果,并且理论上渲染效率也不会降低太多。 虽然shader切换会有一定的损耗,但是完全在可接受范围内。
最后,我认为,这个方案完全是可行的,并且一定是可行的。因为sdl依然还保留了调色板功能。一个最优秀的2d游戏引擎,应该是把核心的功能做到极致的,外层接口由安全易用的。
原本现代游戏引擎已经基本抛弃调色板的使用了,但是手机游戏的兴起和最近png8的使用让我有了一个新的想法。
原来在端游时代,我们不会如此在意内存和客户端体积,但是手游时代就需要精打细算,一兆一兆的扣数据。 正因此,png8的图片格式显得非常有价值。他使用调色板的数据索引形式,体积比png32或png24的真彩色图片减少60%~80%,并且借助算法的优异性,压缩后的图片与原来图片一般无二(详细请查阅上一篇文章,里面有介绍相关工具)。我的游戏的绝大多数图片都是经过png8压缩的,甚至很多图片(颜色比较少的背景图片)png8比jpg还要小一半。
但是游戏引擎(cocos2d-x)在加载png8的时候直接把其扩展为32位真彩色数据,然后当做正常png图片数据来进行渲染,这么做很简单,但是由于颜色位数直接扩展,所以内存占用上png8与png32是等价的。
我认为应该有更加酷的解决方案。理想情况下,png8的内存占用应该是png32的八分之一。排开渲染效率问题,这几乎就是一个通用的压缩纹理。
我的思路是这样的(注意,还没有试验和制作),从png图片中读取调色板信息,然后把其保存成一个调色板纹理挂接到真实纹理数据上面,png8图片创建时直接把调色板索引数据传入显卡,然后渲染使用特殊的shader,这个shader会自动从调色板纹理里面取颜色数据,返回真实的像素信息。这样只消耗八分之一的内存就可以达到很好的效果,并且理论上渲染效率也不会降低太多。 虽然shader切换会有一定的损耗,但是完全在可接受范围内。
最后,我认为,这个方案完全是可行的,并且一定是可行的。因为sdl依然还保留了调色板功能。一个最优秀的2d游戏引擎,应该是把核心的功能做到极致的,外层接口由安全易用的。
相关文章推荐
- 2D游戏引擎Allegro 系列教程(四) 文字渲染及显示汉字的方法
- 2D游戏引擎Allegro 系列教程(三) 加载并显示图片!
- WEBGL 2D游戏引擎研发系列 第二章 <显示图片>
- 2d游戏引擎png8(调色板)图片渲染构想
- CutJS – 用于 HTML5 游戏开发的 2D 渲染引擎
- 非典型2D游戏引擎 Orx 源码阅读笔记 完结篇(7) 渲染流程
- Lua2D游戏脚本引擎(渲染OpenGL) (源码放出)
- OPhone平台2D游戏引擎实现——场景、图层、元素(一)
- 【手游游戏引擎】学习游戏开发的两个方向 Cocos2d-x 和 Unity 3D/2D (一)
- android 2D游戏开发,引擎设计(三) 实验脚本编写与纸娃娃系统
- 开源3D&2D游戏开发引擎之GoDot简单介绍(一)
- Cocos2d-x 是一个支持多平台的 2D 手机游戏引擎
- 使用盖莫游戏引擎2.1.1的线程渲染功能
- (转)游戏引擎中三大及时光照渲染方法介绍(以unity3d为例)
- Unity3D 渲染顺序统一解决方案(主要是2D游戏)
- PixiJS - 基于 WebGL 的超快 HTML5 2D 渲染引擎
- WEBGL 2D游戏引擎研发系列 第一章 <新的开始>
- WEBGL 2D游戏引擎研发系列 第五章 <操作显示对象>
- 推荐一款2D游戏引擎:HGE
- 2D游戏引擎制作:窗体封装和唯一窗体运行