下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

怎样学好3D游戏引擎编程

作者:课课家教育     来源: http://www.kokojia.com点击数:907发布时间: 2019-04-03 10:05:50

标签: 3D游戏引擎设计引擎编程模型概念视图理念

     引擎编程是3D游戏的支柱,也是3D游戏最深奥的地方。通过把数学,物理,模型制作联系起来建立起引擎的核心部位,第几决定了一个楼盘的好坏,一个好的引擎编程的建立也决定了一个游戏的质量,而学好引擎编程更能让你在3D游戏里成为大师,无限遨游。

  《3D游戏编程大师技巧》继承了《WINDOWS游戏编程大师技巧》里面2D函数,然后3D功能以及流水线和引擎都是自己完成,这本书的代码量要有十几万,我当时用C++重新封装了《3D游戏编程大师技巧》代码,自己设计了一个面向对象固定流水线模式,代码量13W左右,这个过程很艰辛,这本书我看了2遍,最后一共零零散散花费了大约9。10个月的时间。你会感觉你立刻升级了,HP,MP,CP都增长了,当然也包括RP,哈哈!(不知道这些术语的,大家多玩玩RPG游戏吧!)

  好东西去追求,不要怕浪费时间,浪费精力,你想想,你得到的最后会大于你的付出,这些都不算什么。很多人问我怎么学3D,我建议他们不能着急,要从学《3D游戏编程大师技巧》开始,大约要8,9个月时间,把每个细节都弄明白,闭上眼睛,怎么实现就很清楚,书上每一页写什么都很明确。他们都觉得浪费时间,那么这样是永远学不好的

  13D数学是你要攻克的

  虽然你数学学的好,但国内的教科书还是和游戏中用的有些不同,毕竟没有上过专门讲解游戏中数学知识的课程。这需要你系统学习游戏编程中数学,3*3矩阵为什么有的人用,而有的人用4*4矩阵,为什么有的用矩阵转置有的用矩阵的逆。《3D游戏编程大师技巧》这本书介绍的很详细,还有一本书就是《3D数学基础:图形与游戏开发》很不错(有中文的),先系统学习下,然后在学习游戏编程时,不懂的时候,再回头看看这些书,把所有的东西都彻底弄清。你如果数学基础好,学这些都很容易,以后游戏编程中最深奥的地方之一就是数学。

  基本上我总结下,你要知道的是:

  向量4维和3维向量有什么不同

  矩阵4*4和3*3矩阵有什么不同

  四元数

  ELUER角

  以后有机会深入研究碰撞中的各种算法,还会遇到很多关于数学的问题,上面只是渲染有关系。

  23D流水线的实现过程

  我无法用言语来表明这个过程的重要性,整个3D流水线是是3D游戏的脊柱,你的基础知识牢固与否,主要看你这里。3D流水线每一个细节我希望大家都要搞清楚,这个过程对初学者是要花费大量的时间专研与琢磨,D3D的固定流水线都是由硬件完成,如果你的硬件不支持,它会用软件模拟,好,关键就在这里,软件模拟是怎么回事,而《3D游戏编程大师技巧》的流水线是自己用C语言写的,也就是用软件完成,这样你能了解整个流水线的细节,同时你在学D3D时,对照着来学,你会发现,D3D学起来很容易。现在D3D和硬件都支持可编程流水线,而且DX10没有固定流水线,所有变换过程都用SHADER语言控制显卡完成,这个过程是3D流水线的缩影,所以3D流水线的重要性是是可想而知的。

  我说了这么多,3D流水线对你是一个新鲜的名词,我也没有去解释它,我不想去解释,完全留给你自己去,我始终坚持着,我只告诉你去的路,路上有什么困难,应该怎么走,你自己去体会这条路上的酸甜苦辣。我希望大家多花些时间在这上面,真真正正的自己写代码实现一下,基础对你真的很重要,记住我说的话,很多人学习时,认为自己理解了,没有去实现,其实还是那句话“纸上得来终觉浅,绝知此事必躬行”,相信我,没错的。

  基本上我总结下,你要知道的是:

  3D中的顶点结构,每个分量都用来干什么,三角形是基本渲染单元。

  模型空间——》世界空间——》相机空间——》投影空间——》屏幕空间——》光栅化这个过程和运行原理

  材质究竟是什么?

  常用的宏光照模型原理,光源类型

  光源和材质和法向量关系

  光照在哪个空间去执行(其实不是很严格)

  纹理寻址,纹理映射方式,纹理混合,纹理过滤。

  1D2D3DCUBE纹理

  Z1/Z缓冲

  2种相机模型

  ALPHA透明

  关于光栅化三角形要特别注意,他最后混合纹理和光照颜色和ALPHA透明,还要判断深度缓冲,最后是插值填写每个象素。

  3D3D究竟要如何学习

  《3D游戏编程大师技巧》和D3D流水线过程还是有些差别的,比如在投影矩阵上,其实它们都是大同小异,只不过表现形式不同,原理都一样。我希望大家自己可以找出来,深刻理解里面原理。

  还有一个重要的东西,就是哪些是D3D开发游戏必须有的,哪些是D3D自己扩展的。必须有的,就是同硬件打交道的部分,而D3D中自己扩展了很多库函数,例如数学库,这个完全可以没有,我们自己来实现,还有D3D中的EFFECT接口,它自己定义的。X文件所有函数接口。也就是说,你要理解,哪些是游戏开发中必须有的,哪些是游戏开发中自己完全可以不接触底层来实现的。

  游戏编程中有3个缓冲区,颜色缓冲,深度缓冲,模板缓冲,前2个《3D游戏编程大师技巧》中,都详细的介绍,而模板对初学者可能很晦涩,大家先弄明白模板的机制,然后多看些例子,我想你会深刻理解它的含义的。

  D3D的学习,可以看D3DSDK的例子,也可以找一些书籍,很多的。

  基本上我总结下,你要知道的是:

  D3D提供基本常用底层接口,那些是是D3D为了编程必须提供的,那些是不用提供的,比如数学库我们完全可以自己写。

  D3D顶点索引BUFFER

  颜色缓冲,模版缓冲,深度缓冲以及对这些缓冲的操作

  目标渲染对象、

  D3D中的3D流水线

  单通道渲染,多通道渲染。

  熟练操作上面的所有,这些都足够了,其他的都是D3D中多余的,如果你要自己做引擎,很多都要自己实现,当然初学者可以就用它扩展的函数库,也很方便的。

  4其他要知道的游戏知识

  下面知识都属于很强的游戏技术范畴,他们只属于单单游戏中技术支持,引擎就是用合理的方式,把所有3D相关包括流水线和下面这些都整和到一起,但这种整和是有效的管理。

  场景管理算法:BSPOCTREEQUADTREEPORTALPVS

  动画系统:骨骼动画,蒙皮骨骼动画,渐变动画,和这些动画的混合

  阴影:阴影体投影阴影阴影影射

  剔除算法:包围球OBBAABBBHV算法

  LOD系统:视点无关LOD视点相关LOD

  广告牌:跟踪相机方向和只围绕y轴旋转粒子系统

  这些是比较常用的,常常碰到的,根据基本的颜色运算,空间运算还能衍生出很多游戏特效,等待你自己去看书,去解决。

  七。3D引擎编程,令你的挑战达到了极限

  就象我前面说的,引擎没有严格定义划分,但对于当代的引擎,似乎大家都趋向于越好的东西,越健壮的支持,才称上引擎。现在游戏玩家对画面拟真程度要求很高,这就要求引擎能更好的处理3D世界中大量数据,一个好的引擎,起码要做到以下几点(引用《3D.Game.Engine.Architecture.Engineering.RealTime.Applications.with.Wild.Magic》里面的话)

  1。如何把3D世界中大量数据,让它实时快速处理。

  2。引擎中的渲染器(用来管理数据,进行渲染处理的)接口应该怎么定义。

  3。如何让使用引擎的人,能很容易的使用引擎。

  4。当引擎中添加新特性时,如果让引擎改动最小。

  我感觉这4句话,概括的很精辟,如果让我来概括,好象我现在还没这个能力。这是一个当代引擎的新的定义,虽然不是全面,但它一语道破天机,如果你的引擎能达到上面4点,我想它已经足够的优秀,同时说明你也很优秀了。下面我就分别解刨这4句话,让大家对引擎有一个深刻的了解。我只是分析,这4句话要求高手才可以完全去达到,我现在还不具备这个能力,所以只能帮大家分析。

  1。如何把3D世界中大量数据,让它实时快速处理。

  3D世界中充满了大量得数据,有效的处理只可以看见的,能感受到的就可以了。

  3D引擎中,很多时候都在处理剪裁和剔除的问题,把不可见的或者和碰撞无关的数据用最快的方法弄掉,不让它进入显卡,一切还是停留在3D空间中。剪裁,剔除还有碰撞处理,永远是3D引擎中最常见的话题,现在有很多成型的方法,大家自己通过学习就可以了解的。

  2。引擎中的渲染器(用来管理数据,进行渲染处理的)接口应该怎么定义。

  即使你把3D数据给了显卡,还是不能达到最快显示,我们要把这些数据分类,重新组织,这里面还涉及到存储管理的问题。你的渲染器的接口要定义的和底层提供的DX或者OPGL相通,因为最后你要调用的是这2个库里面的函数。

  3。如何让使用引擎的人,能很容易的使用引擎。

  这是一个经验问题,一个软件设计给用户使用,怎么让用户很容易上手。但无论什么样的用户,你必须对3D有了解才可以使用,否则神仙也没法完成这个引擎。

  4。当引擎中添加新特性时,如果让引擎改动最小。

  经常说的一句话就是“计划没有变化快”,怎么能让引擎跟上时代的步伐,当硬件有革新,我们引擎就有革新,出现新的处理方法,引擎也要改进,用户需求改变,引擎接口也要改变,我们要求引擎的所有改动最小,这样才是一个完美的引擎。

  引擎是软件设计+算法+编程的结合体,难点在软件设计上,一个好的引擎,代码几百万很正常,没有一个好的设计来规范它们,混乱是不可避免的。

  对于一个引擎,从设计到编程都很重要,一个人完成一个好的引擎是不可能的,多人协作来完成引擎,在大家相互配合的同时,每个人对自己的要完成的任务必须精通,还要有人协调这些工作。

  好的引擎,要有一个抽象层次,然后是渲染API层次,还要支持多操作系统平台,我在这里没有过多介绍各种技术细节,因为很多细节在书中都可以找到,加上你的聪明,很多技术算法可以自己创造的。

  对于游戏中大量算法,引擎中到处都是,碰撞,场景管理,光照,纹理混合,动画系统,粒子系统,内存管理,资源管理等等大家要多实践,多思考,多看书,多看资料,把握每一个细节,把握每一个整体。看书时要带着问题去看,同时也要带出问题,因为没有一个方法是完美的,必定会有或多或少的缺陷。

  现在开源的引擎确实不少,其实程序员都有一个共性,看别人代码有时不如自己写,确实这样,有时只看代码去体会别人的思想真的很难,但有时为了去学习也要硬着头皮去看的,跟踪代码。开始时,如果你不了解引擎究竟是什么,这时最好集中看一个开源引擎,一定要把它的工作原理都弄明白,这样你会得到很大的提升,你就会明白引擎是什么,为什么不用D3D直接编写游戏,还有一点就是,有机会一定要去实现,这样你的体会会更深。

  八浅谈物理与人工智能

  这2个都不是中国游戏中的优势,它们和图形一样,要求一定能力积累才可以胜任。如果我没有预测的话,未来中国游戏中大量的需求将来自物理和人工智能,传统的网络RPG会慢慢不能满足大家需要,而被时代所抛弃的。

  这2方面的编程我只是略知一二,还算一个小白,在此简单谈谈。

  10。1物理

  游戏中大部分物理模拟都集中在力学和运动学上,本来它们就是一个整体。因为最后效果是大家看到的,而看到的都是物体在屏幕上的移动,所以所有的计算最终都归结到物体移动上。

  因为游戏毕竟是游戏,人也毕竟是人,没有必要模拟的那么精确,同时人也是感觉不出来的。

  所以要想做好物理上的编程,必须对力学和运动学有系统的了解,高中学的力学部分还不是很足够,对于旋转部分,也就是处理力矩和转动惯量上,高中物理书都没有讲(我那时是没有讲,而且很多直线线形运动方程推倒其实是用微积分推倒的,高中书上都没有明确推倒)

  物理上的模拟也没有逃脱物理计算基本规则,先是受力分析,然后计算合力,计算加速度,计算速度,最后计算位置,也可能涉及到动能和动量等知识,还有些流体力学等等吧。

  物理其实处理的问题基本就是检测物体碰撞,碰撞后的反映,物体运动情况。

  至于理论,大家弄本大学物理,力学部分就足够,如果数学好的话加上高中的物理知识,应该学起来不难的。

  《游戏开发物理学》这本书很好,可惜绝版了,但有电子版的,也有中文版。

  10。2AI

  相对物理的编程书籍来说,AI的书很多。

  AI是必须学的课程,包括传统的AI和计算智能。游戏中常用的传统AI包括自动机理论,A*算法,回溯,图搜索,剪枝等等吧。计算智能包括的是:遗传算法,模糊计算,人工神经网络。

  FPS游戏中大量存在的都是AI

  3D游戏除了需要建模的软件,就是你所列的3Dmaxmaya之外,还需要一款引擎,例如Unity3D,或者是UECEogre等等。

  这些引擎一般会附带引擎提供给美术使用的开发工具,例如:地形编辑器、材质编辑器、特效编辑器等等。

  目前大部分引擎的地形编辑器目前所支持的功能包括但不限于:建造地形,绘制地表贴图,绘制水面,添加点光源,将建造好的场景模型导入,例如你的树木、植物、房子、等等。还包括后期需要实际使用的NPC怪物等内容。

  

 

3D游戏引擎设计_引擎编程_模型概念_课课家教育
赞(0)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程