找回密码
 立即注册
查看: 295|回复: 5

游戏开发为什么难学?

[复制链接]
发表于 2022-12-19 21:19 | 显示全部楼层 |阅读模式
请问,游戏开发数学底子要深吗,但具体备用知识到哪一步就能独立完成开发游戏了。
还有就是,游戏开发需要系统化学习吗?
发表于 2022-12-19 21:26 | 显示全部楼层
基础能力如果以入行为标准的话,主要在于C#语言方面额能力和Unity功能模块的熟练度。最终这两个维度的基础能力将体现游戏demo的制作上。
所以综合以上因素,如果想要上手游戏开发,那么就需要从开发语言入手,至少做到游戏脚本的开发;紧接着上手一些小的游戏项目去完善自己对Unity功能模块的熟练度;最终打磨1-3个比较精品的游戏DEMO,结合自己面试的公司岗位的JD,去准备自己面试、简历。
C#基础
基本语法/数据类型/类/封装/委托/事件/接口和泛型/继承/多态/OOP
这些重点一定要在平时的实操中反复磨炼,确保在你面试的DEMO中能够非常有条理的展示自己对C#的掌控。当我们实操上扫除盲点了以后,就可以回归到这些重点内容的教程解读上来,复盘自己在实操上的问题,同时也防止招聘笔试可能会考到类似的问题。
大家这时候可能会有些担心,毕竟这些重点模块内容跨度这么大,具体哪一个点才是笔试中经常考的热点呢?为了平时学习在就业上具备强的结果导向,我们VipSkill结合过往成功面试网易、鹅厂等游戏大厂学长学姐的面试经验为大家整理好了一套大厂面试攻略(包含真题、简历模版、还有机会获得名师一对一就业指导的机会)
点击卡片领取海量U3D学习资源/面试攻略/简历模版
Unity基础
脚本开发/API/物理系统/动画系统/UGUI/粒子系统/Shader

  • Unity脚本基础:这点和刚才说的一样,可以再项目实战中掌握并熟悉。
  • UI界面开发
  • 资源管理与热更新:AB包打包与加载
  • 程序设计:BUG调试
  • 架构能力:子模块设计
案例分享学习
引擎入门 | Unity基础面板详细介绍(1)
引擎入门 | Unity基础面板详细介绍(2)
引擎入门 | Unity基础面板详细介绍(3)
最后就是能够独立开发出一款游戏DEMO了,所以之前在一些小游戏项目中实践学习Unity功能模块和C#的这个过程非常重要。另外我们所投入精力要去做的游戏DEMO一定是要和最终面试挂钩的,因为你不可能在有限的时间里做出5-8个游戏Demo,一定是根据目标公司对于技能维度的要求,专攻3个创新且能够在面试中展现个人技术能力的游戏DEMO。这样的游戏demo才能吸引面试官的眼球,并能够让面试官通过游戏demo考察到你的能力正是他们需要的。所以平时就要多考察一些游戏公司的岗位JD,关注他们的游戏都有哪些亮点、技术点,为自己游戏DEMO提前做准备。
发表于 2022-12-19 21:34 | 显示全部楼层
因为游戏开发涉及的知识面非常广,有渲染、网络、物理、AI、动画等。随便一个方向都够学好长时间
电子游戏是一款软实时(soft real-time)模拟软件。软实时模拟软件需要做到可以响应实时操作,并且即使由于某些原因没有立即响应也不会造成灾难性后果。在电子游戏这样的软实时模拟软件中的大部分数学问题没有闭合式解,因此需要进行离散的模拟才能得到一个结果。
游戏引擎正是为了完成游戏中各种各样的模拟而整合了各种各样的模块,例如物理模块、渲染模块、逻辑模块等。早期的游戏引擎大多只能运行在特定平台,例如《雷神之锤》的引擎Quake engine、魔兽世界用的暴雪自家引擎。
双击再看,养成习惯



Quake



魔兽世界

  后来出现了可以跨平台运行的通用游戏引擎,例如Unity、Unreal。
<a href="http://www.zhihu.com/zvideo/1429528678615625728" data-draft-node="block" data-draft-type="link-card">  一般来说,越通用的游戏引擎,在特定平台上的运行效率会越不如那些只能运行于特定游戏平台的游戏引擎。因为性能优化总是基于特定假设的,这个假设越单一,优化起来会越轻松。


  上图中,游戏专用子系统第三方软件开发包之间的内容都属于游戏引擎的内容。
硬件

  硬件是运行游戏的物理设备,例如pc、xBox Series X、PS5、ns。



PC



xBox Series X



PS5



NS

驱动

  驱动是负责和硬件进行通信的底层软件,常见的驱动有显卡驱动(Nvidia、AMD)、声卡驱动。有了这些驱动之后,开发人员就不需要为具体的硬件设备编写代码。驱动很好地隐藏了硬件设备的复杂性,使开发工作的复杂度降低。




操作系统(Operating System)

  在操作系统层面上,大致上可以分成游戏专用操作系统非游戏专用操作系统
  游戏专用操作系统有xbox的XBoxOS、ps4的Orbis OS、ns的Horizon。这些操作系统的通常知识一个轻量级的库,在游戏运行时,游戏程序几乎可以占有硬件的所有资源和控制权,所以游戏运行效率很高。
  而非游戏专用操作系统通常都会因为各种各样的原因只能占用硬件的部分资源和控制权,例如windows操作系统采用基于时间片(time-slice)的抢占式多任务(preemptive multitasking)方式来运行所有程序。
  这也是为什么同一款游戏在同样硬件性能的PC和PS3上面运行,PC上可能直接变成PPT,而PS3却可以30帧稳定运行。



xbox的XBoxOS



ps4的Orbis OS



ns的Horizon

软件开发包(software development kit, SDK)

  软件开发包一批功能良好的函数的集合,这些函数又称为称为API(application programming interface)。
  大部分游戏引擎都会接入第三方SDK以增强引擎的功能,通过接入SDK的方式给引擎增加功能可以减少引擎的研发压力,同时又能获得良好的效果表现。
  下面列举一些比较常见的第三方SDK:
  物理引擎有Havok、PhysX、Bullet等。






  动画引擎有Havok Animation、Granny等。


  Havok Animation可以在运行时给动画加上物理效果,也就是物理动画技术(Physically based animation)。
  动画的制作流程比较复杂繁琐,部分有钱的游戏厂商会通过动捕(motion cap)的方式来制作动画,钱包确实顶不住的话可以使用Endorphin来自动生成帧动画,提高生产效率。还有一种减少工作量的方法,使用Euphoria在游戏运行时生成符合物理和生物力学的动画。
平台独立层(platform independence layer)

  平台独立层会为特定模块封装各个平台的底层API,让游戏引擎可以支持在多个平台上运行。这一层算是游戏引擎和外界环境进行沟通的桥梁。
核心系统

  核心系统会为游戏引擎提供一个软件该有的底层功能,所有类型的软件都会有这一层。
  这一层的内容也不少,我们关注得比较多的是内容管理模块。因为游戏引擎往往都需要保证最多每隔32毫秒就要执行一边全体代码,对于内存的管理要求会比较高,需要实现高效地内存分配和释放,还会自定义数据结构及算法来减少或完全消除动态内存的分配。
渲染引擎

  渲染这一块内容就比较丰富了,已经被独立成一个专业学科--计算机图形学。一般游戏引擎都不会去开发自己的渲染引擎,因为投入产出比太低,而且现有的渲染引擎已经很成熟了。所以游戏引擎一般都会接入已有的渲染引擎。
常见的渲染引擎有DirectX、OpenGL、Vulkan、Edge等。这里的Edge并不是指微软的Edge浏览器,而是专门为PS3渲染设计的,拥有高效几何处理技术的渲染引擎,同时它还具有动画播放功能。






  渲染引擎一般会采用分层架构(layered architecture)来组织代码,一般会被分为低阶渲染器(low-level renderer)场景图(scene graph)/剔除优化视觉效果前端
  低阶渲染器会使用图形SDK来设置好渲染器,实现几何图元(geometric primitive)的高速渲染。
  场景图/优化剔除会为不同的游戏场景提供不同的算法来限制提交到GPU的图元数量。常用的算法有平截头体剔除(frustum cull)、空间细分(spatial subdivision)、portal、遮挡剔除技术。其中空间细分算法可以使用不同的数据结构来构建场景图以快速判别潜在可见集(potentially visible set, PVS)。
  视觉效果层专门提供丰富的视觉效果,其中包括粒子系统(particle system)、贴花系统(decal system)、光照贴图(light mapping)、环境贴图(evironment mapping)、动态阴影(dynamic shadow)、全屏后处理效果(full-screen post-processing effect)等。其中全屏后处理效果包括高动态范围(high dynamic tange, HDR)光照、敷霜效果(bloom)、全屏抗锯齿(full-screen anti-aliasing, FSAA)、颜色较正(color correction)等。其中颜色较正包括颜色偏移(color-shift)、略过漂白(bleach bypass)、饱和度(saturation)、去饱和度(desaturation)等。美术师一般会在这一层上面进行工作。
  前端是开发者、玩家与游戏进行交互的桥梁,包括了平视显示器(heads-up display, HUD)、辅助开发的工具(如内置菜单、主控台)、图形用户界面(graphical user interface, GUI)、全动视频(full-motion video, FMV)系统、游戏内置电影(in-game cinematics, IGC)系统等。
人工智能

  游戏中的传统人工智能并不是类似于深度学习的人工智能,而只是让角色看起来有智能。所有貌似拥有智能的行为都是提前硬编码好的,有限状态机和行为树是最常用的技术。现在游戏也慢慢开始加入了具有自我进化能力的人工智能,以后游戏过程中的不确定性会进一步增加。
性能分析工具

  为了提升游戏运行效率,需要在研发过程中或研发完成时对游戏进行性能分析。现在比较成熟的性能分析工具有Intel的VTune、IBM的Quantify和Purify、Compuware的Bounds Checker。有些游戏引擎会开发自己的性能分析工具,例如unty内置的Profiler。一个性能分析工具大致需要具备以下功能:

  • 支持在游戏源码中手动加入测量代码,为希望监测性能的代码进行计时。
  • 游戏运行期间,在屏幕上显示性能统计数据,这些数据包裹CPU占用率、GPU占用率、显存占用量、内存占用量、内存使用率、最高使用率、内存泄漏量、网络延迟、FPS等。
  • 将性能统计数据输出并保存下来,可以保存为文本文件、Excel文件等。
  • 允许在代码内使用调试用打印语句(print statement),可以切换不同的调试输出种类,并设置输出的冗长级别(verbosity level)。
物理

  游戏物理模拟是个大部头,如果项目有真实物理模拟的需求,那么一般会专门配置一位负责开发物理效果的程序员。
  游戏物理和仿真物理的侧重点并不相同。仿真物理注重模拟效果的准确性,而不关注性能。游戏物理不追求模拟百分百正确,只要最终的效果看起来合理就好,需要特别关注性能表现。因为游戏需要在配置一般的设备上运行,没有太多的算了投放到物理模拟中。只要效果看起来没太大问题,那么它就是对的。
动画

  动画同样是一个大部头,如果项目的动画很多且复杂细腻,一般也会专门配置一位专门负责开发动画效果的程序员。
  动画效果可以很简单,也可以很复杂。最简单的就是播放单个帧动画,复杂的可以搞基于物理的动画、IK效果等。
  负责游戏动画的程序员除了要做好表现效果之外,还要做好资源管理,包括动画资源和动画状态机资源。因为现在大部分项目都是使用动画状态机以及动画融合技术来制作动画效果。
  一个表现效果可能由多个动画clip融合而成。使用这种方案来做动画表现,产出的动画资源一般都不少。
  如果某个模型的动画表现比较细腻的话,它的动画状态机也会很复杂。我曾经见过一个动画状态机打开之后整个屏幕都是密密麻麻的transition连线。
人体学接口设备(human interface device, HID)引擎

  HID引擎会将游戏外设和游戏引擎对接起来。比较常见的游戏外设有键盘、鼠标、手柄。还有一些比较小众的游戏外设,例如赛车模拟设备(方向盘+踏板+挡杆+手刹)、飞行摇杆、VR控制器。



xbox手柄



ps手柄



ns手柄



健身环



赛车模拟设备

  游戏外设的输入信号会先被映射为输入代码,再映射为游戏的具体操作。
音频

  游戏的音频也同样重要,好的音频效果可以营造良好的游戏氛围。一般游戏引擎都有自己研发的音频功能,例如cocos、unity、unreal都有。但是在游戏开发过程中一般不会直接使用引擎提供的功能,而是会使用第三方SDK,例如FMOD、Wwise。因为第三方SDK功能更加完备。




网络

  游戏引擎提供基本网络通信功能并不是什么特别难的事情,但是要提供一套成熟通用的网络同步功能非常困难。不同游戏对网络同步的需求由很大的区别,所以游戏项目组一般都会开发自己的网络同步功能以匹配自己的游戏业务需求。
数字内容创作(digital content creation, DCC)应用软件及资产调节管道(asset conditioning pipeline)

  设计师会通过DCC工具将模型、材质、贴图、音频等工具生产游戏素材。团队一般都会使用市面上以由的DCC工具,例如3DMax、Maya、PhotoShop、FMOD Studio等。这些工具输出的资源格式在大部分情况下没有办法被游戏引擎直接使用,需要游戏引擎对这些资源进行一次转换,转换为游戏引擎方便使用的格式。这个转换过程有资产调节管道来完成。例如每次往unity中拖入fbx模型资源的时候都会出现一个import进度条,正是在进行资源转换。
最后

  这节只是简单带过了各种模块的知识,由于部分内容展开之后量会非常大,所以会在该系列的后续文章中单独讲,也可能会另开一个专栏。希望能帮助到想要从事游戏研发的人。
<hr/>有不少同学问我怎么从零开始学习游戏开发,难以一一回复。这里整理了一份收集多年的优质学习资料,涵盖游戏开发的方方面面


链接:https://pan.baidu.com/s/1C-9TE9ES9xrySqW7PfpjyQ  提取码:cqmd

若本篇文章有任何错误,欢迎大家留言指正
感谢大家点赞收藏关注,追更可以关注专栏「游戏引擎从入门到入土
微信搜「三年游戏人」收获一枚有情怀的游戏人,第一时间阅读最新内容,获取优质工作内推

本帖子中包含更多资源

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

×
发表于 2022-12-19 21:41 | 显示全部楼层
首先 这个问题问得不严谨
难 这个字是相对的 看你和什么比 你和玩游戏比 那肯定难
问题没有主语 你一个社交型性格的24小时和机器沟通当然难
问题宾语不全 你要学到什么程度 学到游戏的每一个细方向都顶尖 还是入门能跑个游戏逻辑

我假设你和开发app比,因为看你名字叫全栈工程师
我再假设你是技术宅

游戏开发主要包括设计,美术,程序
以程序为例,程序又分为2d,3d,后台
以2d为例,2d又分为web、移动端、电脑端
以移动端android为例,又分为休闲、棋牌、策略、动作
以休闲为例,又包含内存、物理、时间系统、输入处理、显示控制

其中每一个部分,都需要针对项目来思考创造,也许你要做的逻辑世界上从未有过,而不像web开发前端后端都有架构可以学别人的,开发的每一个项目也都大同小异,web开发有过度的重复劳动而不需要思考。也可以这样说,游戏开发其实没有什么要学的,只是你开发的时候发现自己什么都不会。游戏开发需要的是一种随时创造万物的抽象四维能力,而不像web开发的偏记忆性。
发表于 2022-12-19 21:48 | 显示全部楼层
因为游戏开发包括了一整个行业。
比如美工有3D和2D之分。3D美工又有建模,材质,贴图,粒子效果,着色器,渲染器等分支。同时3D美工中的贴图涉及2D美工,着色器,渲染器涉及程序。这些分支里面深挖一个就能当一种职业。再加上除了美工之外,程序,策划,声效,文案,销售等几大游戏开发的基础职业也包括大量的细分知识。
所以游戏开发作为一个整体是很难学的。
发表于 2022-12-19 21:55 | 显示全部楼层
门槛不高,有基础业余时间几个月就能入手一个引擎比如unity,但是遇到很多同学干不到一年没兴趣就转行,或者不想加班放弃的。
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-24 15:24 , Processed in 0.069075 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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