`
javahigh1
  • 浏览: 1227788 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

心情随笔:随便聊聊一些自己在做GamerClass时的感悟吧。

阅读更多

从这次下决心完成Gamer Class引擎开始到现在,已经一年整了,心中感慨万千,回头看看,好像也没做出来什么东西。

DX10支持?具备一定自由度的自适应Shader系统?自动序列化?装饰型的编辑器和游戏系统设计?相互独立的游戏上层模块?渲染无关的上层平台系统?场景图与渲染层次分离的引擎设计?

很多东西也仅限于概念而已,并且,也没有什么太新的东西,好像都是些老生常谈。实现也未必是好的,开源后可能是一片板砖——亦或是更为悲哀的、没有板砖。

我其实一开始并不是想做引擎的人,与很多同龄人一样,我们是从红白机时代开始,度过了十数年游戏的人生。虚度与否,沉迷与否,让那些政客吆喝就够了,个人的一生,所要解决的往往不是那些虚无飘渺的理论问题,而是生于自然,起于功利,成于道德,归于天地。我与同时代的人们没有任何不同,都是怀揣着一个做游戏的理想,来到这个行业里,却发现处处是政治问题。到头来,只能躲进小楼成一统,管他冬夏与春秋——老老实实做自己的Engine Coder。

人总是要有点理想的,从不从政,当不当官,拿不拿钱,钱多钱少,这不是问题,问题是怎样能完成个人的理想和抱负。个人的理想和抱负可以与产业重合,就哺乳这个产业,不能跟这个产业重合,至少可以提升自己。因为有了这个初衷,就有了Gamer Class。我是一个游戏者,一个希望做游戏的人,虽然强制把一颗螺丝钉扔到了Engine的岗位上,拧死在了那里,但毕竟这个螺丝钉是带有个Gamer的印记的。于是不管领导主观愿望如何,这个螺丝钉还是会处处体现出一个Gamer的Engine思想:

一个引擎,若要是连只会玩游戏的人都能用,那该是多好的事情呢。”

但是要完成这一步并不容易,至少这个目的,时隔6年后的今天,我仍然没有完成和达到。事实上,这是一个人完成不了的。因为游戏在不同人的心中是不一样的。

Gamer Class现在的理念,很多来源于闭门造车时,亲身体验到的困惑和烦恼。几年前,我们从Direct Draw的时代走来,很多时候,图形是一切的根本,那时候,没有见到过优秀的游戏引擎,没有见到过优秀的游戏解决方案。我们常常为了一个良好的图形系统设计而惊声尖叫,OGRE是那个时代工作的核心,阅读,摘抄,适应,但是,直到最后,使用OGRE,也没有做成什么像样的Demo,只是完成了少许几个图形演示而已。

从事工作几年来,特别是自己私底的游戏系统习作,以及上海的经历,使人感觉到,一个成熟的游戏开发行业,图形,还远远的不够。我既不是唯图形论者,也不是图形无用论者,但一个图形系统完成后,美术和策划如何在这个图形系统上作出游戏来?美术倒是可以完成演示,但真正的关键,并不在于这里,而是在于一个游戏与另一个游戏根本不同的地方:游戏玩法和游戏性的考虑。

有人把实现这一切的根本归结于编辑器。诚然,编辑器很重要,编辑器非常重要,但只要有了编辑器,就能够满足人民群众日益增长的物质文化需求么?也未必。相反,编辑器所编辑的数据和流程,往往是与具体项目的具体游戏系统绑定的,取决于具体的游戏系统设计。这也就意味着,一个新的项目,几乎总是需要一套新的编辑器,而且这些编辑器总是在翻新,修改,更正。创意的表现,取决于编辑器系统的强大——或者不如更加直接的说——取决于游戏系统的强大。一个处处充满了假设、关联、耦合的游戏系统,也就命中注定无法实现自由洒脱的创意。而表现力相关的图形系统,在这套游戏系统中,只不过是一个狭窄的小角落。

一个游戏几乎从来不会因为图形系统本身而中断开发进程、甚至废弃开发项目——因为图形系统最多只是这个系统的一个有机组成部分,仅此而已。

开发一个游戏引擎,而不去顾虑到游戏系统,那这个游戏引擎都能做到些什么呢?最后不免沦为一个更好的,甚至可能还未必更好的OGRE罢了。一个成熟的团队,应该是创意能够得到充分展现和发挥的地方,不会因为平庸的程序体系,而使得优秀的创意处处掣肘。编辑器固然重要,但它也仅不过是游戏系统的一个外在的表象,仅此而已。

毕达哥拉斯还是谁曾经说过,“一切都是数”。应该是指,任何事情都像数那样,有一套深层次的灵魂来维系着这些事物的运转和运作,就像矩阵往往也具备几何意义一样——用于维系它们的就是深层次的一个灵魂。天行健君子以自强不息,地势坤君子以厚德载物,乾坤两卦从根本上就决定了《易经》唯物辩证法的根本地位,洋洋六十四卦,描述了人生、政治、军事、社会、文教,但根本原则已然不越乾坤。大千世界,无奇不有,引擎开发千变万化,但也总归是有一个核心灵魂的。

举U3为例,U3有设计完好的两个重要系统:Player-Controller-World-Pawn上层游戏系统和SceneProxy-Scene Interface-PDI场景图/渲染系统,前者是其游戏层次组织的核心(虽然写在Engine工程里,但其实是上层游戏系统),后者是图形-场景图系统组织的核心。理论上,如果我们要做一个RTS,只需要提供不同的Player(玩家抽象层次)、Controller(玩家控制模式)、World(游戏世界)、Pawn(玩家可控制游戏对象)即可。英雄、兵种只是不同的Pawn,World可能很简单,使用四叉树渲染和打格子的AI体系,玩家点中Pawn后切换到相应Pawn的Controller,一般是右键移动、A+左键攻击移动,再选中技能后切换到相应技能的Controller,可能是范围技能的选择区域,也可能是单体技能的选择目标,也可能是自身技能的开启关闭。

而场景图和图形分开,理论上就可以独立的提供新的场景图,新的渲染场景组织,新的图形渲染技巧。

但这两个体系设计再好,也背不住U3根本理念中,解决方案式的设计理念——这个理念认为程序员不应该去修改U3体系代码本身,所有的解决方案应该由U3的开发者提供。以至于我们经常在U3模块的编码、外层的包装中发现与体系多有不符的情况。场景图和渲染分开的设计很好,但解决方案却将这两者强行揉杂到了一起——一个World,一个Hash,使得场景图和渲染体系辛辛苦苦的分离变得一点优势没有,反而增加了复杂性和笑柄。而被大量外在概念和系统包覆的Player-Controller-Pawn-World体系,也过多地做出了适合Epic开发模式的假设,因而变得毫无悬念地臃肿、高耦合。

但凡一个系统发展到了“一个帝国,一个元首,一个上帝”的阶段,离这个系统的死寂也就不远了。

有些引擎专制而有效,但难免耦合过高,无法扩展。有些引擎分散而豪迈洒脱,但难免没有体系,难于组织。太多的自由意味着没有自由,太少的自由意味着死气沉沉——引擎的道理,也正如社会,正如数学,正如世界,正如天地四方谓之宇,正如古往今来谓之宙。引擎的问题,也正如编程语言的问题一样,事实上是一个哲学问题,一个权变问题。在哪些问题上经天纬地,在哪些问题上权衡变通。这个问题上,没有必然的法则,100个人不仅会有101种做法,更重要的是,我们应该容许每个人有自己的做法。当99.9999%的人都认同一个应用程序的概念的时候,.NET就提供了一个Application来满足这个概念。但当窗口设计器的概念稍微可能有那么一点点不同时,.NET费尽心机提出了类如设计时、运行时、Adorner等的概念,来完善这个设计器系统。诚然,以我一介草民,区区小白的设计能力,不足以与.NET大神相提并论,但是,人大牛走过的牛印,小生不才,蝼蚁一个,也总是可以爬过去的吧?

系统设计这东西本来就没有绝对对错,100个人可能有101个不同的想法。曾经我的一个关于编辑器的想法,被一个刚进公司不到一年的好友驳得体无完肤,因此才在另一个朋友的帮助下,开始了跟.NET学习使用装饰型的编辑器设计方案。当然,这个设计也未必优秀,开源以后,更加欢迎拍砖的朋友。

一个5年经验的程序员的设计,未必就优秀于一个1年经验的程序员——不同人对一个事物有不同的认识,不同人下来想的问题不同,而且各自所在的高度不同,仅此而已。——一个优秀的设计,从来就是会同讨论、相互补益的结果。如果说一个体系的设计,不能由设计师独断专行,不能由设计师天马行空是一种悲哀的话,那么一个游戏系统,遇到一个策划需求,卡住了,完成不了了,噎死了,难道就不是设计师的悲哀吗?一开始就想独断专行,天马行空,不去询问需求,不去揣度需求未来的发展,不去征求意见,不去共同讨论,窃以为,这也不是长久之道。大处着眼,才能小处着手,高度决定态度,细节决定成败。真正能从设计上与你有不同意见的人,才是真正的肝胆相照的朋友。

兵无常势,水无常形。项目的问题千变万化,大部分情况下,我们都需要根据实践的需要,根据项目的需要,经过大量的数据验证,经过有经验的人的猜测——在这个处处充斥着等级和吃人礼教的封建社会,当然、显然而且必然还要有一些领导主观意志的成分——来得到一个具体的设计本身。具体的体系组织,总是根据项目而有所不同。做引擎,是为了游戏,新技巧,新方法,是为了游戏,理念,也是为了游戏。游戏,有时候从商业利益上可能有时候未必如此,但其本质上依然可能会有一个要求,就是这个游戏一定要与那个游戏有所不同。游戏是创意,特别是独创的产物。否则,相同的两个游戏,所拼的就只能是商业,而非是游戏本身了。

这也就注定了项目与项目的不同,游戏与游戏的不同。那么,一个可能会适应几年后各种游戏变化的体系,是否是可能的呢?我认为是可能的,道理很简单:不同人固然有不同的想法,但对立的想法,也总有统一的地方。否则也不会有.NET。对立的地方,做成组件,统一的地方,做成框架,框架和组件有机结合,这也正是.NET的所作所为。

做了许多年,认识到了这一点,可能才真是走入了正轨。Gamer Class不是为了一个人而做的,而是一个服务,不是为了一个死气沉沉的世界而做的,而是为了一个自由的理念。敢于接受自己的不足,才有更加进步的动力,敢于明白自己的无知,才能更好的去服务他人。

希望几年之后的时代,不再是一个会把精力花在争论对错的时代,不再是一个子非史家安能言史的时代,而是一个允许人人皆可言,人人皆可为的时代。一个优秀的设计,应该愿意把自己摆在风雨之中,接受风雨的考验。即便是锈蚀,即便是死无葬身之地,起码也给了别人踩过的机会。

人之将死,孰对孰错?孰正孰反?遗留天地间,无外乎一躯壳。或者给了别人踩着,更上层楼,或者给了别人看到,不再重蹈覆辙。任它风吹雨打,任它天谴地咒,了无牵挂。

啼哭而来,大笑而去!

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics