游戏原画找工作太难了学什么游戏引擎

游戏开发编程的难度,超乎你的想象! - 乔布简历
游戏开发编程的难度,超乎你的想象!
浏览( 2228 )
一、关于游戏开发编程难度的定义
我认为,游戏开发编程就是围绕着游戏开发的一切写代码行为。有人回答说现在很简单啊、有引擎啊、写个逻辑没难度之类的,这都是没有帮助的答案。那引擎算不算游戏开发?如果不算,我能不能认为研发汽车很简单,只需要把汽车生产的流水线买回来,然后自己采购材料装配就算研发汽车?荒谬!没有引擎,算个J【哔】。没引擎研发你好意思说自己在做游戏么?那是策划和美术干的事情,没技术人员个J【哔】事情。
游戏研发的技术含量,绝大部分就在于引擎研发里面,没有引擎研发,等于技术人员没什么鸟事情。所以我认为游戏研发编程,应该用引擎研发的来定义,而不是简单用游戏逻辑敷衍过去。当然,游戏逻辑要开发好也绝对不是一件简单的事情,之前有人讨论过的,如何搭建一套任务系统,非常讲究。这里先不展开。
二、游戏引擎是什么
绝大部分人,特别是小白,只是认为游戏引擎只是画出游戏画面的那么一坨东西,只是一个执行游戏逻辑脚本的程序。嗯,这都是业余看法。
游戏引擎虽说是引擎,实际上是一套生产工具,代表着游戏开发者的生产力。要开发游戏,就需要通过这套工具,去进行游戏的内容创建(Content Creation),并且进行游戏的维护、迭代、再开发(DLC、资料片)。而且游戏引擎还包含对自身开发的工具,比如专门debug引擎的工具,专门profile工具等等。再深入一点,针对网络游戏,服务端有专门的部署工具、管理工具、测试工具、维护工具、GM工具等等。所有这些东西,加起来,一整套工作流水线的总和,才是游戏引擎。Runtime部分,只是一小坨东西。
游戏引擎Runtime部分的东西,都是实时或者准实时演算的、也有实时重演的,这部分对技术的要求是效率高,无论是图形、还是物理、AI等都必须在毫秒级别完成复杂运算,还需要跟游戏本身的表现进行配合,抠得很死。
游戏引擎编辑器部分的东西,大而全,一般稍微完整的编辑器都几乎要克隆大部分Autodesk 3DS Max的基本功能,而且还需要针对引擎本身特性作出一些定制,还需要根据不同游戏类型、游戏资源创建的pipeline进行调整。而这个调整、这个pipeline本身的合理性和流畅度,直接影响美术资源的制作、游戏内容的制作迭代,很多游戏胎死腹中,死就死在这个上面。什么东西是游戏制作预算最大头部分?你们猜?
游戏公司的生产效率,就直接体现在编辑器的制作效率上,以及内容生产者对pipeline的磨合程度。磨合得好,效率高、成品率高、往返扯皮少、预算低、项目可控、产出可控。磨合得不好,就跳票、跳票、跳票、挂。
服务端部分比较敏感,不多说,就一笔带过,用集群的,有可能你全服挂了还不知道哪个结点出问题了怎么死;逻辑不严密的,交易复制金钱一个星期了还没log没警报没言论监控察觉,游戏直接金钱通胀GG。
三、游戏引擎开发的难度
没做过引擎的、做过引擎的、和设计过引擎的人,想法完全不一样,不能同日而语。屁股决定脑袋,你不在那个位置上,不能把问题思考透彻。很少人可以从无到有搭建一个完整的引擎并且让它变成一个游戏可以卖钱,于是很少人能想明白,有些东西为什么这么做。
有些人列举了一堆所谓的问题和采用的算法,指出他们在很多年前就已经进入瓶颈了。真的吗?那么为什么这些年引擎还在进步?游戏画面在提高?游戏体验在加强?游戏引擎的算法在更新?举个栗子,LPV/SVO算不算图形算法的突破?二十年前卡马克时代有LPV么?有全局光么?他动态光都不敢多用两个,何况现在用的brickmap style的light point cloud做无穷多光源的模拟。这些例子太多,实际上还真不算什么难度,有算法出来了,我们集成就是了。
然而游戏引擎真正难的部分在于,架构。
重要的事情要说三遍:架构、架构、架构。
很多算法看上去很美,单独实现很简单,但要真的用起来,一点都不容易。因为你的引擎不一定容得下它。架构并不是很玄乎的东西,他实际上看起来就像一个架子,用来放一些业务和算法。牛逼的架构就是可以放好多好多东西,可以兼容不同类型的业务和算法,并且相安无事。挫的架构就是需要不断的进行整体的更替以适应业务的变化和新算法的需求。
简单的来说,架构源自于对重复性业务的抽象和对未来业务扩展的前瞻。即你的经验和预见。比如你的Entity底层架构是否带树状更新结构,要知道树状更新结构会在大量采用嵌套性挂接结构的时候引发性能问题,即如果你在做MMO,那么要小心咯,策划可能会做一些复杂的圆环套圆环装备、宠物、翅膀、坐骑、双人坐骑、移动平台,这些都是嵌套性的挂接结构,在树状更新的时候需要遍历树的每个节点,可能有性能问题(在移动时代这还可能产生耗电问题)。但如果你在做FPS,那么这个不是什么大问题。(请参考采用Unreal2的天堂,对照Unreal3的ActorComponent改动)。
所以,你的架构,决定了你做什么游戏有利,什么游戏不一定有利。
那问题来了,没引擎之前,怎么来架构?踩坑啊!踩足够多的坑。没做过实际游戏,一定、绝对、100%是没法做引擎设计的。因为引擎架构来自于业务,没有业务的洗礼,不知道什么才是引擎真正需要的。于是在做引擎之前,必须先熟悉游戏开发本身。引擎架构还必须足够宽容和庞大,以容得下各种不同领域的算法;同时架构还必须足够高效,本来已经繁重的游戏计算需要更轻更快的信息交互。
试想一下,你的逻辑结构每帧需要从设备抓取玩家输入,监听网络事件,然后转换成逻辑响应、驱动游戏逻辑运算、驱动AI运算、驱动物理运算、再变成Entity的属性、由Entity发送到渲染层、渲染层把属性翻译成渲染属性、组织成最合适渲染设备调用的数据、发送到渲染设备、设备在进行最复杂和繁重的渲染计算、这个时候引擎很可能在并行的做一些收尾工作、准备下一帧更新、同时调度后台的文件系统读取即将需要的游戏资源、并且游戏逻辑可能利用等待渲染的时候做垃圾回收、或者进行脚本的热更新操作。
上述工作,横跨数个大型模块:
引擎层对象模型
AI层的数据更新
物理引擎的模拟运算(更新、交互、反馈)
渲染层的更新运算(Vertex/Index/Texture/Shader/Framebuffer/Parameter)
网络层(RPC/Data Replication)
鼠标键盘输入输出
GUI的组织和更新
嗯,基本上,计算机几乎所有领域的算法,都基本涵盖了。(还有反外挂技术,开发到最后基本和杀病毒杀木马无异……)
游戏引擎的架构,相当于把上述这些大型的模块,当做老婆一样娶在一起,然后让他们相安无事,和平共处。可是他们天生都是相互嫉妒的啊!物理的数据渲染不能复用啊!渲染的数据无法反馈啊(反馈的代价很大啊)!逻辑的数据要稳、引擎的数据要高效、不同算法需要不同的对齐/排列,要快还要考虑SIMD啊!尼玛的,这些东西要传递要交互几乎都是要设计n套交互协议啊!
于是我们利用了一个伟大的发明,那就是OO。所以C++是必须的,游戏引擎必备的语言。OO拯救了游戏开发者的世界……
然而你在用OO抽象这些东西的接口之前,你需要先熟悉上述所有这些领域的算法,才能设计出一个中心框架架构……要知道这些东西,每一个模块的具体算法,随便拿一个出来,都足够你做一辈子的。
更难的是,上面这个每帧更新过程,是实时在跑的。更更难的是,这些东西,有可能是在玩家的小霸王学习机上跑的。更更更难的是,玩家可能在网吧、而网吧安装的是非标准的操作系统、并且用的是垃圾cpu加非常不错的显卡跑的。
这些问题,作为游戏引擎开发者,特别是苦逼的国内开发者,都要考虑到,都要想办法兼容、压榨,否则玩家分分钟问候你家人一个晚上。
所以,基础架构,对游戏引擎尤其关键,而恰恰它的开发却是困难无比。
(我很想展开服务端啊,可是我不算特别懂,而且游戏服务端比上面这个客户端的高大上很多啊,牛逼的服务端引擎很屌很腻害啊,想象一下像黑客帝国里面的情节一般,我和你面对面释放魔法造成伤害,但我们在不同的服务器上,不过下一个瞬间,我们又在同一个结点上了——所谓的动态迁移)
四、游戏引擎最复杂的部分
无疑,在引擎runtime(我这里仅仅说runtime,其实tool chain部分有更复杂的,但绝大部分人接触不到,不提作罢)部分,最复杂的,要数图形引擎。
首先图形引擎是一个门槛很高的开发项目。虽然学的人多,但靠谱的人少;靠谱又懂美术的,少之又少;靠谱、懂美术、做过游戏、又可以设计引擎整体框架的,凤毛麟角。图形引擎需要的并不是一个实证式的算法,它需要更多的是trick,是cheat,要骗过玩家的眼睛和感受,需要的不只是一个书呆子式的研究员,而是一个深入了解游戏美术制作的、懂那么一点美学和电影的算法设计师。每个引擎都会根据自己需求定制一些图形算法,去adapt自己的优势。
其次图形引擎是一个弱理论强工程的产物。即使你理论水平已经达到发西瓜paper的地步,也不代表你可以设计出优秀的图形引擎。因为图形引擎需要应用——要接地气。你面对的可能是一个很广泛的GPU type,可能有不同的渲染管线架构,可能有不同的API,甚至可能你的图形引擎需要兼顾PC、移动、console平台,每个平台你需要有针对性的调用策略,而必须保证他们看起来差不多。
更加操蛋的是,你可能需要关注很多技术细节,比如PC机器用的是dxtc、大部分android机器用的是etc1、而ios用的是pvrtc、xbox one用的是bc6、metal gpu family 2用的是astc。这些贴图压缩格式各不相同、却各有优劣、在不同的场合有不同的优势也有不同的弱点。比如pvrtc在低频图像上可能会有一些斑点、etc1没有alpha通道需要用一些额外的手段进行模拟。
这些技术细节却决定了你画面的成败。可能你读了一篇很棒的西瓜论文,发现了一个碉堡了的新算法,然后开始要在你的引擎上大展拳脚,结果放到目标设备上却发现效率奇低。
在最新的军备竞赛中,unity和unreal4都在图形引擎架构上花了很大力气,比如用了诸如glslopt、hlslang之类的中间shader编译器来保证跨平台的shader正确性,把编译器这个程序员三大浪漫之一引入到了复杂的游戏引擎开发里面,瞬间提高了游戏引擎开发的难度和逼格。
最后图形引擎现在还面对对gpu驱动撒手不管的操作系统,最新一批API,DX12、Metal、Vulkan都采用了薄驱动,即“老子不管你们怎么用gpu了,引擎自己管吧”。
这样相当于把图形绘制的状态切换、资源管理、数据更新、命令调度全部抛给了游戏引擎自己做。这样可以大大提高拥有优秀架构设计的引擎效率,却也大大提高了引擎的设计难度。
五、功夫在诗外
游戏引擎更多的需要项目的洗礼和验证,多一个项目采用可以踩更多的坑,让架构更加成熟和稳定。但游戏无法像网站一样持续的推出、热更新、选择性更新,一挂即挂,所以游戏公司需要开发一款引擎,其难度更可怕的在于,你需要用游戏产品,作为引擎的炮灰,去历练出一个优秀的引擎架构和tool chain。
所以别问太多为什么国内的游戏山寨居多啊,也别问太多为什么国内没有像样的引擎。
其实,引擎、游戏、效果,都是用钱堆出来的。前面的是炮灰,是试验品,不过很多公司不懂,很多管理者不明白,当然也烧不起这个钱。有时候一个游戏失败了,一家公司就倒了,一个有希望的团队就散了,一个有志气的人就磨灭了。
国外环境宽松,机会也多,生活简单,上世纪有很多炮灰,也磨练出了一堆伟大的引擎架构师,他们艰难的存活下来了,把这些经验变成引擎设计的智慧,重新运用到了新的引擎上,升华,变成更厉害的游戏引擎。这个过程其实很艰辛,很痛苦,很难,这个过程倒了无数个tim sweeny和john carmack,大家只是看到了成功的那两个而已。
国内有时候也会有成功的游戏,但积累的意识太少,持续发展的想法很难被支持,和环境有密切关系。当然,更重要的是,游戏引擎开发真的太难、太难、太难、了。
感谢知乎网友@ 的分享。
转载请注明出处,欢迎参与讨论,纠错和补充内容
使用量9253
使用量8129
使用量7096
使用量6600
back to top
看过软件类文章的用户使用的简历模板用什么游戏引擎 要学到什么程度_c++吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:270,711贴子:
用什么游戏引擎 要学到什么程度收藏
在看c++ primer 第二遍,看完打算再看effective c++国内学哪个引擎比较好,cocos2dx?untiy?虚幻4?求指点,不想走那么多弯路。。
CGWANG原画培训 「零基础全额退费保障」,原画名企委托培训,高薪工作不是梦
都可以。 看你做3D还是2D
对啊。就是这样。
unity用的是c#。
还有没有人啊,目前暂定一条方案1. c++ primer -& Qt -& SQL -& cocos2dx
我觉得cocos2dx比Qt简单点...其他引擎在中国不怎么流行,可以去拉勾网市场需求...
要是3D建议Urho3D Panda3D OGRE(3D资源其实比2D多)
按照mod大神告诉我的,可以去制作半条命mod也是C++虽然画质不高但是信仰
ui培训哪个好,0基础+双证+实战「就业无忧」
同问c++游戏方向学习路线!
以前cocos2d在国内需求还不错,而现在基本得要被淘汰了,现在手游基本都是unity的天下了,虚幻4主要是PC和主机端,不过国内大型游戏开发的公司没多少,因此用虚幻或者寒霜引擎的也没多少,现在国内最红火的游戏引擎是unity了
cocos2d能找到工作就行了,PC端再学个虚幻4玩玩,感觉虚幻4以后会很多人用,而且又强大,,
unity 支持c#,我在学unity
我C++ Primer Plus -----》AGK应该可以用AGK吧
u3d不是开源的,回过时的,建议学cocos2d
unity3d最好别学,和c完全无关,里面的语法会让你大脑死机
没有人对directX或者openGL感兴趣吗
想做游戏做大的话,又不想出版权费的话,用些来源的游戏引擎
等多几个月,超神级api vulkan 就出世了
可以直接看windowsAPI和directx,这样底层的东西你就知道了,然后再学其他的游戏引擎,这样你会更明白。直接学引擎也是可以的,但这样你只是会用。
directX, OpenGL。我OpenGL
u3d是C#,虚幻4是C++
看你有没有一定的数学基础,有基础只要把C+语法学一下就可以去学引擎或者D3D,没基础最好还是学完之后在学D3D在考虑引擎(当然数据库啥时候学都没关系。)
学引擎国内环境的话找个主流的就行,想去3A大厂的话还是把基本功练好吧,他们一般都是用自己的引擎
楼主你好,我也遇到这个问题了,还在抉择,现在打算用虚幻4,也是学的C++,楼主有什么好的指点吗,不胜感激
计算机图形学算法
看你目标,如果是想快点找到游戏相关工作,直接cocos2dx,qt业余玩玩了解就好,这对你找游戏相关的工作没帮助。公司不会理你会不会qt的,至于图形库,更加不要学先,边工作边了解,当然,你要是很多时间,不急于找工作,学学图形库,搞搞这,搞搞那。
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或现在学C++找什么样的工作前途比较好?前辈们都来说下自己的看法吧
目标:从事和C++相关的工作,windows平台开发优先。
状态:学完了c++的语法,在学MFC了,但MFC给了我不小的打击,有点迷茫了。
1.MFC有必要去学它吗?公司用的多吗?如果没有必要用它,那拿什么东西代替?
2.作为一个应届毕业生,要从事我目标的工作,去找工作的话大概需要什么水平?(例如“孙鑫的VC++视频学完就可以了”,“能写一些带界面的XX管理系统”,“写些小游戏”等等)
3.C++在哪些领域用的最多,前途最好?windows平台下的;越来越多的人说C++没落了,它的未来在哪里?
4.大家自由发挥,可以说下对C++的看法。
严重感谢大家能抽出宝贵时间来回答我的问题!中秋快乐!
mfc,除了老平台,做作工控类,我也想不出还能做什么。它是基于特定桌面的设计。桌面变了,就没用了。c++嘛,被现在很多高级语言,压缩的生存空间小了,所谓压缩生存空间,是指,相同任务,新的语言和工具可以更高效的开发(不是开发出更高效的系统),并非所有目标都看中速度,哈。c也早被压缩了。压缩是好事情,不是坏事情。哈。
c++现在可以做的面,(其它语言做的没有c++方便、快捷的)确实比较小。爱喷我的就喷吧,不怕。主要是在游戏和其它通用桌面工具上。例如sub lime 是c++做的。它本身就是个通用编辑器。不过由于是c++做的,自然相同功能,效率更高,相同效率,功能可挂的越多。基本上都是做产品。
引擎方面,graph,天生存在对象性,所以用c++做非常方便,主要在对象组织上,实际计算还是c的风格,因为已经贴近底层了。
好的c++开发也不少,而且开发好了,跨起平台和c做出来的东西一样,很方便。
c++和C一样,做应用?就别扯淡了。
c++相对c的劣势,我的理解如下:
1、现在面向对象的桌面开发需求不是降低是增长,但是对于c++而言,力不从心,速度不是追求的目标,否则android也不会流行起来。由此c++的面被压缩到很窄的区域。相对而言,c是和计算机运行原理靠的最近的,只要是考虑硬件的设计,包括利用硬件特性处理特定问题,都基本上用c,也包括那些不是面向对象的问题。例如数据处理,包括我以前做的音视频编解码算法。
2、c++自身的语法,与其说是个工具说明书,不如说是套理论专著。对语言本身的学习要求比c要高很多。c其实真心不难,这么多年,标准没增加什么核心的,需要你再调整语言工具开发思维逻辑的东西。这样c的开发,更多是面向其它知识的学习而不是语言本身。c的代码相对c++而言,可读性更强(这是实话,哈,绝对不假)。c++的代码,可能一套代码,就是一套编程思想的展示,而不仅仅是业务设计目标的逻辑阐述。 这也是为什么很多c/c++都会的人,说c++是脱裤子放屁的原因。落在理论分析和学院写论文,c++是不错的扩展工具,但落在工程实现上,除非特定问题,否则在逻辑描述上(就是你的代码设计)确实做了很多绕弯弯的事情。
--- 共有 7 条评论 ---
:哈,虽然没有什么意义,不过还是求个证。
sublime应该是用Python开发的吧, 要不然第一次打开文件那么慢求解!!!
我看它里面还有python2.6的运行库,而且使用python开发多平台更方便.........
: 不确定,记忆中层间看哪个网页如是说。哈。如果你有否定,也求个证。哈。
这下穿帮了,漏底裤了
sublime 是c++做的? are you sure?
你可以到招聘网站上看看招聘信息,你就知道你缺少什么了。
有些公司做网络游戏还是有用MFC的,不用去学那个document/view,主要是winapi要掌握好,最好去看那本《windows编程》那本经典书,看前面十几章看到bitmap就行。MFC其实就是对winapi的封装。
要找工作能做一些小游戏就可以了。不用在乎别人的看法,那些国外大公司还不是都在用C++。只要你掌握得够好,不愁找不到工作。C++的语法学得差不多后去看看STL。
为什么一定要从事c++相关工作呢?为什么要死啃c++呢?
你自己从接触c++到现在,感受到它有什么让你特别喜欢的地方了吗?
难道就因为听说c++ “难” 所以去学它?就因为听说c++“啥都能做”所以去学它?
你将来的薪水、职位跟c++没有任何关系,只跟你的“能力”有关系。
学校里面石油工程老师接来的项目多数都是MFC的,但是是C#的。
其实现在做C++比较有钱途的是做手游,比如你掌握了C++基本语法后,去学个引擎比如cocos2d,然后做个小游戏就可以去找工作了,当然也可以去学oc,这和C++很像,然后做iPhone开发,
mfc实在是没什么钱途,不要学了,如果只考虑赚钱,不考虑兴趣,其实java/php就是多快好省的东西,不花多少力气学习,就能找到工作,赚到钱,
1.C++目前不要定位于界面,要定位与服务端、多线程、并发方面。也不能想定于windows,必须Linux下面的服务端开发。
2.如果你要搞MFC,还不如转行搞WPF。。。因为折腾了WPF以后,至少你在win8,wp也是想通的。。
3.如果你只是限定与windows方面的开发,对你能否找到适合的工作很担忧。。
其实我想说。。。这一个真的很蛋疼啊。现在很少有公司还在用Mfc
了啊。。你学东西总是要跟着这一个市场走的吧。。他们需要什么你去做咯。。不然你学出来的东西根本就没有人要啊。。
要了解市场的话你可以去看一下各个大网站的招聘啊神马的。。已经明显地写出了他们需要的是怎么样的人才。。
MFC 真没必要学了,没有基础学起来费时不讨好,而且很容易把你自己绕进去
不如专心去学点开源的网络通讯框架,这个更有意义
做前端UI的框架Qt,个人感觉比MFC来得直接多了

我要回帖

更多关于 最好学的h5游戏引擎 的文章

 

随机推荐