找回密码
 立即注册
查看: 1244|回复: 20

做游戏与搞图形学有什么联系?

[复制链接]
发表于 2021-4-4 21:26 | 显示全部楼层 |阅读模式
做游戏与搞图形学有什么联系?
发表于 2021-4-4 21:27 | 显示全部楼层
作为选择游戏开发岗位的应届生,结合我面试和实习经验来回答一下这个问题。
1.题主想知道游戏公司想要的应届生什么样子,
我们就直接看下这些公司的招聘需求啊。
拿国内游戏行业一流的腾讯游戏和网易游戏来说,
腾讯校园招聘:


正式校招分岗位和事业群,但是各个岗位的要求是一致的,
因为岗位选择在事业群前选择,岗位要求里并没有要你懂图形学。
网易游戏校园招聘:


提到了图形学,但仔细看,是非必须。
就是你不懂也没关系。
所以游戏公司想要的应届生和其它互联网公司大方向都是一样的,
就是计算机基础扎实,会编程,以及有能力解决一些有难度的问题。
你可能会问,这些只是官方套话,实际面试是不是一样?
我就拿自身和同学面试这些游戏开发岗位的经历来谈一下。
我个人找实习和工作岗位参加了这3家游戏公司的招聘,多益网络实习(1笔+1轮面试),腾讯tst计划实习(2轮面试),网易游戏校园招聘(1笔试+2轮面试)。运气不错,这5轮技术面都过了,因为腾讯tst有一点特殊(稍后会讲),其它面试都没有和图形学相关的问题,即使简历上写了爱好图形学。
这些面试通常都会:
    考察你编程语言的熟悉程度,比如c++的一些概念,一些底层细节。
    考察计算机基础知识,操作系统,计算机网络等一些概念。
    考察算法和编程基本功,需要手写代码。
面试过程中一般都会遇到你没准备过让你措手不及的问题,需要结合所学知识(不一定大学所学)加上一定思考才能解决。
在tst二面中,因为自我介绍提到了了解熟悉opengl,喜欢图形学,被问到pipeline和基础光照模型。而我根据其它同学的经历,走正常实习招聘和校招面试渠道,都没问到图形学的知识。另外比如游戏开发面试还是较大可能会问到数学题的,tst也被问到一道立体几何相关的问题。
因为难度和高中那种几何题差不多,我就直接说,
"xxx,有几个未知量,可以根据xx,xxx,xx列几个方程,待定系数解就好了:)"
面试官点点头,"解方程啊,这么麻烦,你能不能不解方程来求出来"
我想了一会,"应该可以这样,xxx,xx"
他听了几句,然后目瞪口呆,"你这不还是解方程?"尴尬,
然后我想他之前还特意问了下向量相乘的一些概念,就想了下用向量的做法解决了
再讲一个小片段,我室友面腾讯ieg两轮的过程,他原本没有选事业群,但是笔试成绩好,被分到ieg来面,所以你看基础知识很重要。
第一轮 面试官特意表扬了一下笔试成绩,没问什么基础问题,面试官给他一张纸,纸上有不同类型的题目,有系统设计题,有数学题... 所以说大公司会考虑到各种情况,让你展现出自己的特长。
第二轮 主要面的问题应该就是mlioyip大神专栏提到的那个小球碰撞问题知乎专栏,室友回来跟我吐槽,这个题目啊坑很多,他不告诉你可以xx样,可以xx样...然而他通过了面试,所以展现出你的思维和解决问题的能力很重要
另外再举一个失败的例子,另外一个同学面ieg实习生,因为面试官说他没有具体的游戏开发项目,所以没有通过。
同时,一般面试完,我都问了面试官如果在游戏行业发展,希望给一些建议。下面都不是原话了,我个人理解的复述(不是来自同一人):

      对游戏,游戏开发一直要有感觉或者兴趣
    要有自己的强项,游戏开发其实也可以分的很细了,渲染啊,AI啊,服务端啊,AR/VR啊,技不在多而在于精
    最少接触一款游戏引擎(因为我基本用的都是opengl),多体验
    还是尽量使用dx,虽然opengl只是xxx,实际上开发上还是用dx
所以总结一下:如果毕业想进游戏开发岗,
    先学好基础,除了一般的计算机课程(计网,操作系统这种), 如果能学习线性代数,概率论,数字图像处理这些课程,还是可以好好学学,这些知识可以帮助你更好学习图形学。
    多在这方面实践,体现出你在这方面的兴趣,看看知乎用户文刀秋二他的个人经历,就明白如果一心钻研图形学, 应该什么样,其实我更建议像知乎上王选易这样,从游戏入手,本来就是游戏开发岗,为什么不直接做游戏demo,带上你的游戏直接去面试难道不更令人印象深刻?最后老老实实刷点题
2.想去游戏公司搞游戏开发的需要专研那么深吗
如果仅仅是游戏开发,我觉得不需要太深;如果引擎开发,就钻研越深越好,
但引擎开发,也需要你基础扎实的。
把游戏开发过程抽象一点,假设我们开发人走动的功能,分三个步骤:
从人能走->人走的正确->人走的逼真,动作好看
一般而言,图形学知识主要用于第3个步骤,提升画面质量,前两个步骤虽然也涉及
图形学的问题,但是基本上游戏引擎已经给你解决了,你只要写一些简单逻辑就可以了。严格的说,游戏开发是图形学的应用,但不了解这些知识,你也能开发游戏。
不是很恰当的例子,就好像计算机可以说是数学的应用,但你不需要去学了数学才能用计算机。
虽然没正式开发上线的游戏,但在实习期间小组也做了一个MiniGame。取我自身实习过程作为例子,一部分因为开发周期的限制,另一部分因为游戏本身的业务逻辑需求就很复杂,基本很少来处理渲染质量的需求。我们项目是酷跑小游戏,我负责的部分包括人物动作及状态维护,
一开始策划说:
"我们先实现简单的,基本跑,跳,下蹲你得有把,二段跳也要加。"
好了,我给它加上,
过了两天说:
"我最近玩几何冲刺,它们那个空中弹簧和地面弹簧很有意思,我们也加上吧,
天空弹簧啊,就是有一个区域,空中进入了这个区域,就处于可触发状态,就算你之前已经经过二段跳了,只要你按跳,它还可以进行一次一段跳....."
然后过了两天,
"xx啊,我觉得我们这个不够流畅啊,你看这个啊,其实我视觉上人物已经落地了,但是它还不能跳跃次数清0啊,你得弄一下就算它物理逻辑上判断还没触地,画面上看已经触地就能重新起跳了啊"
又过了几天,
"xx啊,我们这个得有几个特色功能啊,我想加几个副作用的怪物,碰了这些怪,就处于负面状态,比如这个延迟怪啊,你碰了它,任何操作都得在一段时间后才响应...."
因为当时还不知道设计模式中的状态机模式,我只能写很长的if else来判断状态,这些处理起来很麻烦,没有精力顾的上去写shader实现一些效果。
题主觉得可能游戏很多酷炫的画面都需要复杂的图形学,其实很多用帧动画,粒子动画就解决了,什么,不够好看?你去找个好看的动画换一下不就好了。

我个人觉得游戏能够正确流畅的运行的重要性在画面质量之上,游戏开发是一个需要取舍的过程,不像图形学研究可以在一个方面追求极致,性能,稳定性,画面质量...得需要综合多方面来平衡。

最后,希望题主如愿以偿,作为将要入游戏行的新人,希望各位前辈多多指教:)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2021-4-4 21:29 | 显示全部楼层
游戏不是很了解,我来说说图形学吧

求认识我的大神在评论区指正……

现在的图形学已经不是当初Sutherland等前辈们搞的那一套东西了,前辈们看到后辈的工作肯定很欣慰的……(●ˇˇ●)

传统的,"经典意义"上的图形学,就是你在本科学的OPENGL那种东西,比较侧重渲染,如何在屏幕上画出来一个什么东西,光照怎么算,这些东西在20世纪末21世纪初很火,但是肉比较多的骨头都啃完了……这种经典图形学也带动了游戏的发展,电子海洛因也是那个时候才慢慢出现的XD

比如:
Phong shading - Wikipedia
Anti-aliasing - Wikipedia

现代意义上的图形学方向已经很广泛了,不才,尝试列举一些:

Fabrication:
世界第一Fabrication组在这里:The Computational Fabrication Group
这里也会牵涉到几年前特别火(现在好像又火起来了……)的3D打印,国内做的人很多,比如Prof. Ligang Liu at USTC (中科大刘利刚教授)

Fluid Simulation:
研究流体怎么运动,努力向实时交互方向发展。当然这个跟CFD其实有很大重合,不过大家的关注点不太一样,CFD更多是关注怎么准,CG更多是关注怎么快
年轻一代比较出名的做流体的,这一位:Chris Wojtan,以及知乎大神 @张心欣
稍微再往前推几年,这一位大神还在带学生:Robert Bridson

Acoustic:
怎么通过声音来还原出发生的器物?嗯对这种看起来很不可能的从2D信息还原3D模型的事情,已经有一堆人在做了……比如Changxi Zheng's Homepage

Geometry:
Play with triangles!每天的工作就是摆弄三角网……要懂一些微分几何,方向大神比如:igl | Interactive Geometry Lab

AR/VR:
交叉领域,CG在AR/VR的主要作用是做实时建模/渲染。原来经典意义上的渲染/建模都是离线的,当你戴上了眼睛,当然不能等电脑算完了再给你看了- -这方面的黑科技大家都知道:Microsoft HoloLens

当然,新技术也在不断出现,比如没事看看SIGGRAPH每年都划分了什么section(不过有的名字是挺诡异的……)http://kesen.realtimerendering.com/

是不是感觉跟你想象的“游戏制作”不太一样呢( ̄▽ ̄)"
发表于 2021-4-4 21:33 | 显示全部楼层
明确两点:
1.游戏开发只是借助了电脑和图形学,没有这两个,一样可以开发游戏。
2.图形学是为了在电脑里模拟物体而形成的一门研究领域
      目前,游戏公司偏重于成熟稳定的框架,这样更有利于快速开发游戏,毕竟根本是为了赚钱。只有很少一部分大公司需要自己去搞游戏引擎,只有当开发或者定制游戏引擎的时候,才会用到一点图形学的知识,不过总的来说,游戏只用到了很少一部分图形学知识。更多的图形学知识,会用于建模/电影之类的。如果你感兴趣于游戏,那么图形学会让你走的更远,不过短期来看并没有什么卵用,不如踏踏实实把一款游戏引擎用好,这样游戏公司大部分的工作才适合你。
上面全是废话,下面才是我想说的:
      首先,无论外部环境如何艰难,作为一个有志于游戏开发的程序员,你都不该自暴自弃,学习更高深的东西,有百利而无一害。同时,作为社会人,你需要提供高质量的服务,这是你应该承担的责任。下面主要是针对对游戏开发和图形学有兴趣,却不知如何下手的同学的一些小小的建议。
--------------------------------------游戏工程---------------------------------------------
在中国,游戏在很大程度上是服务业,不是制造业。一款游戏更多的是内容驱动(美工,策划),程序员反而成了辅助,为游戏的实现而提供技术方案。
      其次,1.游戏顾名思义是为了娱乐而制定的一套规则,它的可玩性高于一切。可玩性是游戏施加给玩家的挑战组合,一个游戏如果能让玩家觉得有无限的可能性,那么就说明这个游戏可玩性比较高。一个规则可能很简单,但是当多个规则组合起来,就会产生不可预测的结果,这就是游戏的魅力More is Different。可以试试用编程来玩玩生命游戏。还有一个梗,如果计算机在一个游戏中无法战胜玩家,那么就说明这个游戏有很高的可玩性。2.游戏是一场赌博,比如游戏中的生物,如果它们的属性都千篇一律,是不是很无聊,而如果仅仅是加入了一点随机,会让玩家感觉这个游戏更真实,更有想玩的冲动。      计算机的出现,让游戏开发变得更加学科化,因为计算机可以代替人脑来执行规则。这意味着,作为程序员,你就是秩序的象征,你就是上帝。
建议:
0.如果只想写游戏逻辑,只用熟悉框架,熟悉语言。客户端框架推荐unity3d,unreal4,cocos2d,这些框架都有完整的工具链(脚本,资源管理,编辑器),可以让你快速上手,同时社区也比较火热,不用担心遇到问题没地方问。服务端不太了解,每个公司都有自己的服务端引擎吧,我比较看好一款叫kbengine的开源引擎和云风大哥的skynet,希望朋友们可以推荐一下还有哪些开源的游戏网络引擎对初学者比较友好。
1.如果觉得引擎不符合你的要求,你想自己定制,做一个引擎geek。那么ogre是个很好的选择(虽然有人说它过分设计,但是你如果很厉害,还是可以改的嘛)。另外,龚大大(叛逆者)的klayGE不错
2.如果想本科毕业后从事更为核心的设计。学好线代/信号系统/数学分析/概率统计(重要程度由高到低)很重要,然后去找一些图形学初期的论文看看,主要是理解别人的意思。线代不用说了,游戏中的各种变换都依赖于线代提供的数学工具。信号系统提供的思路,如何从不同的基来表达信号,很大程度会改变你的世界观,对,世界观,然后游戏中的pre/postprocess很多用到信号系统(本科的同学Oppenheimer懂得吧)。数学分析,会培养你的数学演绎能力,这点在数学建模,特别是游戏这样一个理想国里,是非常有用的。概率统计,AI不能多说。
3.大学期间,如果想开发游戏证明自己,绝对不要要求太高。如果你能找到一个美工同学,那么跟他/她一起成长再好不过。千万别因为想自己做一款游戏而走偏了方向。我就因为想做游戏而自学了建模,在youtube上下载了将近200G的blender教程,到最后,可以做一些基本的物体,调一些动作,做一些纹理,而且全是用一个鼠标完成,至今不会用数字板。这些工作你可以投入一些时间,但是这些时间你可以用来做更有意义的事情,比如成为一个编程高手。
4.可以考虑实现一个软渲染器,很多人推荐,虽然我没去做过,不过应该收益蛮大。它可以让你对渲染的本质有所理解,同时增加你的代码掌控力。推荐《3d游戏编程大师》,理解核心即可。
5.电子游戏开发,需要各方面学科的能力,c++/directx(问我为什么不写opengl),软件架构编译原理网络数据库。都要尝试动手去做(比如学操作系统,你就可以试着给一些简单的cpu写个系统,不要是x86架构,因为你还只是个学生;数据库的话,你可以先尝试写keyvalue型的数据库;网络的话,可以自己试试写个网络库(推荐@陈硕大哥的muduo,因为有书可以配合理解);编译原理,一个简单的脚本语言;这些你都可以去尝试,比你考高分有用的多)。这句话我想说三遍。
6.gamedev/stackover,希望你常去看看。
7.记得把你作品保留下来,然后不断对它迭代,如何把它保留下来是门学问,我就因为太关注于本身能力的修炼而忽略了这个。大四之前写过的代码和硬盘因为一杯咖啡全送进了回收站Forever。如果你是一个有心的人,那么找一份游戏相关的工作完全不是问题。
8.紧接着上面的一点。学会使用github,自己写个博客。很重要,不要嫌麻烦。血泪教训。
9.说到图形学与游戏的关系。不得不谈到一个人,也是我最崇拜的一个人。3D游戏引擎之父-john carmack。关于他的逸闻趣事有许多。最出名的是那个开根号的magicnumber,0x5f3759df,让游戏中最常用的函数快了4倍!也是那本《doom启示录》让我对图形学和游戏开发更加神往。
10.上面说了点工程方面的,更多是围绕游戏领域。然而在图形学这个领域中,有许多细小的分支更值得关注。具体的一些见硕鼠酱的答案。
-------------------------------图形学--------------------------------------
图形学还是交给大牛们介绍比较好,不过作为入门,我挑了几个经典有趣核心的方面说说。
0.Physic中的Deformable Body。这是我比较喜欢的一个子领域。它主要是研究物体的物理性质,如何模拟物体的受压形变及其恢复过程。比如一个植物,你将它折弯,松开,它会摆动,如何在计算机中表示这些摆动呢?有两个可选方案,1.Mass Spring System.是将物体受压运动看成由很多小弹簧共同震动产生的。我记得我刚读大学的时候就拜读了Milo Yip大神在麻辣马《爱丽丝梦游魔镜》中关于头发的建模(如果我记得没错,就是MY写的吧?同时感谢他翻译的《游戏引擎架构》,质量很高),那篇文章算是DBody的一个入门吧。2.有限元方法
刚加入知乎,如果稍微有点帮助,希望读者给个赞。
发表于 2021-4-4 21:41 | 显示全部楼层
呃。

好歹也在游戏公司工作过一段时间,来误导大家一下。

--------------------------
* 还是别学OpenGL了吧。

OpenGL基本上是快要过时的东西了,桌面游戏的霸主绝对是DirectX。OpenGL过于陈旧,特别是状态机的设计一直遭到诟病(珍爱生命远离OpenGL)。DirectX虽然我也觉得不怎么样(尤其是我也不喜欢OOP),但是毕竟更加贴合新的硬件体系结构,设计思想上与时俱进一些。

很多引擎会对OpenGL或者DirectX这种底层的图形API再做一次封装,而这些封装常常看起来,很像DirectX的API……

--------
补充下:有朋友提到移动端不用OpenGL ES用啥,请注意原文说的是桌面。另外,移动端可以看看Metal, Vulkan这些设计上比较新的东西,往往更接近于DirectX。所以学习上还是建议DirectX,历史包袱小。OpenGL虽然可以不断升级,但是毕竟历史包袱在那里。

--------------------------------
* 计算机图形学,到底是个啥?

计算机图形学我们可以笼统的认为是包含以下几个领域的学科:

- Modeling
- Animation
- Simulation
- Rendering
- Image Processing
- User Interface

----------------------------
* 游戏引擎,又是个啥?

游戏引擎所需要用到的技术范围似乎就更广一些了:

- Modeling需要的吧,至少涉及到模型的数据格式表示什么吧。

- 动画支持需要的吧,人物骨骼动画(Skinning)什么的总要的吧。

- Simulation需要的吧,总要模拟下刚体物理啊、碰撞啊、爆炸啊什么的吧。

- Rendering显然是需要的,但是这也是很多人误解的地方。注意:Rendering只是游戏或者游戏引擎里面很小的一部分!渲染引擎不等于游戏引擎!之前见过不少人写了个渲染引擎就说自己写的是游戏引擎,拜托……

- 图像处理也是常见的,比如做个屏幕空间的特效,比如预处理游戏中的贴图资源等等。

- 用户界面也是需要的。别小看这块。话说Scaleform这种专门用来做游戏GUI的软件还是卖钱的呢。设计个成熟稳健又易用的GUI系统,很不容易。而且主机游戏的话,还需要考虑对各种操纵设备的支持。

除此之外,我们再来看看游戏引擎里面还包含了啥:

- 现在大家喜闻乐见的网络游戏,总需要计算机网络相关的东西了吧。这就涉及到客户端、服务端、网络协议、信息加密等。有了服务端少不了数据库、负载平衡、软硬件防火墙、管理后台等。

- 游戏逻辑。这块又涉及到很多引擎会提供自己的脚本语言,或者是集成现有的语言,给数值设计或者写逻辑的程序员配置和编程。这就涉及到计算机语言、编译原理、运行时库。

话说其实在游戏公司,写游戏逻辑的程序员占了大多数。刚去公司就很难指望做多么酷炫的技术了,做好心理准备写个几年Python或者C#的游戏逻辑或者用户界面吧……

- 文件系统。游戏资源怎么打包?玩家数据怎么存档?还得跟操作系统各种不兼容、各种坑打交道。

------------------------------------
* 怎样的游戏程序员最受公司欢迎?

其实我觉得这个问题跟怎样的程序员最受欢迎没有本质区别,游戏程序员无非多了:

- 热爱游戏,有开发游戏的激情
- 玩的一手好游戏(玩的不好怎么有丰富的阅历啦)
- 熟悉至少一个游戏引擎
- 熟悉至少一种图形API(还是推荐DirectX)

简单再回顾下怎样的程序员最受公司欢迎(不代表我喜欢这样的):

- 容易沟通、为人踏实
- 薪资要求与职位职责对应
- 能够稳定工作,而不是三天两头跳槽
- 技术基础扎实
- 能够独立完成工作、独立思考
- 不怕苦、不怕累(游戏公司基本上上线前疯狂加班到失去人形;上线后打个补丁或者发个更新包也能把团队折磨的死去活来。话说回来其它大部分程序员工作的地方也都差不多这样)

------------------------------------------
* 想去游戏公司工作,需要钻研到很深吗?

上面聊了这么多,可能题主也看出来了,如果只是去国内前十的游戏公司工作,还真的不需要钻研的多深。

如果单纯比较技术的话,还不如找找朋友内部推荐来的直接。毕竟很多时候,一两次笔试或者面试,很难完整反映一个人的水平和潜力,很大一部分评价其实来自于沟通和印象上,这就存在很多不公平或者不确定的地方。再次:并不是技术最好就能给人好印象。

钻研的深本身并没有错,但是调整好心态,面对现实,否则可能因为英雄无用武之地感到很不平衡。

但我觉得钻研深浅这个话题,不是为了眼前的工作,而是主要是为了未来你能走多远,能不能崭露头角,能不能独当一面。这是为了自己,并不是为了任何人。

做图形也好,做游戏也好,都未必会做一辈子。所以在任何事情上花多少时间精力,钻研到什么程度,考虑下自己想要什么最重要。

-----------------------
根据评论区提示编辑了一下回答,Computer Vision是个比较综合的领域,不能算作Computer Graphics的分支,应该替换为其中用到的Image Processing才严谨些,谢谢提醒。
发表于 2021-4-4 21:45 | 显示全部楼层
做游戏的人并不是都需要图形学基础
比如策划、测试、音响、概念美术。。。

但是做图形学的可以去做游戏
国内这方面不是很清楚
国外游戏产业里,图形学的研究挺多的,年年的SIGGRAPG还有GDC都有不少关于这方面的文章
主要研究的问题的话

有比如:如何更高效并且更好的实现光照、如何更有效的设计开放世界的场景处理、如何更好的实现世界的细节处理(比如雪地效果、物件效果),以及抗锯齿的研究。。。
发表于 2021-4-4 21:48 | 显示全部楼层
图形学肯定是学的越深越好,如果你想深入学习OpenGL的话,推荐两个网站Learn OpenGL, extensive tutorial resource for learning Modern OpenGL 和 OpenGL Step by Step,书的话就是红宝书和蓝宝书啦,但是不能光看书还是要多多实践。其实游戏开发不光是图形学方面,还有很多方面的,例如游戏逻辑开发,服务器开发等,很多人即使完全不会图形学也能在游戏开发行业混得很好。
发表于 2021-4-4 21:50 | 显示全部楼层
游戏开发岗位也有细分。
一般分客户端和服务器。
客户端会负责所有显示以及游戏逻辑的实现。
服务器会负责后台数据交互逻辑的实现。

题主在看OpenGL说明有意向做客户端? 那么国内凡是没有自研引擎的游戏公司都不需要你研究的太深,因为进去之后大多数是写逻辑的。

但是,技多不压身。

一个懂图形编程,甚至能够自研图形算法提高渲染效率的游戏客户端程序员身价会高过一般的。在竞争中多少有点优势吧。

以上。
发表于 2021-4-4 21:54 | 显示全部楼层
图形学算是游戏开发的一个分枝,但绝对不是最重要的分枝
但是学了也不会有啥坏处,可以加深你对游戏开发的理解

大约是:CAD原理和画建筑图之间的关系
发表于 2021-4-4 21:56 | 显示全部楼层
开发枪战游戏,开一枪打场景的物体,让你裸写这个逻辑,你怎么做?
你可能会用一根射线和场景的网格做求交。
这需要遍历场景的所有网格,优化起来相当废力气。
如果你会写shader。
你只需要把所有物体的 ID,渲染到一个帧缓存。
当你鼠标点击屏幕,只需要从缓存回读,屏幕这一点物体 ID。
如果你会图形学,裸实现这个拾取功能也才几行代码,这个方法还有很多优化空间。


JackSquirrel:硬核光线追踪开发(课程视频+运行源码)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-9-20 20:21 , Processed in 0.098765 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表