西历07年7月16日夜,小白偶醉,一眼看过廿四年,有感而发,遂属文若此。通篇信口雌黄,大言不惭,乳臭未干,愿得高人指点教诲。
记得自己曾说过:“游戏向左,引擎向右”,现在想想,这大抵是对的。做项目的人可以不懂一个三角形是如何渲染的(当然懂了更好做项目),他只需要知道如何使用自己手上能掌握的资源,多快好、且扩展性强地完成自己的工作。他可能不会写导出器,但他只要会用导出插件,他可能不会写BSP,但他只要会导出BSP,他可能没听说过LOD,但他也不用去管LOD,总之,他可能很多东西都不会写,只是知道那回事儿,那么他就可以作游戏——更多的时候,他的代码更直接地接触游戏的本质,AI啊,伤害判定啊,魔法技能啊,UI逻辑啊(虽然UI逻辑实实在在不应该用Hard Code写),等等等等……。所以如果你想作游戏,而不是引擎,而且想更快就深入你自己的那套故事之中,那倒不防直接去下载个免费的游戏引擎,或者很便宜的商业引擎,或者商业引擎试用版。但,当然的,这不应该是我们逃避不去认识底层引擎和API的借口。
引擎有几个概念上的引擎:一个是狭义的,仅对API进行包装,使其满足自己需求的引擎,这基本上不应该叫做引擎的。一个是将这些包装统一到场景和游戏构架中来, 完成一个整体的FrameWork,类如OGRE。一个是将FrameWork升华成包括编辑器、工具、UtilCode在内的整一套商业引擎。它们的目的是不同的,使用的也是不同的手法,即便是为了同样的目的,完成的手段也可能不同。OGRE和Irrlicht的方案就不太一样,而一个习惯了OGRE的优雅的人,是很难接受HL2:Source的,道理一样。引擎是贪婪的,永远不能满足于目前能达到的结果,虽然不是一切都有可能,但是应试图在硬件允许的情况下,尽自己最大的可能。
引擎更多的时候不是在具体的DrawPrimitive上左右徘徊,而是在某个引擎模块的构架上挑三拣四。最多的时候,需要在多个方案之中做一个权衡。当手中只有一个方案——DrawPrimitive、SetRenderState、Lock-Unlock——的时候,你不会找不到方向,引擎开发之所以有难度,就是当多个方案同时错综复杂地涌现时,很可能会瞬间找不到北。很多时候,一个构架上的小小瑕疵,就可能在几个月后、甚至一年后,形成一场风暴。但一开始你还没有任何办法,只能碰运气地挑一个方案一头撞到底。在构架的过程中形成的经验——无论成功的还是失败的——这是那些商业引擎越做越勇,越做越自信的原因。因此加强交流是必要地,多看看别人的,成功或者失误,是提高自己的最好手段。
虽然很多时候,考虑到未来的情况,会对引擎的扩展性有很大的帮助。但是有时候,对于引擎的某些部分,并不是特别必要。过度设计反倒会给用户和扩展者带来麻烦。按照唯物辩证法的观点,“活”的东西必须立于“死”的之上,因此,探讨灵活性和扩展性的前提是探讨不变性。虽然给他们太少的选择是不负责任,然而,给用户太多的选择仍然依旧是对他们的不负责任,也会增加自己的维护成本。用户需要的是成熟的解决方案——大部分情况下,他不想去管一个Button是如何地千变万化,他仅需要捕获Button的按下消息。这就正如Windows开发一样,API可以说是最灵活的了,Windows可以做什么,API就能做什么,但是为什么还有人要去冒着被鄙视的危险使用.net呢?因为很多API,按照大部分认的要求,封装之后,也不过就是.net那样子!扩展性可考虑使用COM的方式,如果这个体系不能用了,就干脆整个换一套体系,只要接口安全即可。封装可以封装的,暴露有必要暴露的,接口的设计应以简单为主。简单不仅仅意味着健壮行的增强,也意味着可以在简单模块的基础上,通过多个简单模块扩展出一个复杂的模块。.net的很多类都非常简单,但并不影响其健壮和扩充性。
很多前辈们都不赞同新手把时间花在引擎上,而我可能现在也不是像几年前那么特别地赞同了。花那么大成本,做了一个那样的引擎,大部分是API包装,或者仅有一个简单的Frame Work,甚至没有地图编辑器,一般都高不成低不就,有什么用呢?能力强?一般要是要求高的项目都会不惜血本买来国外的引擎,或者国内非常有经验的引擎团队,你的引擎可以跟他们比吗?免费?你的引擎能竞争过才一台电脑钱的Torque Game Engine Advance吗?没有项目愿意采用,引擎就等于被判了无期徒刑。
但是,心平气和一些,我想,很多人都忽视了一点,就是,如果你做了一个引擎,你可能会后悔一两天,但如果你没有做这个引擎,你可能会后悔一辈子。原理上说,一开始不应该做引擎,这就正如原理上说,每个小康的人都能买到房子一样:在中国,很多事情是做不到的。行业本身的就不用说了,是人都知道怎么回事。而对于个人的培养而言,在还没有诞生一个不 那么迫切地为了钱 ,而是为国民的未来,国家的未来的正经八百的专门培训学校和专门培训专业之前,还有什么比做一个引擎更能让自己从一个小白更快地进入图形开发的实质呢?
另外在独立或者团队完成这个引擎的同时,我们每个人都从中汲取了丰富的营养,它让我们每个人都受益,都迅速地提高。有可能你在项目代码中调用了数千行SetTextureStageState,但还不如在写引擎的时候写一句SetTextureStageState,因为前者,这些调用往往隐藏在模型、地形等高层系统的后面,如非必要你根本不需要去理会,即便要理会你也会优先去查阅相应引擎的文档而不是DX9的文档;而后者则需要你认真地去查阅DX9的文档,看清楚到底这个函数有哪些需要注意的问题。
这或许也是我还在闲暇时间维护自己的那些个破玩艺儿的原因,你可以说它出自于我愤青般无聊的激情,但我更愿意相信那来自于我理性的激进。
引擎是商品,用户买你的引擎是因为他们相信你的引擎可以更快,更好地完成他们的目的。即便是再绚的引擎,但如果不好用,也不会得到用户的青睐的。
夜半小酌,独坐于榻,若有所思,歌月徘徊,舞影凌乱,得废话若干,贴于此,仅聊然以自娱耳。不值一笑,不值一笑……
分享到:
相关推荐
网络 游戏 引擎 游戏引擎下载网络 游戏 引擎 游戏引擎下载网络 游戏 引擎 游戏引擎下载网络 游戏 引擎 游戏引擎下载网络 游戏 引擎 游戏引擎下载网络 游戏 引擎 游戏引擎下载网络 游戏 引擎 游戏引擎下载网络 游戏 ...
《游戏引擎架构》同时涵盖游戏引擎软件开发的理论及实践,并对多方面的题目进行探讨。本书讨论到的概念及技巧实际应用于现实中的游戏工作室,如艺电及顽皮狗。虽然书中采用的例子通常依据一些专门的技术,但是讨论...
游戏引擎架构是开发电子游戏的核心工具,它涵盖了游戏设计、图形渲染、物理模拟、音频处理、脚本系统、网络通信等多个关键领域。本资源提供的"游戏引擎架构中英文完整版"是一个全面的学习资料,由知名腾讯游戏引擎...
用javascript做的游戏引擎,用javascript做的游戏引擎用javascript做的游戏引擎用javascript做的游戏引擎用javascript做的游戏引擎用javascript做的游戏引擎用javascript做的游戏引擎用javascript做的游戏引擎用...
游戏引擎架构是游戏开发的核心部分,它为游戏的创建提供了基础框架和工具集。游戏引擎的设计和实现涉及多个关键领域,包括渲染、物理模拟、音频处理、脚本系统、资源管理以及网络通信等。以下是对这些关键领域的详细...
游戏引擎架构2
游戏引擎架构是开发游戏的核心技术,它为游戏开发者提供了创建互动体验所需的各种工具、系统和框架。《Game Engine Architecture》是一本深入探讨这个主题的专业书籍,由Jason Gregory撰写,中文高清印影版则是该书...
C++游戏引擎是一个软件框架,用于开发和构建计算机游戏。它提供了一系列的工具、函数库和功能,以便开发者可以方便地创建、设计和管理游戏。 以下是对C++游戏引擎的描述,不包含具体的代码实现: 渲染引擎:游戏...
游戏编程简章与游戏引擎:探索游戏开发的核心 游戏编程简章与游戏引擎,这是一个深入探索游戏开发领域的重要话题。自《毁灭战士》(Doom)时代以来,游戏编程模式经历了革命性的变化,引入了“游戏引擎”的概念,这...
游戏引擎与游戏引擎开发入门.doc
《游戏引擎架构》是一本深度探讨游戏开发核心技术的权威书籍,中文版与英文版的结合为读者提供了双语学习的机会,特别适合对游戏开发有深厚兴趣或者正在从事相关工作的专业人士。高清非扫描版保证了阅读体验,使得...
本书主要介绍如何利用3D固定流水线编写游戏引擎,以及在已编写引擎的基础上开发游戏,全书共分10章,主要内容包括游戏引擎简介、数学知识、材质和光照、固定流水线、游戏引擎架构、3D引擎底层封装、3D引擎封装、游戏...
游戏引擎是制作电子游戏的核心工具,它为开发者提供了一个集成的环境,用于创建、测试和发布游戏。在本文中,我们将全面介绍游戏引擎的概念、重要性、主要功能以及常用的游戏引擎。 游戏引擎的核心功能通常包括图形...
**J2ME游戏引擎详解** Java 2 Micro Edition(J2ME)是Oracle公司为小型设备和嵌入式系统设计的一种Java平台。它主要用于移动设备,如早期的智能手机和平板电脑,提供运行Java应用程序的能力。在J2ME的环境中,游戏...
Android游戏引擎 里面是个eclipse工程 倒入之后进行相关配置 即可调试运行 游戏逻辑采用lua 编写lua代码即可作游戏 游戏函数调用请查看源代码 hyperbolic类 顺便一提 lua代码支持中文 英文差的朋友别担心哦 有不懂的...
标题:"自己写游戏引擎,游戏引擎入门级" 描述:"自己写游戏引擎.doc"这份文档源自一位热心网友的分享,旨在为那些对游戏引擎开发感兴趣,尤其是初学者提供一份宝贵的资源。作者通过几个月的努力,总结了自己的游戏...
java 封装游戏引擎java 封装游戏引擎java 封装游戏引擎 java 封装游戏引擎java 封装游戏引擎java 封装游戏引擎 java 封装游戏引擎java 封装游戏引擎java 封装游戏引擎 java 封装游戏引擎java 封装游戏引擎java 封装...
游戏引擎架构文档是深入理解游戏开发核心技术的关键,它包含了游戏引擎的设计原理、组织结构和使用方法。本文件的两个组成部分,很可能是“游戏引擎架构详解”和“游戏引擎快速入门”,旨在帮助开发者从宏观到微观...
C++本科毕业设计一个3D游戏引擎系统源码。C++本科毕业设计一个3D游戏引擎系统源码。C++本科毕业设计一个3D游戏引擎系统源码。C++本科毕业设计一个3D游戏引擎系统源码。C++本科毕业设计一个3D游戏引擎系统源码。C++...
1. **游戏引擎架构**:游戏引擎通常由多个模块组成,如渲染引擎负责2D和3D图形的显示,物理引擎处理碰撞检测和运动模拟,音频引擎管理声音效果,脚本引擎解析和执行游戏逻辑,以及资源管理器负责加载和释放游戏资产...