美术资源超级压缩方法

如何在质量下降不大的情况下降低一倍的占用?如何让臃肿的美术资源压缩再压缩?

 

JPEG->WDP/WEBP

 

大部分项目都陆续废掉了JPEG,而最好的代替品是微软的HD Photo,wdp格式,在PSNR差不多的情况下,wdp能比JPEG小一倍多。

(wdp的encoder/decoder不好找的话,我这里有一份微软的库)

观察下面的演示图片不要缩放PDF,用100%显示才看得清楚差别

image

image

JPEG 16.18 KB,可以看出脸部方块已经很严重,头发等高频部分已经看不清楚,帽子和墙面质量损失严重,而下面这张WDP文件(HDPHOTO,XnView可以转换)只有13.85KB大小,质量却比JPEG好很多。(通常情况下峰值信噪比差不多的话,WDP能够小一倍):

压缩比从强到弱依次是:WDP>WEBP>JPEG2000>JPEG。因此换用WDP格式能缩小不少资源。

 

PNG->WEBP

非界面元素,仅仅是为了使用ARGB32的资源,可以用webp的带alpha有损格式代替,能节省不少。

 

实时纹理压缩

PS Vita里面已经大范围用到了实时纹理压缩方法,DXT格式存储纹理仅仅是为了方便显卡,但是它的地压缩率却害苦了硬盘。废除DXT格式,用wdp格式或者webp格式有损保存图片(不要用JPEG了,JPEG太差)。运行时动态载入并且动态生成dxt格式再载入显卡。如此在质量微弱损失的情况下,可以至少获得4-5倍的空间节省。

PS Vita使用的动态生成dxt的库叫:

Continue reading

Loading

Posted in 图形编程 | Tagged | 1 Comment

体育竞技游戏的团队AI

很多人问游戏AI该怎么做?随着游戏类型的多元化,非 MMO或者卡牌的游戏越来越多,对AI的需求也越来越强了。而市面上关于 AI的书,网上找得到的文章,也都流于一些只言片语的认识,理论化的套路,和一些简单的 DEMO,离真正的项目差距甚远,无法前后衔接成一条线,更无法真正落地到编码。

国内真正做过游戏AI的少之又少,东拉西扯的人很多,真正做过项目的人很少,因为国内主要以MMO为主,RTS比较少,体育竞技类游戏更少,而从AI的难度上来看,应该是:MMO < FPS < RTS < 体育竞技。作为实际开发过AI的人,给大家科普一下,什么叫做硬派AI。

硬派游戏AI,不是虚无缥缈的神经网络,用神经网络其实是一个黑洞,把问题一脚踢给计算机,认为我只要训练它,它就能解决一切问题的懒人想法。更不是遗传算法和模糊逻辑,你想想以前8位机,16位机上就能有比较激烈对抗的足球游戏、篮球游戏,那么差的处理器能做这些计算么?

硬派游戏AI,就是状态机和行为树。状态机是基本功,行为树可选(早年AI没行为树这东西,大家都是hard code的)。大部分人说到这里也就没了,各位读完还是无法写代码。因为没有把最核心的三个问题讲清楚,即:分层状态机决策支持系统、以及团队角色分配。下面以我之前做的篮球AI为例,简单叙述一下:

 

何为分层状态机?

每个人物身上,有三层状态机:基础层状态机、行为层状态机、角色层状态机。每一层状态机解决一个层次的复杂度,并对上层提供接口,上层状态机通过设置下层状态机的目标实现更复杂的逻辑。

  • 基础状态机:直接控制角色动画和绘制、提供基础的动作实现,为上层提供支持。
  • 行为状态机:实现分解动作,躲避跑、直线移动、原地站立、要球、传球、射球、追球、打人、跳。
  • 角色状态机:实现更复杂的逻辑,比如防射球、篮板等都是由N次直线运动+跳跃或者打人完成。 image

每一层状态机都是通过为下一层状态机设定目标来实现控制(目标设定后,下层状态机将自动工作,上层不用关心动画到底播到哪了,现在到底是跑是跳),从而为上层提供更加高级拟人化的行为,所有状态机固定频率更新(如每秒10次),用于判断状态变迁和检查底层目标完成情况。最高层的角色状态机的工作由团队AI来掌控,即角色分配的工作。而行为状态机以上的状态抉择,比如回防,到底是跑到哪一点,射球,到底在哪里起跳,路径是怎样的,则由决策支持系统提供支持。

Continue reading

Loading

Posted in 人工智能, 游戏开发 | Tagged , | 2 Comments

山寨的GameLoft

既山寨又垃圾的GameLoft游戏,吃过亏后,我也长记性了,下游戏之前先看是不是有GameLoft字样,有的话,立马跳过。但前两天,我居然忘了看厂商,花了若干美刀下了个封面漂亮的游戏,打开游戏一看,我立马傻了,下意识的觉得不好!GameLoft!,仔细一看,果不其然。所以说好了伤疤忘了疼,吸取教训呀。

Loading

Posted in 未分类 | 1 Comment

[转载] 本人在cygwin下完整工作环境的搭建(备忘)

       这算是一个变态的嗜好:力求在纯文本模式下完成一切可能的工作,并且还要在windows下工作。 下面的配置未特意说明的地方,要么是太简单不值得说明,要么是顺应了对应软件的默认配置行为。

1.基本环境

       从 http://www.cygwin.com 下载 cygwin.exe ,按其默认选择安装即可。以后逐步根据需要添加软件包。

       根据本人需求,额外添加软件包:unzip,zip,attr,shutdown

2.文字阅读/编辑/处理

       从cygwin选择下载安装: vim , xpdf ,  texmacs

3.文本模式的Web浏览器

       从cygwin选择下载安装: w3m ,  这是款类似vim的Web浏览器。

4.安装配置Cygwin X环境

       详见:http://x.cygwin.com/docs/ug/setup.html#setup-cygwin-x-installing
       通过cygwin选择安装:

           必选:  xorg-server , xinit 
           建议选择:xorg-docs , X-start-menu-icons

       启动X11环境:

           可以从Windows的开始菜单启动Cygwin X

Continue reading

Loading

Posted in 大浪淘沙 | Leave a comment

生成类苹果图标

修改了半年多的业余作品pixellib,基本稳定了。下面是用它生成的一些类似苹果系统的图标:

image

image

image

image

Loading

Posted in 图形编程 | 3 Comments

参考ZeroMQ改进服务器

今天参考 ZeroMQ的观点为我们的网络模块增加了一个“订阅模式”,及客户端包头用四字节表示,低24位为长度,高八位为“消息分类”。后端连接网络层的若干“频道”可以根据自己的喜好订阅“分类消息”,那么客户端发送该分类消息到网络层的时候,将会被抄送到订阅过该分类的频道。每个频道还可以订阅若干系统消息,比如连接开始、断开、时钟等等。

我们的服务器自2004年底到现在,一直是网络和逻辑分离在不同的进程(主机)中间,网络模块可以连接多个提供服务的“频道”,只是配合休闲游戏的模型,当前只有一个频道可以和特定玩家进行交互。不过其基于多频道的模型使得这次改进很容易,改了三个小时,又跑了几个小时的测试用例,基本通过。

以后交易,聊天,逻辑等,都可以分布在不同的频道里面同时为玩家提供服务了。

Loading

Posted in 网络编程 | 2 Comments

[讲稿] ActionScript3 入门讲稿

image image

若干年前学习 ActionScript的记录,下载地址:

http://www.skywind.me/mw/images/3/3c/ActionScript3.rar

Loading

Posted in 图形编程, 游戏开发 | Tagged | 1 Comment

[转载] Why I Love Python – Thinking in C++ 作者用Python后的想法

image image

他横向对比了: Perl, C++, Java, Python,然后给出了10大使用Python的理由,比较经典。

下载地址:http://www.skywind.me/mw/images/c/c2/Why_I_Love_Python.rar

Loading

Posted in 编程技术 | Tagged | 1 Comment