本周二十五年前,地震在游戏引擎现实主义中打破了新的地面。它是第一个在实时纹理映射的3D场景的首批商业游戏之一,具有预先计算的灯光,增加了额外的oftoStophers。
尽管如此,游戏在微薄的1996硬件实时运行的要求,对图形现实主义的大规模约束。在这篇文章中,我想解释游戏可以做出更好,具有现代硬件和脱机。
我将讨论如何为转换Quake演示FileSInto Blender展会的脚本写入脚本。 Blender是一个免费的和OpenSource 3D建模和渲染应用程序。其渲染器,循环是Apath示踪剂,能够生产光电型图像,支持特色作为运动模糊,景深,综合着色系统和更多的景深。通过导出搅拌机,我们可以免费使用所有这些功能,而无需编写新渲染器。我的目标是尽可能使用原始的资产,同时依靠搅拌机的准确照明来改善现实主义。
在此帖子中,我将链接到源代码,这是我的pyquake存储库的一部分。如果您想在将自己的演示导入搅拌机时,我会汇总一些指示,但我可能不会回答任何问题或PRS.I如果您有兴趣维护这个项目,我会鼓励您制作叉子。
一个演示文件是一个紧凑的Quake游戏录制,以便为其他玩家分享或个人评论。作为一个多人游戏,游戏拆分为客户端和服务器组件。演示基本上是在游戏期间从服务器到客户端的流量的记录。鉴于演示,以及Quake的安装,那么可以在录制时准确地再现Player在播放时间内看到的东西:
请注意,即使在单个播放器模式下,代码中仍有客户端和ServerComponents,网络层由简单的存储器转移替换,这意味着可以在此设置中记录演示。
由于演示文件格式与Quake协议密切相关,因此它可以通过读取适当的Quake的联网代码层进行。它是相对简单的,如果有点费力,在Python中编写一个解析器。
Warning: Can only detect less than 5000 characters
级别本身在.bsp文件中定义。这为级别提供了几何和纹理信息,以及我们在以后播射的其他一些数据结构。文件格式是良好的记录状态,具有一点努力,可以解析为Python类。类似地,代表怪物,武器模型等的事物的主题,在.mdl文件中被录制,这也被记录得很好。这个项目没有处理声音(对于顶部的视频,我只需从游戏中传达的顶级视频),所以没有必要解析声音资产。
Blender有一个丰富的Python脚本界面。事实上,Blender的GUI与Python API相互作用,因此通过UICAN可以完成的任何东西也都是脚本的。使用此Python界面,我致致使一个脚本导入上面解析的.bsp文件和模型进入搅拌机。对于大多数概念,Inthe Quake资产有搅拌机中的直接类似物:
我的代码将解析的.mdl和.bsp文件导入Blender,在这里(.mdl)和这里(.bsp)。
导入解析的演示包括读取介绍部分,以告诉我们哪些资产(模型和映射)转换为搅拌机资产,然后根据基准/更新部分进行动画。我利用搅拌机的念客支持来做这件事。更具体地说,i插入每个ServerMessageUpdate命令的位置,方向和形状密钥框架,解析演示。我也是Keyframe动画着色器,如翘曲水,所以根据当前的游戏时间移动。下面是一个录音,显示从游戏中的第一级导入演示。我的代码可以在此处寻找到搅拌机中的demos文件。
此时,我们的几何图形加载和动画,有一些纹理应用。尽管如此,我们缺少光源。当Quake水平遍布时,灯被定义为点光源,散落在整个Thelevel。然后编译过程将这些点光源转换为闪光板。该过程通过将低分辨率纹理分配给每个SifeItein的水平,并计算每个点光源直接解释多少。自此过程以来
......