摘要: 好久没有更新过博克了,春节的最后一天更新一下,写一下关于游戏中关于光影效果的方法,以及我的实现.去年有个机会和call duty3的程序总监聊天(此人是一个华人,当时已经回国在腾讯做互动娱乐部门副总,想找我过去),他提到次时代游戏和前一代游戏的最大区别之一就是游戏的光影效果,可见游戏中光影效果是如此的重要。关于游戏中的光照,就目前来看大致两种方式,一种是Unreal的与渲染光照贴图+ShadowMap,另一种则是Crysis的完全实时光影。效果上都不错,下面来简单分析一下。在讨论之前先要明确一点,游戏中的光影真的要追求和现实中一样的物理机理么?答案是否定的。画面是一个视觉艺术,只要看上去真是, 阅读全文
posted @ 2011-02-11 11:00 oayx 阅读(2152) 评论(0) 推荐(0) 编辑
摘要: 最近这几天在搞一个GameFramework,其实就是在引擎基础上增加一个游戏框架,对游戏进行抽象,对引擎使用的一些封装。在进行具体设计的时候很多细节问题是值得思考的。总结如下 总的来说我所设计的游戏框架从功能上来讲就是两件事,一个是游戏的状态管理(什么菜单状态,游戏状态等等),在一个就是AI管理,又有一个有效的机制来负责对所有AI进行更新和维护还有交互。 对于一个所谓的通用框架需要考虑的是在各种不同游戏类型中的最小抽象是什么?那些东西是个各种类型游戏都需要有的,这个抽象如果过小很可能失去其意义,如果过大则很难做到普适,当然有些情况下想做一个通用的东西想法本身就是错误的。 根据我之前的单机游戏 阅读全文
posted @ 2011-02-11 10:52 oayx 阅读(1203) 评论(0) 推荐(0) 编辑
摘要: 昨天和同事无意中聊到开发引擎使不是一件容易的事情。我想首先需要搞清楚的是什么是引擎。早在上世纪80,90年代,那时候的游戏开发都是从头来做,没有什么引擎,后来一些聪明的开发者把个个游戏中共用的部分独立出来,包装成了一个函数库并提供一组API共二次开发者调用,这边有了引擎。也就是说引擎的本质概念就是一个能够在不同游戏项目中,或者至少是同类型游戏中重用函数库而已。而今的现代游戏引擎则更加复杂,它融入了游戏开发的各个模块系统,资源管理系统,渲染系统,物理系统,声音系统,等等。这些系统有些容易实现一些,有些较为复杂,而且它们之间有时候并不是完全隔绝独立的,更过的是相互交融配合,互为支持。更为重要的是, 阅读全文
posted @ 2011-02-11 09:29 oayx 阅读(593) 评论(0) 推荐(0) 编辑
摘要: 近几个星期以来一直在搞粒子系统,下面简要总结一下。粒子系统从其本质来说就是一些点被发射出来,并在其生命周期内受到一些影响。这些点的信息也无非就是位置,方向,颜色等等,根据需要也可以扩充其他。而渲染的时候则根据粒子的信息,再结合具体的渲染类型(比如billboard)进行渲染。从上面可以看出粒子系统分为4各部分1. 粒子,这里只要把他理解成一些关心的变量集合,比如位置,方向,颜色,纹理偏移,生命时间等2. 发射器,其实就是一个喷嘴,把粒子发射出来。所谓发射出来,听起来挺悬的,其实就是将粒子标记为活动,并对其数据进行初始设置。3. 影响器,对发射出来的例子数据施加影响,根据物理模型,或者其他什么规 阅读全文
posted @ 2011-02-11 09:28 oayx 阅读(535) 评论(0) 推荐(0) 编辑
摘要: 作为一个引擎程序员,在我以往经历的项目中经常会遇到这样的问题,这个功能是不是该市现在引擎中,似乎放在逻辑中(或者客户端)也可以。每当举棋不定的时候我都会想引擎到底该做什么!?我这里我说说我的想法。很久以前并没有什么引擎,所有东西都是写在一起的,当开发新的游戏时基本上都是从头开始,这样就有大量重复的工作。后来一些聪明的程序员将那些可以在各个游戏中使用的代码独立出来,并作成一个库,这样便有了引擎。其实这已经很清楚了,引擎应该是可以在各个项目中进行重用的部分,或者说可以公用的模块。虽然现代的引擎更加复杂,模块更加丰富,但他依然没有改变它原有的职能。如果说某个所谓的引擎在拿到其他项目时需要进行大量的改 阅读全文
posted @ 2011-02-11 09:21 oayx 阅读(493) 评论(0) 推荐(0) 编辑
摘要: 编写Max导出插件目前有两种选择,一种是使用max脚本,另一种就是使用max SDK了。使用Max SDK又分为使用Max标准API和IGame接口。我使用IGame接口编写Max导出插件。IGame接口就是在Max标准API的基础上有针对性地对游戏导出进行了封装,将通常繁琐的操作调用简化成一个函数,与此同时还可以通过IGame接口获得标准API的数据结构从而使用标准API进行一些复杂的操作。要想编写Max导出插件首先需要对Max内部对数据的组织形式有一个大致的了解。Max的数据不论是材质还是骨骼还是网格都是使用树结构保存,每个数据都在相应的节点上,通过便利节点,获得节点类型并作相应的转换便可 阅读全文
posted @ 2011-02-11 09:15 oayx 阅读(1757) 评论(0) 推荐(0) 编辑
摘要: 工作这么多年,也开发过几个引擎,去年还独立开发一个基于iPhone平台的3D FPS游戏引擎(包括引擎和所有编辑器)。最近在研究Unreal 3和Crysis的引擎,有了些新的想法,于是想全新开发一个新的引擎 ZeusEngine。在写这片博客的时候这个引擎已经开发一段时间。下面列出这个引擎将要支持的特性。首先这个引擎是一个同时支持PC和iPhone平台的引擎,使用统一架构(事实上没有写任何区分平台的代码)。根据资源及其配置情况便可支持在PC上的高级效果,也可以支持iPhone上的简单效果,一切都是外部资源决定。引擎特性如下:1. 材质系统 简单来说材质中分为Solution,Solution 阅读全文
posted @ 2011-02-11 09:12 oayx 阅读(577) 评论(0) 推荐(0) 编辑
摘要: 现代的游戏大多资源量都比较大,无法做到游戏启动之初就加载了全部资源,所以资源动态加载必然要做。下面说一说一些不同的资源动态加载方案。第一种方式,分贞加载。所谓分贞加载顾名思义就是把游戏资源的加载分解到不同贞去做,这样可以降低某一贞突然加载大量资源导致的帧率急剧下降。这种分贞可以是以资源为单位,也可以加载步骤为单位。比方说第一步进行磁盘IO,第二步进行一些资源使用前的准备工作(如提交显卡等),这些步骤也可以分别放在不同贞中进行。为了使贞率更加平稳,可以限定每贞加载的量,或者时间阈值。比方说目前渲染以贞的时间是10ms,目标帧率是30贞,这样还有20ms左右的空闲时间,这时可以在加载的时候累计耗时 阅读全文
posted @ 2011-02-11 09:04 oayx 阅读(594) 评论(0) 推荐(0) 编辑
摘要: 不光还是游戏引擎,任何一个项目都有必要做好内存管理,至少可以监控内存使用量和内存泄露。而对于游戏引擎而言更是如此,在游戏引擎里面动态分配释放内存的地方不在少数,做好内存管理对于提高引擎运行效率是十分必要的。内存管理就是做两件事,负责内存的分配和释放,再有就是对内存的分配释放进行监控,据此来解决内存泄露和掌握内存使用情况。先说说内存分配释放,这也是内存管理最重要的部分。一般来说内存管理只管理小内存的分配释放,大内存则无需管理制作监控即可。过多的小内存分配释放会造成系统内存碎片从而可能分配不下内存,与此同时过多的调用系统的内存分配释放函数也是低效。malloc,free这些函数本身就很慢。现在问题 阅读全文
posted @ 2011-02-11 09:00 oayx 阅读(346) 评论(0) 推荐(0) 编辑
摘要: 以前一直没有接触过粒子系统,上一个引擎由于试运行在iPhone上,也没有专门的实现这一模块。最近由于工作关系不得不进行研究并写一个编辑器。通过这一段时间对各种粒子系统,特效系统的研究我也有了进一步的了解,在51期间自己写了一个十分简单的粒子系统框架,给大家共享(见后面的连接),并打算进一步集成到目前正在独立开发的ZeusEngine中。看到粒子系统作的各种效果感觉很神秘也很强大,其实粒子系统本质很简单。粒子系统包括发射器,影响器还有图形(或者叫渲染器),这三个部分被集成到一个叫粒子系统的类中,他们是一have a的形式集成近来,也就是说使用成员变量的方式。他们的工作原理可以用一个例子来简单解释 阅读全文
posted @ 2011-02-11 08:55 oayx 阅读(3399) 评论(0) 推荐(0) 编辑