自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(25)
  • 资源 (3)
  • 收藏
  • 关注

原创 移动时代的抉择

翻看自己的博客,都还是4,5年前写的东西了。而近几年随着移动互联网的兴起,整个行业也发生了翻天覆地的变化。具体到我们游戏开发人员,更具体来说引擎开发人员来说更是天壤之别。我个人算是一个有过多年(7,8年了吧)经验的引擎开发人员了,一直做引擎开发相关的工作,甚至独立开发了一整套引擎和所有工具。之所以说是”抉择“,这个问题只是针对我这种情况而言,毕竟积累了那么多年的东西,而且有些地方还存在

2015-01-31 20:38:55 1223

原创 到新单位这段时间简单总结一下

<br />到新的公司已经有一段时间了。以前主要是写程序比较多,而新的工作管理方面比较多,程序写得少了。<br />总的来说写程序还是比较有经验的,管理方面经验不足,这段时间也犯了不少错误。<br /> <br />先说说目前的问题吧。<br /> <br />从事情的角度说,由于公司历史相对比较长,积累下来了大量代码,而且依然沿用。这些代码,模块随着人员变动,也变得很难完全接手,尤其是服务器相关的部分,很多项目正在用。从好的方面说既然已经用了这么多年,大的问题应该说没有什么了,从坏的地方说剩下的问题也都是

2011-04-24 14:00:00 2102

原创 关于渲染系统,场景管理器,资源管理器设计的一些想法

<br />废话不多说.<br /> <br />先从显卡渲染都需要哪些东西说起。<br />显卡要完成渲染本质上就是要回答两个问题,即画什么和如何画。<br /> <br />对于画什么这个问题,是由场景管理器来决定,这也是场景管理最本质的工作。<br />场景管理器最重要的工作就是根据当前相机位置及朝向,使用各种算法(BSP,四叉树,八叉树或者其他)来快速筛选出场景可渲染的几何体,这就是画什么。<br /> <br />对于如何画这个问题,是由材质来解决,在材质中保存了渲染管线参数,Shader等信息,

2011-03-26 01:44:00 2706 1

原创 游戏中的光影效果

<br />好久没有更新过博克了,春节的最后一天更新一下,写一下关于游戏中关于光影效果的方法,以及我的实现.<br /> <br />去年有个机会和call duty3的程序总监聊天(此人是一个华人,当时已经回国在腾讯做互动娱乐部门副总,想找我过去),他提到次时代游戏和前一代游戏的最大区别之一就是游戏的光影效果,可见游戏中光影效果是如此的重要。<br /> <br />关于游戏中的光照,就目前来看大致两种方式,一种是Unreal的与渲染光照贴图+ShadowMap,另一种则是Crysis的完全实时光影。效果

2011-02-08 14:55:00 10050 18

原创 Crysis引擎分析

<br />很早以前研究过crysis的引擎,最近和同事讨论起来这个东西,现在简单总结一下。<br /> <br />这里关注的是crysis的场景管理和光影。<br /> <br />crysis的场景管理是通过把玩他的编辑器猜测的,不一定完全正确,还有部分是我自己的设想。<br />crysis的场景管理是全实时的不需要什么预计算,以他的室内场景为例,他是通过放置VisArea和Portal以及Furtums的Portal剪切筛选来实现的。可以通过编辑器编辑VisArea,这个VisArea就是一个几何

2010-09-15 14:00:00 2529

原创 特效系统优化

<br />这几天在做特效系统的优化,稍有些心得,分享一下。<br /> <br />首先要讨论的是优化层次,然后再说说优化策略。<br /> <br />游戏这个东西是程序美术策划共同努力工作的结果,所以优化再更宏观的角度来看不只是程序的问题。在具体工作中经常会出现,美术作了一个特别牛鼻的特效,效果及其绚丽,但是他却消耗了大量的资源,导致游戏性能低下。这是很常见的问题,因为美术他不管程序怎么处理,他只追求效果,而且美术的特点是很感性,对于一些具体技术细节不是那么靠就,比如说粒子发射量,很多情况下用不着那么

2010-09-10 09:43:00 2115

原创 资源的后台加载

<br />现代的游戏大多资源量都比较大,无法做到游戏启动之初就加载了全部资源,所以资源动态加载必然要做。下面说一说一些不同的资源动态加载方案。<br /> <br />第一种方式,分贞加载。所谓分贞加载顾名思义就是把游戏资源的加载分解到不同贞去做,这样可以降低某一贞突然加载大量资源导致的帧率急剧下降。这种分贞可以是以资源为单位,也可以加载步骤为单位。比方说第一步进行磁盘IO,第二步进行一些资源使用前的准备工作(如提交显卡等),这些步骤也可以分别放在不同贞中进行。为了使贞率更加平稳,可以限定每贞加载的量,或

2010-09-08 09:09:00 3989 1

原创 3D引擎中的渲染模块

<br />渲染是3D引擎不可缺少的模块,这两天在思考如何把这个部分设计好。<br /> <br />首先明确需求,最起码的因该是把图形API进行抽象风装,这样引擎只调用经过抽象的渲染接口,这样便于扩展到其他图形API上,简单来说就是把GL/GLES/D3D的通用的API抽象出来到CRenderBase上,再由此派生CRenderGL,CRenderGLES,CRenderD3D等分别实现,完成底层渲染API的分离。这是最起码要做到的,接下来就是一些具体的渲染工作到底是放在CRender里面还是放在具体到C

2010-08-20 09:36:00 2221 3

原创 内存管理

<br />不光还是游戏引擎,任何一个项目都有必要做好内存管理,至少可以监控内存使用量和内存泄露。而对于游戏引擎而言更是如此,在游戏引擎里面动态分配释放内存的地方不在少数,做好内存管理对于提高引擎运行效率是十分必要的。<br /> <br />内存管理就是做两件事,负责内存的分配和释放,再有就是对内存的分配释放进行监控,据此来解决内存泄露和掌握内存使用情况。<br /> <br />先说说内存分配释放,这也是内存管理最重要的部分。一般来说内存管理只管理小内存的分配释放,大内存则无需管理制作监控即可。过多的小

2010-08-09 09:54:00 2202 1

原创 新的场景编辑器

<br />场景编辑器,又是场景编辑器,大概一年前我曾写过一个基于BSP的场景编辑器,配合当时的引擎。经过这将近一年的时间我对场景编辑器和bsp,portal,pvs又有了更加透彻的了解。<br /> <br />可能有的朋友已经用过Unreal,worldcalf(cs的编辑器)等。我总结一下这些编辑器。<br /> <br />首先是单位,他们的1米使用的是64各单位。我开始很奇怪为什么用这么不零不整的单位,为什么不用100代表1米,或者1代表一米,这样不是更加自然。但是深入研究发现这样做是有历史原因的

2010-07-27 12:33:00 2096

原创 特效编辑器

<br />这几天抽时间完成了特效编辑器,正如我之前讨论过的特效系统。不多说了,上两个图<br /> <br /> 

2010-07-18 13:07:00 1898

原创 SSE优化引擎

<br />周末在家尝试着使用sse对引擎进行优化。<br /> <br />关于如何使用sse这里并不多说,有很多资料,这里提一下,使用sse无非就是直接使用汇编或是使用函数指令,如果是诸如解码器核心之类的推荐使用汇编直接进行优化,毕竟可以将核心全部用汇编实现,其他情况下使用sse函数指令即可。<br /> <br />接下来说一下sse在3D引擎中的优化。可优化的地方很多,但总的来说绝大部分优化都集中在了数学运算,3D游戏的数学运算基本上都是向量运算非常适合进行sse优化,一般情况下把数学模块优化好也基

2010-06-27 21:53:00 2526

原创 渲染优化 lock unlock

昨天参加了公司组织的nvdia的培训,讲了一些关于D3D的优化和可能的瓶颈所在,具体的条目就不说了,这里说一些关于资源的Lock和Unlock,以及我在GL下的测试。老师讲到向Draw*这类函数是将其指令放入指令队列,带填满后或者强制刷新时交给显卡去画,也就是说它并不是即时的,而像对资源的Lock和Unlock确是即时的操作,而且cpu和gpu是并行计算的,当lock的资源正是当前gpu正在使用的资源会导致lock堵塞直到gpu使用完后才返回,也就是说不当的使用lock会造成cpu等待gpu的情形。当然D3

2010-06-25 09:57:00 1859

原创 我也谈一谈关于C/C++

<br />这几天随着linus这位老兄再次发出讨伐C++的声音,又勾起了网络上的大讨论。<br /> <br />比起各位高手大牛,我没什么发言权,这里仅说一下我使用C和C++的体会。<br /> <br />由于工作经历,我有4年左右的时间都是在使用纯C进行开发(当时在做图象处理模式识别的算法性工作)。感觉C其实就是一个高级的汇编,他的函数,各种类型的变量(主要指的是global, static, local),指针,编译单元等,只要你理解了计算机如何工作就可以很好的使用了,每次在指针,指向指针的指针,

2010-06-16 20:39:00 1881

原创 放假这几天写个一个iPhone模拟器

<br />听起来挺悬的,好家伙写了一个iPhone的模拟器,模拟了一个Mac OS系统,呵呵,其实不是,我可没那么牛比。<br />其实写的就是一个专门应对iPhone游戏开发的win平台模拟器,与GameFramework配合,从而极大的提高了哪些熟悉win开发但不熟悉iPhone开发者的开发效率。毕竟我也是Windows开发出身,用vs最熟也最顺手。<br /> <br />这个模拟器主要功能就是与GameFramework进行配合,提供了诸如点选,滑动,震动,设置模拟器朝向等功能,更重要的是与Gam

2010-06-16 20:17:00 2390

原创 GameFramework的初步设计

最近这几天在搞一个GameFramework,其实就是在引擎基础上增加一个游戏框架,对游戏进行抽象,对引擎使用的一些封装。在进行具体设计的时候很多细节问题是值得思考的。总结如下     总的来说我所设计的游戏框架从功能上来讲就是两件事,一个是游戏的状态管理(什么菜单状态,游戏状态等等),在一个就是AI管理,又有一个有效的机制来负责对所有AI进行更新和维护还有交互。     对于一个

2010-05-25 09:59:00 2311 2

原创 3D数学相关

这两天有机会重新翻翻之前看过的3D数学方面的书籍,下面简单介绍一下3D数学要点和我的学习轨迹。 和很多人一样在刚刚开始接触3D方面的东西时并不是直接看3D数学,毕竟也不是计算机专业出身,没学过计算机图形学。最开始仅仅是找一些关于OpenGL的书籍来看,这些书大多数都是手册性质的(包括什么红宝书之类的),然后照猫画虎照葫芦画瓢照着例子把代码桥进取,这样经过短暂的联系基本上了解了OpenGL,

2010-05-14 08:41:00 2215

原创 粒子系统

以前一直没有接触过粒子系统,上一个引擎由于试运行在iPhone上,也没有专门的实现这一模块。最近由于工作关系不得不进行研究并写一个编辑器。 通过这一段时间对各种粒子系统,特效系统的研究我也有了进一步的了解,在51期间自己写了一个十分简单的粒子系统框架,给大家共享(见后面的连接),并打算进一步集成到目前正在独立开发的ZeusEngine中。 看到粒子系统作的各种效果感觉很神秘也很强大

2010-05-03 08:48:00 2419

原创 上两张在iPhone模拟器上的截图

  

2010-04-28 22:15:00 1791 1

原创 粒子系统

近几个星期以来一直在搞粒子系统,下面简要总结一下。粒子系统从其本质来说就是一些点被发射出来,并在其生命周期内受到一些影响。这些点的信息也无非就是位置,方向,颜色等等,根据需要也可以扩充其他。而渲染的时候则根据粒子的信息,再结合具体的渲染类型(比如billboard)进行渲染。从上面可以看出粒子系统分为4各部分1. 粒子,这里只要把他理解成一些关心的变量集合,比如位置,方向,颜色,纹理偏移,生命时间

2010-04-25 18:29:00 2064

原创 关于引擎工具制作

这里主要是想讨论一下在编写引擎工具的时候再多大限度上与引擎进行结合。这里向讨论三个问题一. 引擎要不要实现一个所谓的工具模式二. 工具的数据格式与引擎数据格式三. 调试一. 引擎要不要实现一个所谓的工具模式由于工具也要调用到引擎的一些功能,尤其是一些流程性强,功能性强的模块时可能会出现引擎内部工作状态与这正游戏状态不同的情况。此时就要在引擎内部增加一个所谓的工具模式,来区分对待工具调用和游戏调用。

2010-04-25 18:29:00 1311

原创 iPhone游戏开发

总的来说这个问题比较好解决,Xcode新建的工程中就有opengl es这一项,基本的调用关系都给你弄好了。下面说说我开发的过程说到底我绝大多数时间还是在win平台下进行开发的,尽管业界说mac的系统如何如何好,xcode功能如何如何强大,但还是感觉没有windows好用,没有vs方便(这个问题也许会被专业的mac开发人员嘲笑 :)所以我写的程序都是在win平台下,这就带来了移植的问题。首先系统相

2010-04-25 18:26:00 807

原创 引擎层次化设计

作为一个引擎程序员,在我以往经历的项目中经常会遇到这样的问题,这个功能是不是该市现在引擎中,似乎放在逻辑中(或者客户端)也可以。每当举棋不定的时候我都会想引擎到底该做什么!?我这里我说说我的想法。很久以前并没有什么引擎,所有东西都是写在一起的,当开发新的游戏时基本上都是从头开始,这样就有大量重复的工作。后来一些聪明的程序员将那些可以在各个游戏中使用的代码独立出来,并作成一个库,这样便有了引擎。其实

2010-04-25 18:25:00 1147

原创 Max导出插件

编写Max导出插件目前有两种选择,一种是使用max脚本,另一种就是使用max SDK了。使用Max SDK又分为使用Max标准API和IGame接口。我使用IGame接口编写Max导出插件。IGame接口就是在Max标准API的基础上有针对性地对游戏导出进行了封装,将通常繁琐的操作调用简化成一个函数,与此同时还可以通过IGame接口获得标准API的数据结构从而使用标准API进行一些复杂的操作。要想

2010-04-25 18:23:00 2008

原创 新的引擎ZeusEngine

工作这么多年,也开发过几个引擎,去年还独立开发一个基于iPhone平台的3D FPS游戏引擎(包括引擎和所有编辑器)。最近在研究Unreal 3和Crysis的引擎,有了些新的想法,于是想全新开发一个新的引擎 ZeusEngine。在写这片博客的时候这个引擎已经开发一段时间。下面列出这个引擎将要支持的特性。首先这个引擎是一个同时支持PC和iPhone平台的引擎,使用统一架构(事实上没有写任何区分平

2010-04-25 18:17:00 1819 2

粒子系统简单框架实现

粒子系统的一个简单框架 class CParticleSystem; class CParticle { public: enum TYPE { VISTUAL, PARTICLE_SYSTEM }; public: CParticle(VOID); virtual ~CParticle(VOID); public: INT liveFrame; // 生存时间 INT indexFrame; // 贞索引 BOOL isKeepLocal; // 保持本地坐标 // 说明: 相对于发射他的发射器而言 VEC3 scale; // 缩放 VEC3 position; // 位置 QUAT orientation; // 朝向 VEC4 color; // 颜色 VEC2 uvOffset; // 纹理坐标偏移 VEC3 velocity; // 速度 public: CParticle *pNext; // 链接下一个粒子 public: CEmitterBase *pEmitter; // 发射器指针 CParticleSystem *pEmitParticleSystem; // 发射的粒子系统 }; class CParticleSystem { public: typedef std::vector EmitterSet; typedef std::vector AffectorSet; public: CParticleSystem(VOID); virtual ~CParticleSystem(VOID); public: VOID SetParticleQuota(INT quota, CParticle::TYPE type, const CHAR *szParticleSystem); // 设置粒子总量 INT GetParticleQuota(VOID) const; // 获得粒子总量 public: VOID SetGfx(CGfxBase::TYPE type); // 设置图形 CGfxBase* GetGfx(VOID) const; // 获得图形 public: CEmitterBase* AddEmitter(CEmitterBase::TYPE type); // 添加发射器 VOID RemoveEmitter(CEmitterBase *pEmitte

2010-05-03

Max 骨骼动画导出插件

Max9 导出插件,可以支持.x,Ogre .xml

2010-04-25

C语言程序设计(第二版)

一本关于C语言设计的爵士好书,包括从最基础的语法到高级的设计哲学等,既可作为学习资料也可以作为一本工具手册一边随时翻阅

2008-08-26

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除