2023-11-13
在我看来,游戏开发编程就是围绕游戏开发的一切敲代码行为。有人回答说现在很简单,有模块,写逻辑也不难。这些都是无用的答案。那个模块算不算游戏开发?如果没有,我能认为开发车辆非常简单吗?我只需要买回汽车生产线,然后自己购买材料安装,即使是开发车辆?荒诞!没有模块,算J[哔]。没有模块研发,你好意思说你在玩游戏吗?那是策划和艺术的事,没有技术人员的J[哔]事。
游戏研发的技术含量大多在于模块研发,没有模块研发,相当于技术人员没有鸟。因此,我认为游戏研发编程通常是用模块开发来定义的,而不是简单地用游戏逻辑敷衍过去。自然,开发好游戏逻辑绝对不是一件简单的事情。之前有人讨论过如何构建任务系统,非常讲究。先不在这里进行。

绝大多数人,尤其是小白,只是觉得游戏引擎只画了一块游戏界面,只是一个实现游戏逻辑脚本的程序。嗯,这些都是业余观点。
虽然游戏引擎是一个模块,但它实际上是一套生产设备,代表了游戏开发商的生产力。要开发游戏,我们需要通过这个工具来建立游戏的内容(Content Creation),此外,游戏的维护、迭代和重新开发(DLC、资料篇)。此外,游戏引擎还包括自己开发的工具,如专业debug引擎工具、专业profile工具等。此外,对于网络游戏,服务端有专业的部署工具、管理工具、检测工具、维护工具、GM工具等。所有这些东西,加起来,一整套工作流水线的总数,都是游戏引擎。Runtime部分,只是一小块物品。
游戏引擎Runtime部分的东西都是即时或实时操作的,也有即时重复的。这部分对技术的要求是高效的。图形、物理和人工智能都必须在ms级别进行复杂的计算,并与游戏本身的性能合作。
游戏引擎编辑器的部分是专门和精细的。一般来说,稍微完整的编辑器几乎需要复制大多数Autodesk 3DS Max的主要功能是定制模块本身,并根据不同的游戏分类和材料供应建立的pipeline进行调整。这种调整,这种pipeline本身的合理性和流畅性,直接关系到艺术资源的制作和游戏类型的迭代。许多游戏死于胎儿,死于此。游戏开发预算的大部分是什么?你们猜?
游戏公司的生产效率直接体现在编辑器制作效率和内容制作人对pipeline的磨合程度上。磨合好,效率高,产出率高,来回扯皮少,预算低,项目可控,产出可控。如果磨合不好,跳票、跳票、跳票、挂票。
服务端部分特别敏感,不多说,一笔,集群,也许你的国家服务挂不知道哪个节点有问题怎么死;逻辑不仔细,买卖钱一周没有标志没有警告没有观点监督发现,游戏立即货币通货膨胀GG。
没做过引擎的人,做过引擎的人,和设计过引擎的人,想法完全不同,不能同日而语。确定你的脑壳,如果你不在那个位置,不要深入思考问题。很少有人能不断发展和构建一个完整的模块,让它成为一个游戏来赚钱,所以很少有人能理解为什么很多事情会这样做。
有些人列出了一堆关于问题和选择的算法,强调他们多年前已经进入了短板。真的吗?那么为什么这些年模块还在发展呢?提升游戏界面?游戏感觉在提升?更新游戏引擎算法?举例说明,LPV/SVO是否计算图形算法的改进?二十年前卡马克时期有LPV吗?有全局光吗?他不敢用两个动态光,更别说现在用的brickmap了。 stylelight point cloud模拟无限多光源。这样的例子太多了,其实真的不难,有算法出来,大家集成就行了。
但游戏引擎真正困难的部分是架构。
重要的事情要说三遍:架构、架构、架构。
许多算法看起来很漂亮,独立完成很简单,但使用起来并不容易。因为你的模块不一定能容纳它。架构不是很神秘的东西,他实际上看起来像架子,用来放一些商业算法。牛逼的结构是可以放很多物品,可以适应不同类型的业务算法,各自安全。挫折结构是为了满足业务变化和新算法的要求,需要不断的整体更换。
简单地说,架构来自于对重复业务的抽象和对未来业务扩张的前瞻性。也就是说,你的经验和期望。例如,如果您的Entity底层结构是否带有树升级结构,请记住,当大量使用嵌入式连接结构时,树升级结构会造成问题,即如果您正在制作MMO,您应该小心。规划可能会制作一些复杂的圆形套筒环设备、宠物、翅膀、座骑、双坐骑和移动平台,这些都是嵌入式连接结构,当树升级时,您应该遍历树的每个节点,可能有问题(这也可能在移动时代产生耗电问题)。但是如果你在做FPS,那么这不是什么大问题。但是如果你在做FPS,这不是什么大问题。(请参考Unreal2的天堂,比较Unreal3的ActorComponent修改)。
所以,你的架构,决定了你玩什么游戏是有益的,什么手机游戏不一定是有益的。
问题来了。在模块之前,如何构建它?踩雷啊!踩足够多的坑。没有做过实际游戏,一定,肯定,100%不能做模块定制。由于模块架构来自业务,没有业务洗礼,我不知道模块真正需要什么。所以在做模块之前,一定要先了解游戏开发本身。模块架构也必须足够宽容和巨大,以容纳不同领域的算法;同时,架构必须足够高效,复杂的游戏计算必须更轻、更快地进行信息交互。
想象一下,你的逻辑顺序必须从设备爬到玩家键入,监控网络事件,然后转换为逻辑响应,促进游戏逻辑函数,促进人工智能计算,促进物理计算,然后转换为Entity,从Entity发送到渲染层,渲染层翻译成渲染属,组成最佳渲染设备呼叫数据,发送到渲染设备,系统进行最复杂和复杂的渲染计算,此时,模块可能会平行完成一些工作,准备下一帧升级,调度背景文件系统输入所需的材料供应,游戏逻辑可能使用等待渲染进行垃圾回收,或脚本热更新操作。
以上工作,跨越多个大模块:
嗯,大多数计算机行业的算法基本涵盖。(也有反外挂技术,后来基本和杀病毒杀木马一样…)
游戏引擎的结构相当于把这些大模块作为媳妇结婚,然后让他们和睦相处。(也有反外挂技术,后来基本和杀病毒杀木马一样…)

游戏引擎的结构相当于把上述大型模块作为儿媳结婚,然后让他们相处融洽。但他们生来就嫉妒对方!物理数据渲染不能重用!渲染数据无法反馈(反馈成本很高)!逻辑数据要稳定,引擎数据要高效,不同的算法会有不同的对齐/排序,SIMD要快速考虑!尼玛,几乎所有这些东西都需要设计n套互动协议来传输和互动!
所以我们用了一个伟大的发明,那就是OO。因此C 游戏引擎的必要表达是必要的。OO拯救了游戏开发商的世界...
但在你使用OO抽象插座之前,你需要了解这些领域的所有算法来设计一个核心架构。记住这件事,每个模块的实际算法,随便拿出一个,就足以让你做一辈子。
更难的是,上述每帧更新过程都是即时运行的。更难的是,这个东西,可能是在玩家的小霸王学习机上跑的。更难的是,玩家可能会去网吧,而网吧安装了非标准操作系统,使用垃圾cpu和相当好的显卡。
各种各样的问题,作为游戏引擎开发者,尤其是中国开发者,应该考虑,想办法适应,挤压,否则玩家会突然问候你的亲戚一个晚上。
因此,系统架构对游戏引擎尤为重要,其开发极其困难。
(我真的很想做服务端,但是我不太懂,游戏服务端比上面的客户端高很多。牛逼的服务端模块很油腻。想象一下像黑客帝国的桥段。我和你零距离释放法术造成伤害,但是我们在不同的服务器上,但是下一刻,我们在同一个节点上——动态转移)
毫无疑问,在模块runtime(我这里只说runtime,其实tool chain部分比较复杂,但绝大多数人接触不到,不提罢手)部分,最复杂的是图形引擎。
首先,图形引擎是一个高门槛的开发项目。
首先,图形引擎是一个高门槛的开发项目。虽然学习的人很多,但可靠的人很少;只有少数人能够可靠地理解艺术;很少有人能够可靠地理解艺术,玩游戏,设计模块的整体结构。图形引擎需要的不是一个实证算法。它需要更多的提示和提示。为了欺骗玩家的眼睛和经验,它不仅需要一个书呆子研究员,还需要一个对游戏艺术制作有全面了解的算法设计师,对美学和电影有一点了解。每个模块都会根据自己的要求定制一些图形算法,去adapt自己的优势。
其次,图形引擎是弱理论强工程的产物。即使你的理论素养已经达到了甜瓜paper的水平,也不代表你能做出优秀的图形引擎。必须使用图形引擎-接地气。你可能面临着一个非常广泛的GPU type,可能有不同的渲染管道架构,可能有不同的API,甚至可能你的图形引擎需要考虑PC、移动、console平台,你需要对每个平台都有针对性的启用对策,并确保它们看起来相似。
更多的操蛋意味着你可能需要关注许多关键技术,例如,PC机是指dxtc、大多数android设备使用etc1、ios使用pvrtcc、xbox bc6用于one、metal gpu family 使用astc。这种地图压缩格式不同,但各有优缺点,在不同的场合有不同的优缺点。比如pvrtc在低频图像上可能会有一些色斑,etc1没有alpha通道,需要用一些额外的方法模拟。
这个关键技术决定了你画面的成败。也许你读过一篇伟大的甜瓜论文,找到了一个新的碉堡算法,然后你必须在你的模块上展示你的实力,但你发现目标设备的效率非常低。
在最新的军备竞赛中,unity和unreal4都在图形引擎架构上付出了巨大的努力,比如Glslopt、hlslang等中间shader编译器,确保跨平台shader合适,将编译器作为程序猿的三大烂漫之一引入到复杂的游戏引擎开发中,瞬间提高了游戏引擎开发的难度和风格。
目前,最终图形引擎还应对全新一批API、DX12的操作系统,无论GPU如何推动放弃。、Metal、Vulkan都采用了薄推动,即“我不在乎你怎么用gpu,模块本身管”。
这相当于将图形绘制状态转换、资源管理、数据更新和指令调度全部抛给游戏引擎。
这相当于将图形绘制状态转换、资源管理、数据更新和指令调度抛给游戏引擎。这大大提高了具有优秀架构模式的模块效率,但也大大提高了模块效率设计难度。
更多的游戏引擎需要项目的洗礼和验证,更多的项目可以踩到更多的坑,使结构更加成熟和稳定。然而,游戏不能像网站一样持续发布、热更新、选择和升级。因此,游戏公司必须开发一个模块。更可怕的是,你应该使用游戏产品作为引擎的炮灰来磨练优秀的模块架构和tool chain。
所以不要问太多为什么中国游戏大多是假的,也不要问太多为什么中国没有像样的模块。
其实模块、游戏、效果都是花钱堆出来的。前面是炮灰,是实验产品,但是很多企业不懂,很多管理者不懂,自然烧不了钱。有时候一个游戏失败了,一家公司倒闭了,一个有希望的团队散去了,一个有抱负的人被抹去了。
