游戏引擎的开发

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012278016/article/details/79904178
还是看其他一些比如《Real Time 3D Terrain Engines Using C++ And DX9》、《Real-Time Rending》、《Game Engine Architecutre》

1>:
学习编程技能最好的方法就是写代码。在阅读本书时,强烈建议你选择一些特别感兴趣的主题付诸实践。举例来说,如果你觉得人物动画很有趣,那么可以首先安装OGRE,并测试一下它的蒙皮动画示范。接着还可以尝试用OGRE实现本书谈及的一些动画混合技巧。下一步你可能会打算用游戏手柄控制人物在平面上行走。等你能玩转一些简单的东西了,就应该以此为基础,继续前进!之后可以转移到另一个游戏技术范畴,周而复始。这些项目是什么并不重要,重要的是你在实践游戏编程的艺术,而不是纸上谈兵。

2>:
我们公司引擎部门新员工,一般会有两个入门练习:一是只用类似DrawPixel的函数,实现一个软件光栅化。二是使用自家引擎做一个完整游戏。可以比较简单,但必须完整。一个去鹅厂的小伙伴也做过类似跑酷类手游作为练手。所以我觉得,从学习的角度,一边做游戏,一边做个玩具引擎,并不冲突。做一个自己的引擎出来,满足技术好奇心,也能试验想法;用一个开源图形引擎做一个类型的游戏,能了解组成部分和主要需求。了解楼上有好多关于做游戏还是做引擎的讨论,都是有道理的。如果没做过一个完整的游戏,直接只做引擎,学习的效率和引擎的质量都不会太高。但在很多人心里,会把引擎开发的这个工作神话。这种时候自己做一个引擎,对提高自己的信心会有帮助。大部分贬低引擎开发工作的人,至少都是有能撸一个的底气的(且不说质量).

所以对两个方面,我都推荐一些自己感觉不错的资料:
游戏逻辑方面:推荐一个网站, Game Programming Patterns,作者把自己的书放github上,供读者提意见。
引擎架构方面:Game Engine Architecture,这本得看中文翻译的。
图形引擎方面,主要是算法和API,引擎架构抄一套别人的。
图形基础算法书籍:在lz的基础上,推荐一个3D Game Engine Design,里面的3D算法和原理讲解很详细,可惜有点老。
高级图形技术:除了Real Time Rendering 3和GPU Pro系列以外,可以跟KlayGE和OpenGPU。

这个方向量力而行,国内现在的行情是转手游的多,一些复杂的效果研究太深入也可能发挥不了。
update:下面评论有问,我贴一下。软件光栅化可以简单理解为,只给你一个画点的函数,你需要用C++实现一个三维物体显示的过程。一般这个工作是由Direct3D/OpenGL的驱动实现来做的。这个工作可以做的很难,也可以很简单。我们公司貌似所有客户端程序都会做这个,但要求跟老大有关。最基本就是实现一个固定管线,包括顶点坐标的矩阵变化,画线,三角形填充光栅化算法,裁剪,Gouround光照,纹理坐标插值,ZBuffer等等。要做好点,就可以把一个引擎Renderer部分的借口都实现了,用C++写个VS/PS,跟D3D/OpenGL平级。

3>:
题主问的图形引擎开发:刚好写过一个,这个你一开始可以参考ogre看看,你需要主要研究的内容主要包括但不限于以下部分场景管理(关键中的关键)渲染流水线结构Shader场景Culling算法下层图形接口的抽象最好的学习方法还是从利用现有引擎开发游戏做起,和其他答案说的一样,游戏引擎本来就是抽象出来的一个东西,没写过游戏就写引擎,还是算了。涉及游戏引擎开发的公司有哪些?一句话,如果你想做研发,建议还是来我司。这些公司对游戏引擎开发的职位要求是什么?招人的时候一般是研发的统一招,不会单独招做引擎的,这个是进来以后的事一般没有新人做引擎的情况以及将来面试时应该如何应对?(把自己写的Demo给他看?)这个说明不了什么,研发岗位更注重的是表面上看不到的东西,我指的架构程序的能力。当然如果你有水平做这个,面试的时候可以多讲讲,水平高下自然能看出来。基本就是这样。

4>:
很多人并不知道游戏引擎或渲染引擎是怎么回事就开始思考如何做游戏引擎,这是不对的。<br>首先应该深度掌握渲染的基本原理,因此我非常同意其他答案关于先自己实现一个软件光栅化渲染器的建议,你应该按照最新的标准自己大概实现一遍DirectX(例如要支持tessellation, shader, MSAA, blending, anisotropic filtering, 正确处理各种corner case如退化三角形等情况)。实现的过程中请参考DirectX的specification以学习相关细节。这个文档可能是只对硬件vendor公开,不过还是很容易获得的。实现软件光栅化还能极大地锻炼你的底层C++编码能力,并行程序设计能力和优化技巧,顺便还能把主流的GPU架构搞熟。一旦搞清楚光栅化渲染的本质,你就能理解各种所谓“高级渲染技术”的精髓,基本上看paper只需几秒钟扫一扫图就能看懂了。这样一来短时间内就能理解大量算法和渲染架构(例如各种shadow map, AO, volumetric scattering, deferred lighting, forward+等等)。当你对图形管线的本质以及各种可能的应用都了然于胸的时候,剩下的就是高层架构设计问题了。这个属于软件工程的范畴,没有捷径,只能通过大量试错来获得经验了(不停地重写)。其实当你知道了这些所谓的技术之后,你会发现大部分都是肤浅的hack而已。现在引擎的重要课题不在于谁掌握了更牛逼的渲染技术,而在于谁能设计出更好的开发流水线,内容制作以及美工反馈才是最大的难题。前段时间和bungie的图形总管聊destiny的engine,他们表示任何新的技术他们都可以在两天内实现出来,但最大的难题是1)如何使这些新技术在各种情况下都能鲁棒地工作;而大部分时候都很好,偶尔会挂掉的技术都是不可取的;2)如何构建好的工具让美工能够控制各种情况。举个例子,tessellation是个很酷的技术,但是应用到游戏中并不容易,因为1)创建好的displacement map很困难; 2)一旦引入LOD,则牵动全身:如何保持场景在各个视角的一致性?如何让displacement geometry正确地与阴影、碰撞、贴花和可见性等系统交互?</p>此外不同平台上还有很多底层优化问题,这里就不展开了

5>:
没有必要刻意的区分游戏引擎和游戏,对于程序员而言,游戏开发得多了,自然会把可重用的部分提取成 library。而这 library 逐渐丰富起来,便成了引擎。如果你一开始就抱着我想做的是引擎,而不是游戏的态度,那这个事情就有点扭曲了。如果你没开发过游戏,你怎么知道游戏引擎里需要哪些组件呢?是吧。所以想开发引擎,最靠谱的方法就是,去开发游戏,各种类型的游戏。俄罗斯方块、2048、第一人称射击等等,0D、1D、2D、3D、4D 都需要试试。以下是哗众取宠的跑题时间(居然被一名学生批评哗众取宠,不开心呀)0D 就是说没有任何画面 RGB(0, 0, 0),可以用麦克风来控制、再用音乐来反馈。1D 就是只有一维,比如一个点在一条线上移动。2D、3D 大家熟悉。4D 是 3D 配上奇怪的电子设备,比如 Kinect、Arduino、Oculus Rift、Vibrator(咳咳)等

6>:
苦心开发游戏引擎的人很少,哗众取宠的回答都被顶到了前面。我虽然也不是什么专家,但是在这里也试着给LZ一点自己学习的心得。我假设LZ的目标是去Crytek,Epic之类一流公司做引擎开发的有志青年。首先推荐给LZ一个论坛,www.opengpu.com这上面有不少和LZ一样正在学引擎开发的小伙伴。不要去gameres,那里的东西都是过期的,看了没好处。你提到的那几本书是要看的,没错,都看。其他需要的书知乎上蛮多人都讨论过了(我觉得已经被问烂了),你可以看看Milo Yip在知乎上答过的问题。clayman推荐的一些书你也可以看看,www.cnblogs.com/clayman/我的个人建议是推荐LZ去学DirectX11,实时图形学的历史本来就不长,你还抓着10年前的API不放真是说不过去。关于DEMO,我觉得十分必要,亲自写了才知道自己还缺什么需要学,另外写DEMO很有成就感。

www.fangsunjian.com/


没有更多推荐了,返回首页