如何编写3D游戏?

14

我一直很好奇,游戏程序员是如何将在外部 3D 建模软件(如maya或3d max)中完成的游戏角色与实际的游戏逻辑绑定在一起的,比如使用 C 或 C++ 等喜欢的编程语言。

你如何将这两个东西结合在一起,并从建模角色到编程构建游戏的实际过程是什么?

有些让我想知道的事情是,你是从代码还是从3D模型中编程角色的移动及其他动作呢?

示例会非常不错。


1
这就是他们的做法:http://www.unrealengine.com/ 或 http://unity3d.com/。 - Saturnix
我同意Unreal相当不错!https://www.unrealengine.com/what-is-unreal-engine-4 - Aaron Belchamber
13个回答

14
大部分信息,例如角色的动作,实际上是存储在代码之外的。它其实是一个相当简单的过程:
  1. 艺术家在Maya或其他软件中制作3D模型,然后将其保存在文件中。我们假设他们把它命名为“Gollum.3D”。
  2. 现在,“Gollum.3D”包含了许多代表模型点、纹理和其他所有内容的数字。
  3. 程序代码随后读取文件“Gollum.3D”——其中包括所有模型点、纹理和其他内容,并进行大量计算来计算基于代表模型的所有数字的3D场景会看起来像什么。
事实证明,在游戏中,所有东西都最终与代码分离存储,代码只在运行游戏时读取并将其全部组合在一起。当我说所有东西时——我指的是每一件事情!所有文本、命中点数和武器伤害量的统计数据,菜单界面图像,甚至人工智能都被分别存储在脚本中,与程序代码分开。程序代码最终所做的很少。
您可能听说过有人对游戏进行修改。Modder是编辑程序代码之外数据的人,从而按照他们的喜好改变游戏。他们只是利用了游戏中基本上所有内容(除了一些核心内容)都没有写入程序代码的事实。

4
你称游戏引擎"做的很少"?那是严重扭曲现实...... - Wouter Lievens
1
同意,复杂的数学、物理和人工智能并不是我认为需要"非常少"努力的事情。 - Chris Ballance
13
我认为他的意思不是说这需要很少的努力,也许他的意思是相比于存储在脚本文件中的内容,这只是游戏内容的很小一部分。 - Ali

6
与最受欢迎的答案不同,如果您需要一个带有动画效果的角色,这实际上是一项相当大的任务。
最终结果将是通过脚本和配置文件(换句话说 - 数据驱动)实现大多数功能,但构建这样的系统的过程并不简单。
通常,您会从外部建模器开始,执行以下操作: 1. 构建皮肤模型。 2. 构建骨架并根据权重等将其附加到皮肤上。 3. 根据需要应用所有纹理和材料。 4. 导出到您的引擎。
现在,您可以开始为此角色骨架或任何类似的骨架构建动画库,如果将其与多个骨架相关联,则通常是这种情况(如果骨架足够接近或模块化)。 其中一些动画将仅包含部分层次结构(以便能够混合部分动画 - 例如,下半身在奔跑,而上半身可以使用不同的动画或反向运动学 - 在奔跑时向敌人射击是很好的例子)。
现在最后到了代码部分。 您需要构建一个系统,将动画与骨架相关联并正确渲染它。 该系统还需要能够在动画和IK之间混合(例如 - 在站立和奔跑之间转换),并能够组合几个动画和部分动画 - 例如,同时行走(全身动画),看着某人(上半身的IK),挥手(带有部分动画的IK)和呼吸(部分动画)将结合4个不同的部分或完全混合。
我没有提到您需要构建导入程序,还有动作和动画之间的区别。 动作可以组合多个动画或随机选择 - 它们将通过数据映射文件相关联。
我建议您看一下XNA - 它有很多示例,导入程序等,并且包含许多基本库中的基本内容,因此您不必从头开始。 正如其他人提到的那样 - Blender3D是编辑器+的不错选择,Torque也可能是游戏引擎的经验。
最后一句话 - 如果您要尝试它,这不会是一次轻松的散步,但嘿 - 这么有趣,结果会让您为自己感到骄傲。

5

5

3D角色创建和编程您的3D游戏是两个不同的过程。

通常,您使用3D建模软件(Blender、Maya、3D Studio Max等)雕刻3D角色,将此角色导出到文件中(.obj、.md2等),并编写代码以处理引擎中角色的导入。

虽然这听起来相当困难,但3D游戏引擎支持所有这些内容,无需编写数百万行代码和重新发明轮子。

以开源3D游戏引擎Ogre3D为例。您不必成为编程大师才能在几分钟内运行简单示例。我建议您查看他们的wiki教程

例如,这是一个简单的教程,用于从3D Studio Max创建和导出您的简单模型,并将它们导入到Ogre 3D。

3

我自己没有太多的游戏编程经验,但我发现XNA框架和资源非常启迪人心。你可以在这里找到大量的例子和如何操作,并且还有一个非常有用的论坛 http://creators.xna.com/en-US/


1
访问Unity3d.com,您将很快制作自己的游戏。动画是在建模软件Maya等中完成的,但有些是在引擎中完成的。Unity使物理学变得简单,您基本上正在创建自己的世界并链接对象如何交互。
例如-您有一个相机->您可以从UI设置相机跟随主角和相机放置位置的XYZ转换。它也可以通过可视化方式完成。
看看它,这非常有趣,编写的代码比您想象的要少。从那里,您当然可以编写自己的代码来实现自己独特的游戏玩法。它很容易解释为编写脚本并将其拖到要运行脚本的对象上。
这就是我尽可能通俗易懂的介绍。干杯。

1
自从这个话题开始受到新的关注,我想做出一些贡献。我使用 Autodesk 3Ds Max 已经有十二年了,生产 3D 产品,主要侧重于动画方面,但是我知道 Autodesk 提供了一个广泛的类库,具有高级脚本模块和内置功能,拥有编写 3D 游戏所需工具。当然,你需要学习“Max Script”,以及如何与名为“Biped”、“Particle Flow”、“Havoc”现实模拟引擎等内置包进行接口操作,还需要注意渲染引擎(通常是默认的扫描线、Mental Ray、VRay),这将需要很多参数。 如果您没有预算或者喜欢开源软件,请查看 Blender! 这个开源的 3D 软件和社区提供的资源非常棒。他们甚至还有一个“游戏引擎”,可以连接到其中:http://www.blender.org/features/他们有资源帮助您入门。
我希望补充一下,虚幻引擎看起来非常有前途,因为他们提供了“免费”版本,但需要注意细则,如果你的游戏真正成功了,需要支付5%的版权!https://www.unrealengine.com/what-is-unreal-engine-4

1
我觉得很奇怪,有这么多学习特定工具的链接。如果我要学习游戏开发,我希望有一个通用的论坛/网站来达到这个目的。例如GameDev.net
PS:这是作为补充答案,而不是完整答案。

1

动画可以在3D建模软件内完成,然后根据游戏逻辑,代码会“运行”不同的动画。通过常见格式,模型从建模软件进入游戏。例如,XNA框架可以原生地读取一些最常见的模型格式。


1

你应该使用一个3D渲染引擎。很多引擎都是免费的(Ogre3D 是一个好的选择),并且通常它们具有从常见建模软件导入几乎任何类型的网格的功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接