开始的小测试环境

      上图是前天构造的一个测试小环境,模拟个体能够获得(得到输入)自己的当前速度、角度、HP以及最近目标的相对位置,离目标越近HP减少得越慢,存活时间越长者适应度越高。刚开始的情况是完全随机,模拟个体完全在一个随机的最小结构神经网络的支持下处理自己的输入。这样的设置相当简单,程序员几乎不做什么工作!接下来就是运行,运行,再运行。个体会不断地发生变化最终达到这个小环境设计者心里的样子吗?到底明天它会不会自动设计出策划要求去达到这个简单任务的NPC呢?
 

      几个月前,我为自己的一个实验性项目构建的分布式模拟环境基本就绪。该环境采用了HLA网络结构组建,基本上完成了对HLA核心网进行的二次封装,另外构造了一个广域网的扩展接入系统方便更广泛的人机交互!目前这个体系的基本稳定为我的试验项目奠定下了第一个基础。

      这三年来我一直致力于图形引擎的开发和应用工作,之前在MSRA的纯图形学以及图形硬件的研究工作也奠定了足够的图形基础,因此对这个试验项目而言,一个较为完善的软件研究平台和图形支持系统也很快基本成型,并且能够很方便地投入到研究和设计工作中去。这可以说是试验项目的第二个基础。

      前段时间,我在这个平台上对随机宇宙(过程宇宙——Real-Time Procedural Universe,这方面主要研究自动、随机地生成各类拟真的图形、图像、逻辑内容)的一些基础算法、架构的研究模拟和实现(link),使得我更加确信CH系统在内容上人机交互的支持能力也一定会相当强大,特别是对人机图形界面,任何内容的变化都能实时表现在远程的图形客户端上。

 

      两个月前,我觉得系统底层的一些必要支持已经基本到位,于是我开始构造这个项目的第三大基础架构(即CH必须是一个智能的、自组织的、演化的系统),另外我也希望能提出一种自下而上的开发方式。我知道,CH这样一个大系统,必然是一个“复杂系统”。对复杂系统的研究目前学术界也仅有几个前沿的方向,比如人工智能、人工生命、神经网络、分形、细胞自动机等理论、模型及算法。既然认为CH系统必须要是一个智能的自组织世界,就必然涉及到这些学科方向。这几年来我一直借助在游戏/网络游戏领域的工作机会,探索它们应用的可行性,但长期来对人工智能的有限应用总是让人找不到方向。要么必须在一些明确的问题域上面求得具体的实现(比如A Star),要么必须要找到游戏内容相关的复杂具体模型(比如路点模型、有限状态机模型等等),这对程序开发人员和策划人员来说实际上都是很痛苦的。严格的说,目前我在游戏上的这些工作还谈不上与复杂系统有什么关系,仅仅是一些自上而下的常规开发策略。

      幸喜的是,早就有不少游戏/软件开发公司开始尝试类似自下而上的开发方式。比如,据说Maxis公司的《模拟城市》近几个系列中就采用了人工神经网络技术;不少单机策略或者射击游戏中,开发公司在设计时也离线进化了不少游戏角色和策略;EA在最新的模拟类游戏Spore(孢子)中也很可能采用了一些进化方面的算法或者技术。

      其实在复杂系统中,细胞自动机、神经网络、进化算法、粒子群算法(比如蚁群算法)等领域都是具有良好的应用前景(当然是什么时候大规模应用我们就不去追究了),开始我打算直接在CH系统中使用人工神经网络(ANN),但是在试验中发现,ANN除了本身需要一个较为难描述的环境模型外(特别是实际游戏应用,网游就更不用说了),如果要达到一个通用的、优秀的、无监督的求解性能的话,ANN的算法也是要相当考究的,目前这方面也正是ANN领域研究的重中之重。应此在游戏应用或者模拟研究中,我觉得不大可能寻求到一个现实的实时自适应ANN系统来满足要求,而且毕竟我们不是搞研究而是搞应用的。


一个反相传播的神经网络。设计这样一个网络对于复杂输入和输出的环境来说“几乎”是不可能的。


      为此前段时间我投入到细胞自动机、蚁群算法等领域中去找寻一些应用上的可能点。都怪“元胞自动机(CA)”前不久闹得很火,霍夫曼(自称CA之父)也曾大言不惭CA能颠覆人类得一切科学,谓之“新科学”。拜读其大作以及进行一些试验后,发觉一些思想确实非常新颖独到,很多试验也相当有趣。但是总觉得对CA的研究大多以证明某某理论为结果,没有一点预测能力(即科学的理论总是可以预测的),总有点事后诸葛的感觉。我也很难从CA引出一些能辅助设计的路子来(nb的霍夫曼认为“宇宙就是一巨大的CA,除了实实在在地注视、观看这些规则会如何呈现其结果之外,没有任何办法去预先知道这些结果”,那研究这个理论有个P用啊)。况且它和蚁群算法一样,问题域或者空间维数的增大不可避免地需要庞大的甚至不且实际的计算量(这点蚁群算法还算好些)。


   

      一个有趣的报告是Wolfram公司的Paul Jean做的,他研究基本细胞自动机(Elementary Cellular Automata,ECA)家族中的第146号,发现了一个奇特的现象。以某个特定的初始条件开始,146号ECA在经过300多步演化之后会突然出现一个相变行为:本来随机排列的一些黑白方格在一个时间步内突然集体变成了白色,并且这个白色区域经过几步演化之后逐渐衰退,因而会在时间图上留下一个大的三角形区域。
      这种现象对于146号ECA来说属于一种极其罕见的行为:只有在特定的初始条件才能发现,Paul称这一现象为Monolith,即“独石碑”。Wolfram常常把自己发明的细胞自动机比喻成当年伽利略发明的望远镜,透过先进的工具,我们可以得到一些全新的科学观察。

      Spore这样的游戏让我看到了另外一个可能方向——进化。从Spore的介绍以及细节上看来,似乎不是严格意义上的实时进化,而且也不大可能会有形态上面的进化(形态进化需要更为有效的图形学理论以及强大的计算能力)。游戏过程仍然是处于人为选择或者策划设定的进化模拟,大多数内容仍然是事先设定好的,不过模型的有机化和进化的思想和表现倒是其卖点。Spore的发行一拖再拖,似乎Will Wright(就是开发《模拟城市》和《模拟人生》那个家伙哈)不把它做得完美就不罢休似的,所以最终版本出来是什么样子还不得而知,期待中…… ^-^

      在Spore这个游戏感受的诱惑下,我考查了许多进化相关的游戏或者软件系统的资料和Paper,国际上也有很多的小项目组专门做这方面的探索,从各种复杂系统小程序到Tierra/Avida的代码进化,从Framsticks的形态行为进化到AI.Planet那漂亮的生物乐园。真还没有想到,居然处处都有进化人工生命的影子! 



Panspermia中进化出来的生物和世界




Framsticks: 
               1. A creature made of sticks, each is specialized in some function. You can see three receptors – touch, smell, equilibrium, and a red muscle. 
               2. Underwater creature seeking energy.
               3. Hunt: a creature trying to catch and kill the other one. 



AI.Planet中丰富的进化世界


      对GA(遗传算法)的详细考查过后,我决心将遗传算法简洁高效的进化思想应用到CH系统中来,正巧我已经准备好了一个很好的HLA模拟体系,加上对ANN比较熟悉,我选取了来自NNRG(nerual netwaoks research group)的一些研究成果来进行攻关和改进。NNRG虽然看起来仅是国际上的一个神经网络研究小组(The group is part of the Artificial Intelligence Lab in the Computer Science Department at the University of Texas at Austin),但是从它的研究领域和项目中可以看到,它对基于NN应用的一个很大领域都有涉猎,而且它融入了很多其他领域的成果。NNRG有个NEAT项目,是一个关于自适应地从简单到复杂构造一个满足问题域的神经网络,适应算法上又采用了GA的思想,应此性能和效果都比较好,对我而言它更重要的是还不用关心NN的具体模型和优化细节!有趣的是,NNRG甚至也出了一个游戏,叫NERO,可以离线进化一些很好的策略来进行战斗对抗。
      我现在拥有的HLA核心网络上可以进行较好的分布式模拟,因此我对NEAT进行了改进,将基因的进化和ANN的适应度评估和应用较独立的分开来。应用NEAT的实时进化特性(rtNEAT),加上我对核心网扩展的广域网接入系统,人类(玩家)也可以很好的加入互动,这样设计有利于未来在网络游戏具体项目上的应用。

 

      由于基因的进化在服务器上进行,并且可以随时保存和重加载,以网络游戏的角度来看,实时进化在不间断的人机互动中可以表现得很好。再从游戏的设计上来看,策划无需设定甚至分析具体的任务实现过程(特别是NPC),程序员不用为实现这个过程煞费苦心做复杂的设计(况且每个程序员设计出来的算法不一定就是最优的,策划也不一定具有相当丰富的专业知识和经验。而遗传算法在理论上来说就可以达到全局最优),所有的设计工作都是在长期的在线运行和与环境(甚至真人)的互动中进化达成;策划也可以设定广泛的游戏环境和属性(这目前是策划大量的工作)而不用再担心诸如增加一个属性就会造成各个系统的相应修正和程序配合修改这种事情(比如NPC从不能攻击到支持攻击,环境中新增加一种叫做“food”的道具)。
      经过这段时间的试验,我想再从策划的角度来看,策划设计一个东西就可以考虑是走自上而下的分析路子,还是较为傻瓜的自下而上的新路子了!目前我只是提出这样一个设计方向,还有待进一步试验来观察它的实际应用效果。


      BTW,由于这个小环境试验前几天才设定好,这几天还没有来得及去运行它,反正进化的基因可以保存和再加载,可以说设计过程是连续的,每天都可以出新花样。所以我在接下来的日子可以经常报告这个CH小世界的情况,多多截屏。比如下周发现新进化出(设计出)了一个光吃不打的farmer类角色或者一个光打不吃的warrior类角色;又或者在下周某天我加入了一种新的食物类obj或者阻挡类obj,他们又会涌现(复杂系统??)出某些行为模式出来。暂且将之后这类日志归入博客上的“CH世界大事记”一栏吧,嘿嘿。

[转自我的博客:http://xiaopplus.blog.163.com,实验正在继续,欢迎提出建议]

posted @ 2008-04-11 10:10 小P 阅读(20) | 评论 (0)编辑
       其实目前随机过程已经可以实现大量东西了,但是和自然界比起来还是不值得一提啦。

       和环形山一样,星球表面在固定点以少量参数甚至可以生成植物、生成建筑物,这可能是下一步的目标,但我最近迷住了进化神经网络,正在考查其在游戏中的应用可能性。

       随机星球,也就是星球引擎,现在已经不少了,各处都有介绍。随机过程的建筑物其实也相当Cool,如果Infinity能让我们俯冲扫射星球表面的建筑物,那是相当的Cool啊!http://www.vterrain.org/Culture/BldCity/Proc/index.html,这个地址是一个过程建筑物方面的网络节点,大家有兴趣可以去看看。

这是随机方法生成的建筑物

用在纽约市就是这个样子


       植物,Infinity由于专注于太空,对随机植物没有做什么应用,其实如果星球表面采用这个技术的话,也很Cool,目前植物系统有很多方法实现,比如传统的左旋系统即L系统,或者进化方法等等。都非常漂亮,这里我有个网络节点的链接:来自于形态进化算法之父的网站,上面的生物很漂亮:http://www.genarts.com/karl/panspermia.html

这个不是海马,叫“天马”,呵呵,只用了几十个参数吧

        大家感兴趣的话可以下载他网站上的视频,就是从宇宙中掉出来的种子,然后变化的图像,全部使用进化算法创建的图像,异常精彩!


        这里也有一篇我目前关于这方面的介绍和我的项目进度:http://bbs.gameres.com/showthread.asp?threadid=100231,属于“过程图像”和“复杂系统”领域,其实我的目标主要是能在像Infinity这样的MMO上面应用这种可以自进化或者交互的的人工生命,大家试想如果Infinity不仅仅是图像漂亮和宇宙的宏大,每个NPC(敌方战舰或者星球表面的一群居民)能非常聪明的和你交互(不像现在这样的重复又重复),能够因为你的影响而改变(进化),那是多么“恐怖”的事情啊!^-^

posted @ 2008-04-11 10:03 小P 阅读(146) | 评论 (2)编辑

      上半年,从构建好一个基础的HLA网络(S方面的计划)以来,我一直在试图创建一种充满着各种星球、星系的宇宙内容体系(R方面的计划)。由于备受Celestia和ONeil的“A Real-Time Procedural Universe”感染,我一直就梦想着能够将随机但接近现实的宇宙图景动态地整合进SRI网络中。加之在我相当喜欢的游戏EVE里,总是有把飞船开向行星表面这样难以忍受的冲动(现在看来,在游戏Infinity中也采用了类似的技术飞船可以开到星球或者空间上表面上去)。我最终决定让SRI网络在一开始就挑战随机的庞大宇宙!
       Celestia有接近现实的星系际物理体系,数据均来自像NASA这样的宇航机构。而ONeil的过程宇宙,又是从随机函数(比如柏林函数)中得到的灵感。我希望能够在SRI网络中将它们应用上来。

Celestia项目目前应该有200万到300万的星体数据了吧!

Celestia基于现实宇宙的漫游系统

       基于对柏林函数的理解,我对ONeil的项目进行了一些移植,到目前为止基本上实现了以极少量参数生成一些接近现实的星体并动态地绘制它们,下面是一些实时渲染的截图(所有随机函数均为可预测随机函数):

远处观测地球尺寸的星体,大概用了七八个参数。地形由柏林函数生成,贴图根据高程自动生成。

接近星球表面后,可以看到由另外一种随机函数动态生成的环形山

      接近地面后可以看到更多的细节,比如用公告板实现的一些草地。该图是应用了阳光在大气中散射后的效果。

地球的卫星——月球规模的天体

       由于业余条件下开发得非常慢,加之最近迫切想进入下一个更大的目标(I目标,在博客上一篇专门的文章中我将描述这个),我本来想搁下这方面的开发。但最近看了一部日本动画片《英雄时代》,很有感觉,加之做一件事情应该有头有尾,所以我决定还是尽快继续将星体数据(属性)整合进HLA网络收尾,以达到一个能在SRI系统中应用的程度。


 

       目前该渲染模块的性能一般,未来某个时候我回再回来进一步对其进行优化,并且支持星体表面的云层以及大气散射效果。

BTW,从游戏/交互上面来看,我一直以来就有一些想法,基于原来在CH项目中的设计,SRI人类界面的操作模式可以包含第一人称、第三人称、(EVE、魔兽等)和第三人称管理(家园)这三种视觉模式,模式的切换视交互内容的需求而定。



link: http://xiaopplus.blog.163.com

posted @ 2007-08-09 23:15 小P 阅读(182) | 评论 (1)编辑
 这是到2005年的一些屏幕截图,EDS还在开发中,还没有准备大量的Demo,我将在2006年补上这些


HDRC

2004年基于GPU的高动态图像压缩研究



HDRC

2004年基于GPU的高动态图像压缩研究



EDS Client Sample

一个简单的图形客户端示例



EDS Model Editor Sample

一个简单的模型编辑器示例



EDS Server Sample

一个简单的服务器端示例



2D Game Sample

一个2D游戏示例



MS HDR Sample by EDS

移植了微软HDR场景的EDS版本



2D Tech

EDS 的2D图像能力(剪裁、变换、渐变、透明、缩放)



EDS SceneMan

EDS的场景管理模块示例,这是一个采用简单的控制台脚本测试的3D场景、模型加载、骨架动画示例







posted @ 2006-04-17 22:57 小P 阅读(638) | 评论 (0)编辑

24     EDSim实例(研发就是搭积木——Toy Bricks Development

         模块=组件=积木!EDSim将任何需要研发的技术模块都作为引擎的一个普通组件进行加载,并根据该组件的CAM定义决定适当的调用逻辑。

即注即用!研发人员一旦定义好该组件的CAM,即可注册进EDSim引擎,于是该组件将在极其良好的研发调试环境中运行,由于可以自由使用各种支持组件,研发人员可以完全且仅仅投入到该模块技术功能/算法的开发中去。

2.3.1 实例一(一个服务器系统)

       这是一个简单的单一服务器游戏世界模拟系统,其组件加载顺序可以是这样:

Console/Log
VarSys
TimeSys

Pryer (optional)
DBSys
(数据库支持)
Net(网络支持)

SubManager(物质管理器)
ObjManager(物件/体管理器)
AccountManager(帐号管理器)

Sim(虚拟机)

       这里每一个模块作为一个组件被加载,其中ESM组件(EDSim支持组件)可以在系统任意地方作为Singleton被访问。搭建一个服务器就像积木一样,其代码大致如下:

        RegisterESM( EDS::CConsole );
        RegisterESM( EDS::CTimeSys );    //only this one takes frame time
        RegisterESM( EDS::CPryer );
       
RegisterESM( EDS::DataBase::CDBSys );
        RegisterESM( EDS::Net::CNet );

        //Data managers
        RegisterESM( EDS::Server::CSubManager );
        RegisterESM( EDS::Server::CObjManager );
        RegisterESM( EDS::Server::CAccountManager );

        //Simulator
        RegisterESM( EDS::Sim::CSim );

       可以看到,每个组件就对应一行注册代码,EDSim引擎将自动按照注册顺序以适当的调用逻辑进行调用,如下图:


 6. 一个简单服务器

2.3.2 实例二(一个客户端系统)

       这是一个可以显示上述服务器模拟世界的简单图形客户端,其组件加载顺序可以是这样:

Console/Log
VarSys
TimeSys

Net(网络支持)
ClientSubManager(物质管理器)
ClientObjManager
(物件/体管理器)
ResourceMan
(资源管理器)
Pryer (optional)

ClientSim(图形世界虚拟机)

MainDXUIDXUI 界面)

       其代码大致如下:

        RegisterESM( EDS::CConsole );
        RegisterESM( EDS::CVarSys );
        RegisterESM( EDS::CTimeSys );    //only this one takes frame time
        RegisterESM( EDS::Net::CNet );

        //Data managers
        RegisterESM( EDS::Client::CSubManager );
        RegisterESM( EDS::Client::CObjManager );
        RegisterESM( EDS::CResourceMan);
        RegisterESM( EDS::CPryer);

        //Simulator
        RegisterESM( EDS::Sim::CClientSim );

        //MainUI
        RegisterESM( EDS::CMainDXUI );

       运行如下图:


 7. 一个简单客户端

2.3.3 实例三(一个模型编辑器系统)

这是一个可以对上述模拟世界的物质进行编辑的图形编辑器,主要功能在模型渲染编辑组件中开发,其组件加载顺序可以是这样:

Console/Log
VarSys
TimeSys

Net(网络组件)
SubManager(物质管理器)
ResourceMan(资源管理器)

Pryer (optional)
RenderModel(模型编辑组件)

MainDXUIDXUI 界面)

       其代码大致如下:

        RegisterESM( EDS::CConsole );
        RegisterESM( EDS::CVarSys );
        RegisterESM( EDS::CTimeSys );    //only this one takes frame time
        RegisterESM( EDS::Net::CNet );

        //Data managers
        RegisterESM( EDS::Server::CSubManager );
        RegisterESM( EDS::CResourceMan);
        RegisterESM( EDS::CPryer);

        //ModelEditor
        RegisterESM( EDS::Sim::CRenderModel);

        //MainUI
        RegisterESM( EDS::CMainDXUI );

       运行如下图:


8. 一个简单的远程物质编辑器

2.3.3 实例四(一个HDR技术模块研究系统)

这是一个对2004年我在基于GPU加速的图像高动态范围(HDR)压缩技术上的研究系统的EDS移植,加载的组件除了GPUGHDRC模块外,其余模块与积木三用的组件别无二致!

  

9. GPU GHDRC 研究系统

posted @ 2006-04-17 22:56 小P 阅读(475) | 评论 (0)编辑

2.体系架构(System Architecture

       EDSim中的图形引擎架构采用 较为标准的DirectX 调用逻辑,内部组件相对独立,组件一经注册后,引擎将对各个功能模块自适应地进行调用(不同组件模块会有不同的调用逻辑)。EDSim核心引擎采用单线程以保证效率,基本体系完全采用C++STL开发,支持Win32,采用UNICODE,具备良好的可移植性。

21     组件对象模型(COM

       EDS对多数复用组件采用了基于COM思想的抽象接口IEDSUnknown


2 COM抽象接口

22     组件行为模型(CAM

应用程序中任何组件或者模块都有特定的调有逻辑,有的模块需要一次初始化就够了,而有的模块则需要不断被调用以更新自身的状态。对于常规应用程序(包括网络应用、数据库应用、DirectX图形应用等),EDSim将各种组件按照行为需求抽象为几种基本的抽象类型。

23     EDSim支持组件(EDSim Support Modules - SM

       EDSim积木式地加载各种组件,虽然整个进程范围只具有一个Singleton——EDSim Core EngineECE),但是由于ECE对基本支持组件进行了绑定,所以各支持组件在项目进程的任意位置任意时刻均可以快速访问。在应用了包装支持组件指针的宏之后,所有的支持组件都可以被看作单体(Singleton)来访问。

       新的研究组件(Research Modules)或者技术模块一旦产生,均可以作为新的支持组件(支持积木)被ECE绑定。这样,EDSim本质上是无限可扩展的。

posted @ 2006-04-17 22:55 小P 阅读(221) | 评论 (0)编辑

1.2           特征(Features

EDS的最终设计目标是拥有支持以下主要特性的支持组件:

l         可扩展的高效图形引擎

l         高效的声音引擎

l         高效的物理引擎

l         插件技术

l         人工智能

l         高可扩展性的通用服务体系

l         分布式接入体系

l         资源内容提供工具

l         强大的研究(研发)调试平台

1.2.1 可扩展的高效图形引擎(EDSim Graphics Engine

       General Info:

              Graphics API                       DirectX

              Operating Systems                Windows/Xbox

              Programming Language        C/C++/Python or LUA?

              General Features                  Object-Oriented Design / Save/Load System

       Graphics Features

Lighting                              Per-vertex | Per-pixel | Volumetric | Lightmapping | Radiosity | Gloss maps | Anisotropic | BRDF

Shadows                              Shadow Mapping | Projected planar | Shadow Volume

Texturing                             Basic | Multi-texturing | Bumpmapping | Mipmapping | Volumetric | Projected | Procedural

Shaders                               Vertex | Pixel | High Level

Rendering                            Fixed-function | Stereo Rendering | Raytracing | Raycasting | Deferred Shading | Render-to-Texture | Voxel | Fonts | GUI

Scene Management               General | BSP | Portals | Octrees | Occlusion Culling | PVS | LOD

Animation                           Inverse Kinematics | Forward Kinematics | Keyframe Animation | Skeletal Animation | Morphing | Facial Animation | Animation Blending

Meshes                                Mesh Loading | Skinning | Progressive | Tessellation | Deformation

Surfaces & Curves                Splines | Patches

Special Effects                     Environment Mapping | Lens Flares | Billboarding | Particle System | Depth of Field | Motion Blur | Sky | Water | Fire | Explosion | Decals | Fog | Weather | Mirror

Terrain                                Rendering | CLOD | Splatting

1.2.2 高效的声音引擎(EDSim Sound Engine

       2D Sound | 3D Sound | Streaming Sound

1.2.3 高效的物理引擎(EDSim Physics Engine

       Basic Physics | Collision Detection | Rigid Body | Vehicle Physics

       目前融合物理引擎ODE

1.2.4 插件技术(EDSim Plugins

       独立开发的插件DLL将拥有和研发模块(Research Modules)相同的功能环境。不同的是,插件DLL是动态链接的。

       Plug-in Architecture

1.2.5 人工智能(AI

       Pathfinding | Decision Making | Finite State Machines | Scripted | Neural Networks

1.2.6 高可扩展性的通用服务体系

       强脚本化的虚拟机系统,高度抽象的数据描述和开放的数据库服务。采用分布式计算的核心服务网络可以实时模拟一个巨大的虚拟世界。

       强大的标记数据(如HTML,XML)服务体系,多类型服务(HTTP)。

       网络底层支持:Client-Server | Peer-to-Peer | Master Server

1.2.7 分布式接入体系

       多类型接入接口(Internet,移动),通用交互协议。非图形化和图形化的接入端系统(即图形化的客户端)。

       网络底层支持:Client-Server | Peer-to-Peer | Master Server

1.2.8 资源内容提供工具(EDSim Content Tools

       丰富强大的资源内容创建工具,支持远程资源提供者接入体系。

       Tools & EditorsScripting | Built-in Editors

1.2.9 强大的研究(研发)调试平台(EDSim Research Platform

EDS最初是作为研究/研发平台开发的,不特定于具体项目,但是其思想、架构以及扩展性可以用于实际项目,并且也可以作为试验引擎。

出于研发的目的,一个研发运行平台需要有相当丰富的调试支持周边系统,开发者不应该为每一个新的技术模块都构造一些常用的底层基础或者周边的程序代码,重复地发明轮子是不理智的。EDS的研究体系是一种通用可扩展的开发平台,该系统包含了积木化的模块调用架构,可在运行环境中动态配置加载如3D图像引擎、调试体系、性能测试、文件体系、命令行控制台、日志系统等基本的支持子系统以构造研发环境。

1、该平台将极大加速独立技术模块的研发,让模块研发从程序界面、运行调试、3D调用逻辑的重复实现中解脱出来,使研发人员可以完全投入到模块即其算法的研究中去。

2、在EDSim研究平台上研发的任何模块具备良好的代码重用特性,去掉极少的调试宏,模块代码甚至可以不加修改地移植到实际项目中去。

3、极高的模块重用性。新的模块一旦研发成功(比如新的基本类型、XML WrapperNet WrapperDB Wrapper、物理引擎、声音引擎、虚拟机、特效),又可以作为EDSim的支持模块(Support ModulesSM)或子系统被加载。这样,EDSim本身是无限壮大的!更重要的是,EDSim的每一个研发结果都会被参与或者使用EDSim研究的人所熟悉,这样不但提高了研发成果的利用率(重用率),也避免了未来的重复开发。

比如A研发出了Lua C++ WrapperB研发出了MySQL Wrapper,如果只针对某特殊项目或试验而作,那么在项目结束后,该模块(技术)就很可能束之高阁或者只有开发者AB本人在使用其功能,很难为其他人所用!

又比如一个网络游戏,如果我们能进一步将其虚拟机、界面、网络服务体系都独立出来,则即使一个网络游戏本身,也可以将其大部分构件作为EDSim的研究组件(Research ModulesRM)进行高效率的开发,因为这些部件在EDSim框架下是既独立又能够相互协作且无缝结合的!

4EDSim本身是一个可扩展的3D引擎(DirectX引擎),核心采用基本的C++STL类写成,可以在任何Win32平台上以窗口或者控制台方式运行,对于非图像应用(比如服务器、网络中间件),可以相当方便地移植到Linux平台上。

5、作为一套开发基础库,EDSim以尽可能使用现有通用类型为原则,降低了学习难度并减少熟悉时间的开销。EDSim中大量使用C++基础类型和STL模板类,图形部分使用Microsoft DirectX基本类型,一般不生造新类型(很多小组为了跨平台性,不得不创建很多封装类型,甚至包括封装C++简单类型,使人产生强烈的陌生感)。

6、支持测试驱动的开发,融合了CPPUNIT的测试机制,通过自动化测试保证软件质量。

posted @ 2006-04-17 22:54 小P 阅读(203) | 评论 (0)编辑

1.概述(Overview

经过几年来在各种应用系统、游戏、研究平台方面的研发工作,我最终决定开发一个高度开放的集成环境,它就是EDS。EDSimEDS)是Extensible Distributed Simulation Environment的缩写,即可扩展的分布式模拟环境。它可以作为一套适合于海量虚拟内容的创建和模拟以及大规模交互式接入的全方位解决方案。

1.1           技术积木(Tech Toy Bricks

像游戏这种特殊的虚拟交互模拟系统,已经涉及到计算机科学的方方面面,它要求将各种计算机软硬件技术充分融合在一起,在整体上一致发挥它们的功效。

EDSim(EDS)不是一套独立开发的引擎!他利用自身具有的强大集成特性[1],吸取各种独立技术的精华,对外表现为一个统一的、高效的平台体系。

所有你拥有或者敬仰的最好的技术模块,EDS都能将它们转化为架构支持的通用部件,甚至能够采纳它们作为自身的支持组件。在使用EDS开发产品的过程中,这些技术模块就像同一个品牌的积木一样被简单灵活的搭建。同时,在EDS架构的协调下,任何技术模块(积木)对其他积木而言都是能够高效访问并且相互协作的!

我们将不惜一切代价地寻找最优秀的技术模块,将它们集成到EDS之中,让这些技术的能力得到充分结合和一致体现!

posted @ 2006-04-17 22:52 小P 阅读(187) | 评论 (0)编辑
     2004年在MSRA的时候,我对始于2001年的CH调研活动作了一个总结,对那篇描写我初衷的文章CH Dream进行了修改,并写下一篇后记:


         我写这篇初稿的时候,没有那种传奇似的游戏。我对面有位开发人员,他每天从开始工作到结束下班,电脑屏幕的右面都会开着一个叫做ZMUD系统的窗口,当时我也不知道他们为什么会有如此大的瘾。
         我写这篇初稿的时候,《黑客帝国》这个电影还没有在中国大肆推进。我不得不承认我是个不时尚的人,我在2002年晚些时候才看到这部电影。当时的我相当振奋,这场面描述与我的梦想是多么得相似啊!而且它是在视觉听觉上真实地给我展示了这样一个场面,这是我难以想象的。

        在2003年,我修改了CH系统,使之更加开放化、模块化、规则化。可以参考我的文档《CHWS总体设计》。
       在2004年1月的样子,我和几位同学认为可以先在教育网上实现一个虚拟世界,利用教育网络的资源优势进行研究。我们所有的教育网上的同学,都可以通过脚本语言系统成为二次开发人员,你既是玩家,又是物质的创造者,更可以是剧本的编写者。看来,我们起码也要先实现一个虚拟通信楼,再到虚拟电子科大吧^_^。
       可惜的是,我现在在MSRA做毕业设计,我不能和同学们继续进行了,但我不会停止我的研究。
       传奇这类游戏仅仅依靠暴力主题就让大部分年轻人们难以自拔,甚至导致在政治法律上产生难题。如果这已足够让我们感受到这样类似系统的力量,那么,如果CH系统的梦想能够实现,我想借用在好莱坞影片《独立日》中,美国总统按下核弹启动按钮前的一句话来表达我的矛盾心理。那就是,"希望下一代不要怪我"。


                                                                                                     小P 2004年2月 于MSRA
 

posted @ 2006-04-17 22:20 小P 阅读(126) | 评论 (0)编辑