把 Minecraft 塞进另一款游戏:Passthrough Mod 的原理
当 Minecraft 的红石、背包与生物走进 Skyrim 和 GTA V,究竟是重新制作了一套游戏,还是让两个真实游戏同时运行?从跨进程通信、世界与碰撞映射,到原版 UI、渲染合成和玩法事件桥接,拆解 Passthrough Mod 的实现思路。
第一次看到 Minecraft 出现在《GTA V》或《上古卷轴 V:天际》(Skyrim)的视频,可能会觉得:不就是把 Steve 和一些方块放进了另一款游戏吗?
但接下来的画面就不太对劲了。你可以在天际的雪地上铺红石线路,接上拉杆和活塞,让机关按照 Minecraft 的规则运转;来到洛圣都,又能从熟悉的物品栏里拿出 TNT,在街头引发一场带着 GTA 物理反馈的爆炸。更奇妙的是,背包、合成、方块更新乃至生物行为,都不只是“看着像” Minecraft。
方块模型容易移植,红石系统却不是几个模型和脚本能轻松复刻的。 它需要信号传播、邻居更新、定时调度、活塞运动,还要与物品和实体系统持续交互。如果这些细节都像原版一样工作,难道开发者真的在 Skyrim 和 GTA 里分别重做了一遍 Minecraft?
答案恰恰相反:他们没有重写 Minecraft,而是让真正的 Minecraft 在后台继续运行。 一款游戏提供完整的方块与玩法模拟,另一款游戏提供场景、NPC、车辆和物理反馈;中间再用桥接层把状态、画面与事件连接起来。这就是 Passthrough Mod 背后的思路:让两个独立游戏协作,呈现出一个看似统一的世界。
本文以两个有公开源码的项目为主线:
| 项目 | 源码 | 演示 | 主要特点 |
|---|---|---|---|
| SkyCraft × Skyrim | SkyCraft | Skyrim 实际演示 | SKSE + Fabric;共享内存、碰撞映射、实体代理,以及把 Minecraft 的内容接入 Skyrim 渲染 |
| Minecraft × GTA V | minecraft-gta5-passthrough | B 站演示 | ScriptHookV + Fabric;WebSocket 同步事件、共享内存传输画面、ReShade 深度合成 |
二者有共同的设计思想,却不是同一套代码换了宿主。尤其是玩家控制权和渲染接入方式不同,这恰好提供了观察这一技术的两个角度。12
本文讨论的是上述仓库公开的实现与架构,整理时间为 2026 年 10 月。SkyCraft 的早期 DESIGN.md 包含尚在规划阶段的方案;涉及当前行为时,以项目 README、协议及实现说明为依据,不把设计草案里的每个细节都当成已完成的功能。
1核心思想:不是重写,而是连接
1.1为什么传统 Mod 很难做到这样的融合?
普通 Mod 可以在宿主游戏里增加模型、物品、脚本和交互。做出一个 Minecraft 方块,可能只需要网格、纹理和碰撞体;做出可堆叠的方块系统,则需要世界坐标、存储和渲染管理。然而 Minecraft 的魅力远不止“方块”。
以一块红石为例,它背后连接着方块状态、相邻方块更新、信号传播、定时调度、活塞、容器、实体,以及大量相互作用的规则。背包也不只是几个 UI 格子,而是 ItemStack、配方、容器同步、使用行为和存档的一部分。想要让这些行为都“像原版”,实际上是在重建一套庞大的模拟系统。
Passthrough 反过来思考:既然 Minecraft 已经实现了这些规则,为什么不直接运行它?
两个游戏并行运行,各自继续承担擅长的职责。Minecraft 管理它自己的方块、物品、实体与 Tick;宿主游戏保留原本的场景、角色、车辆、NPC、任务或物理反馈。连接它们的 Mod 不必理解每条红石规则,只需要知道“哪里有方块”“谁受到了伤害”“画面应该如何呈现”。
这里的关键不是通信协议本身,而是划分所有权(authority):同一个行为不能毫无约束地由两个游戏同时决定。例如玩家最终站在哪里、一次伤害应该结算几次、方块归谁存档,都必须有明确答案。
1.2Bridge 需要交换什么?
跨进程通信(Inter-Process Communication,IPC)负责把两边的数据接起来。逻辑数据通常很小,例如输入、位置、相机状态、实体属性和事件;画面则可能每帧包含数百万像素,传输要求完全不同。
因此,成熟方案往往区分两条通道:控制/事件通道处理高频状态与可靠事件,渲染通道处理纹理、深度或网格数据。SkyCraft 使用双方约定的共享内存协议;GTA V 项目通过本地 WebSocket 传输控制和事件,再使用 Windows 命名共享内存传输 Minecraft 导出的帧。32
这不是云游戏,也不必经过互联网。两个游戏可以运行在同一台电脑上,由本地 Bridge 实时交换消息。
2世界如何融合:坐标、碰撞与实体
两个游戏即使运行在同一台机器上,也不会自动共享一个世界。Minecraft 不知道 Skyrim 的山坡在哪里,更不知道 GTA 的道路能不能站人;GTA 也不会自然理解 Minecraft 中新放下的石墙。
要让跨游戏交互成立,首先必须让两边对于空间与物体的理解足够一致。
2.1坐标系与玩家控制权
最基础的是坐标转换:不同游戏使用不同的世界单位、轴方向、旋转定义和相机投影。SkyCraft 设计文档描述了 Skyrim 的 Z-up 到 Minecraft 的 Y-up 的转换;GTA V 项目则在 README 中明确给出了从 GTA 坐标到 Minecraft 坐标的映射,以及对朝向和高度偏移的处理。42
但更重要的问题是:到底谁说了算?
SkyCraft 选择让 Minecraft 掌管玩家的主要移动物理。玩家在 Minecraft 中按照熟悉的加速度、跳跃、冲刺和碰撞规则移动,再把位置同步给 Skyrim。Skyrim 中依然保留一个玩家角色实例,以维持 NPC 侦测、任务触发、对话和场景交互。它更像是由 Minecraft 驱动的代理身体。
GTA V 的公开版本则采用不同取舍:GTA 的相机和主要移动控制驱动 Minecraft 的对应视角与位置;某些功能(例如鞘翅飞行)又会使用 Minecraft 的飞行物理,再让 GTA 跟随。由此可见,“Passthrough”并不规定控制权必须永远属于某一个游戏。12
2.2镜像世界:让 Steve 踩在另一款游戏的地面上
Minecraft 依然需要自己的世界来执行碰撞、实体与方块逻辑。项目通常在后台准备一个空白或近乎空白的镜像世界(mirror world),其中没有必要重复生成宿主游戏的所有地形,但需要提供足够的碰撞信息。
GTA V 项目采用相对直接的办法:在玩家周围对 GTA 地面做探测,把结果传给 Minecraft,并填入不可见的 Barrier 方块。这样,Minecraft 的角色、掉落物或生物就能“踩在”由 GTA 地形转换而来的碰撞上。相反,Minecraft 放下的方块也会被同步成 GTA 里的不可见碰撞物体,避免 GTA 的行人和汽车直接穿墙。2
SkyCraft 的方案更强调复杂地形:从 Skyrim 的 Havok 物理世界提取形状,并将它们转换为 Minecraft 碰撞查询可使用的数据。它的实现还会传输三角形与分区占用信息,使 Minecraft 原有的移动与碰撞处理能够感知 Skyrim 的建筑、地面及复杂几何,而不必真的把每一块 Skyrim 石头变成可见 Minecraft 方块。5
这也解释了一个容易忽略的现象:画面里的山还是 Skyrim 的山,但 Steve 可以用 Minecraft 的运动方式走在上面。 看见的世界与参与碰撞的世界不一定来自同一套游戏对象。
2.3实体代理:两个世界怎样互相攻击?
假设 Minecraft 玩家用钻石剑击中 Skyrim 的强盗。对于 Skyrim,这是一名 NPC;对于 Minecraft,这个对象一开始根本不存在。为了让原版 Minecraft 战斗系统参与结算,可以在 Minecraft 中创建一个不可见的实体代理(Actor Proxy),同步它的位置、碰撞盒、身份与部分生命状态。
当剑或箭矢命中代理时,Minecraft 仍可使用自己的攻击冷却、附魔与伤害规则计算效果;Bridge 再把伤害、击退或燃烧等结果转换为 Skyrim 能理解的事件。反过来,Skyrim NPC 的攻击也要转译为 Minecraft 玩家能够接收的伤害。SkyCraft 的设计与源码都体现了这种代理实体思路。45
代理不等于复制完整 AI。NPC 的思考与行动依然可以由 Skyrim 负责,而 Minecraft 只保留让它能够被命中和交互的那部分表示。 这是跨游戏融合避免重复计算的一个重要技巧。
3画面如何融合:渲染、深度与原版 UI
世界逻辑能够互通,只解决了“物体应该在哪里”。要让它们真的像处于同一个场景,还必须解决遮挡、相机、色调以及前景 UI。
3.1两条渲染路线:传递几何,还是传递画面?
可以从两种基本思路理解:
| 路线 | 传输内容 | 优点 | 主要代价 |
|---|---|---|---|
| 几何/材质桥接 | Minecraft 生成的顶点、网格、纹理与灯光等 | 宿主可以在自己的渲染流程里直接绘制,较容易结合原生深度和场景光照 | 需要处理资源格式、材质、动画和渲染器适配 |
| 画面/深度合成 | Minecraft 渲染后的 Color、Depth、前景 UI | 可保留 Minecraft 自己的渲染结果,宿主不用重新绘制所有方块 | 需要相机对齐、深度转换、图像传输和延迟处理 |
SkyCraft 的早期设计文档曾规划过 Minecraft 离屏渲染与深度合成。但其公开协议当前已经定义了 RenAtlas、RenSection、RenAvatar、RenScene 等数据:传输 Minecraft 产生的区块网格、纹理图集、角色和实体顶点,由 Skyrim 一侧接入场景渲染。它同时保留从 Minecraft 获取手部与 GUI 像素的叠加路径。不能只看初版设计文档,就断言 SkyCraft 所有内容都通过整帧截图合成。35
GTA V 项目则更直接地体现第二条路线:Minecraft 导出世界颜色、深度和手部/HUD 图层,GTA 一侧通过 ReShade 合成。2
3.2ReShade 不只是游戏滤镜
ReShade 是一款可接入 Direct3D、OpenGL、Vulkan 等图形 API 的通用后处理框架。它常用于调整色彩、锐化、环境光遮蔽和景深,因此容易被理解为“画质滤镜工具”。但它还提供 ReShade FX 着色器语言和 Add-on API,使开发者能够编写扩展,读取或上传图形资源,参与游戏最终画面的处理。6
在 GTA V × Minecraft 中,各组件职责分明:
- ScriptHookV / ASI 插件:接入 GTA 游戏逻辑,获取相机、探测地面、控制或响应 GTA 实体。
- Fabric Mod:在 Minecraft 中接收状态、运行游戏逻辑、导出颜色/深度与 HUD。
- WebSocket 和 Shared Memory:传递事件、状态与图像数据。
- ReShade Add-on 与 FX Shader:将 Minecraft 的画面上传为 GPU 纹理,并根据深度、相机与色调信息进行合成。
因此,ReShade 不是在 GTA 中模拟 Minecraft,而是在 GTA 的渲染流程里展示真正的 Minecraft 输出。 它也不是 Passthrough 的唯一选择,SkyCraft 就说明还可以通过更深层的渲染器集成完成融合。
3.3Depth Compositing:为什么方块会被建筑挡住?
只把 Minecraft 画面用透明度叠在 GTA 画面上,会得到一种“贴在屏幕前面”的效果:远处 Minecraft 方块可能错误地盖住近处汽车,GTA 大楼也挡不住身后的 Minecraft 物体。
深度缓冲(Depth Buffer)解决了遮挡判断。渲染器会为像素保存相应的深度信息。把两款游戏的深度转换到同一个相机空间、同一种深度定义后,便可以判断谁离相机更近:
这里的 指已经统一定义后的距离,而不是直接拿两款游戏原始的 Depth Buffer 数值相比较。实际项目必须考虑透视投影的非线性、不同的近平面与远平面、reversed-Z,以及相机的位置、朝向和 FOV。对于跨帧数据,还需要进行重投影(reprojection),修正两边画面产生时间不同导致的偏移。
GTA V 项目明确使用 ReShade FX 对 Minecraft 画面重投影,按 GTA 深度测试遮挡,并进一步进行颜色匹配、雾化和边缘处理。这些工作加在一起,才让 Minecraft 的方块显得真正存在于洛圣都。2
3.4为什么背包和 HUD 几乎与原版一模一样?
因为它们并不一定是被“模仿”出来的。Minecraft 本身仍在运行,所以它可以继续绘制原版的快捷栏、生命值、背包、合成界面以及手持物品。桥接层只需捕获相应图层,再在宿主画面之上显示。
GTA V 项目把世界 Color/Depth 与手部、HUD、菜单作为不同图层导出,避免让不应被建筑遮挡的 UI 参与场景深度测试。SkyCraft 也采用了真正的 Minecraft GUI 像素导出,而不是在 Skyrim 中重新制作一套物品栏。25
但有了画面还不够。宿主窗口持有鼠标和键盘焦点,Bridge 必须决定按键送往哪里:鼠标左键是 Minecraft 的挖掘还是 GTA 的射击?打开物品栏时,滚轮是移动快捷栏还是滚动菜单?与 Skyrim NPC 对话时,控制权又该切回哪一边?UI 的真实性来自原版渲染,交互的完整性则来自输入路由与控制权切换。
4玩法如何融合:保留模拟,再翻译结果
4.1为什么红石与 TNT 不需要重写?
这套架构最有价值的部分,并不是让方块出现在另一款游戏中,而是Minecraft 的运行时依然在执行 Minecraft 的规则。
Minecraft 的集成服务端可以继续推进世界 Tick、方块更新、实体行为和物品交互。玩家在镜像世界中放置一组红石电路,其信号传递、活塞行为和方块状态仍由 Minecraft 自己处理;Bridge 只需要把最终变化同步到宿主的视觉或碰撞表现。
这不意味着“任何 Minecraft Mod 都必然兼容”。涉及自定义渲染器、世界生成、碰撞、网络或其他底层 Hook 的 Mod 仍可能与 Bridge 发生冲突。可复用的是原有系统,不是自动获得无限兼容性。
4.2从 Minecraft 的爆炸到 GTA 的爆炸
考虑一个更直观的例子:在 GTA 街道上放置 TNT,然后引爆。
- 玩家输入被传给 Minecraft,在镜像世界里放下并点燃 TNT。
- Minecraft 按自己的 Tick 和实体逻辑处理引信与爆炸。
- Bridge 获得爆炸事件及其位置、强度等上下文,把坐标转为 GTA 世界坐标。
- GTA 插件调用对应的原生游戏能力,触发 GTA 侧的爆炸与车辆、行人反应。
- 最终画面合成后,玩家看到的是一次跨越两个游戏规则系统的爆炸。
这幅图刻意展示的是事件翻译的逻辑流程,不是某个项目逐函数调用的时序。GTA V 公开版实际包含爆炸、弹射物、剑击、末影珍珠以及部分生物行为到 GTA 的映射;例如 Minecraft 的箭命中 GTA 对象后,可以进一步表现为 GTA 的枪弹伤害。2
其本质不是两个引擎共享同一个爆炸求解器,而是让一个游戏产生的语义事件,驱动另一个游戏已有的能力。类似思路也适用于采矿掉落、对话、物品使用或任务触发,但每一种都要单独设计映射关系。
4.3双向交互还需要解决一致性
“Minecraft 炸掉 GTA 汽车”是单向映射;一旦要求 GTA 的子弹反过来伤害 Minecraft 生物,系统就必须建立双向的实体身份、生命值同步与事件去重规则。
更麻烦的是持久化:Minecraft 中的建筑可以存于自己的世界数据,Skyrim 则有独立的存档。加载旧存档时,两边是否都回滚?在 GTA 中删除一个物体,Minecraft 中与之对应的实体是否要消失?这已经超出了画面拼接的范围,进入了分布式状态一致性的问题——即使两个进程就在同一台电脑上。
5SkyCraft 与 GTA V:相同思想,不同实现
把两套方案放在一起比较,比把它们统称为“Minecraft 被移植进其他游戏”更有价值。
| 维度 | SkyCraft × Skyrim | Minecraft × GTA V |
|---|---|---|
| 宿主接入 | SKSE 插件、CommonLibSSE-NG(C++) | ScriptHookV、ASI 插件(C++) |
| Minecraft 接入 | Fabric Mod(Java) | Fabric Mod(Java) |
| 通信 | 共享内存协议与消息/渲染数据通道 | 本地 WebSocket + Windows 共享内存 |
| 玩家控制 | 主要由 Minecraft 运动物理驱动 Skyrim 玩家代理 | GTA 的相机与常规移动为主,部分玩法由 Minecraft 物理驱动 |
| 宿主碰撞进入 MC | Skyrim Havok 几何提取、碰撞映射 | GTA 地面探测、Invisible Barrier |
| MC 方块进入宿主 | 可传输 Minecraft 生成的区块网格与材质数据 | Minecraft 画面/深度合成;另同步不可见 GTA 碰撞物 |
| GUI 与手部 | Minecraft 原始像素捕获、Skyrim 叠加 | Minecraft 单独导出 Overlay、ReShade 合成 |
| 玩法交互 | NPC 代理、战斗及世界交互 | 爆炸、投射物、载具/行人反应等 |
比较依据来自 SkyCraft 的 README、共享协议与源码审计,以及 GTA V 项目的实现说明。二者都在持续演进,表格描述的是整理时可核对的方案,而非所有版本永远不变的特性。1352
5.1真正困难的地方在哪里?
这类项目的惊喜在于复用现有逻辑,但跨游戏边界仍然非常昂贵,尤其是以下问题:
时序与延迟。 Minecraft 的逻辑 Tick、客户端渲染帧和宿主游戏帧并不天然同步。位置可以插值,画面可以重投影;但一次命中、一次爆炸不能随意重复消费。GTA V 项目通过异步图像读取、三槽共享缓冲和重投影降低延迟影响;SkyCraft 则需要处理共享数据的时序与进程恢复。25
两套物理世界的差异。 坡面、楼梯、门、水、载具与刚体都具有特殊规则。稀疏地面采样足以实现行走,却未必能完美描述悬挑结构;更精确的 Havok 形状提取又会提高实现成本。如何选择碰撞精度,是工程取舍而非单纯的“技术够不够先进”。
渲染兼容性。 光照、透明材质、粒子、后处理和其他渲染 Mod 会改变最终效果。无论是传网格还是传画面,都可能遇到资源格式、深度不匹配和版本 Hook 变化的问题。
稳定性与游戏更新。 两个进程、两个 Mod、两种更新周期,任意一侧崩溃或升级都有可能破坏 Bridge。尤其是需要脚本注入与图形 Hook 的实现,会依赖宿主游戏的特定构建版本。
GTA V 项目公开测试的是 Legacy 故事模式,不是 GTA Online。研究或复现实验应遵守对应项目的版本要求与游戏规则,不应把需要 Hook 的单机方案直接套用到受反作弊保护的联网环境。
6重新思考游戏之间的边界
过去谈到“把 Minecraft 放进另一款游戏”,我们通常会想到资产移植:把史蒂夫模型、像素纹理和几个方块复制过去。Passthrough 提出了一种完全不同的可能:被复用的不只是资产,还可以是一个正在运行的完整游戏系统。
在这种架构里,Minecraft 不再只是一个需要被模仿的目标,而成为提供背包、红石、物品、方块与实体模拟的 Gameplay Runtime;Skyrim 和 GTA V 则分别提供自己的世界、角色、任务、车辆、物理反应与图形表现。两个原本独立的程序,通过数据映射和事件翻译,呈现出一个统一的交互空间。
当然,它还远远不是可以任意拼接两个游戏的通用引擎。每接入一个新宿主,都必须重新面对坐标、控制权、碰撞、渲染、输入、实体和存档等具体问题。那些令人惊叹的演示背后,真正艰难的工作恰恰在这些不显眼的边界上。
但它揭示了一个值得游戏开发者记住的设计思想:复杂系统的复用,不一定意味着把代码移植到同一个工程里;也可以保留它的运行环境,通过清晰的接口让多个系统协作。
这才是把 Minecraft “塞进”另一款游戏,最有意思的地方。
7相关项目与演示
SkyCraft 和 GTA V 并不是孤例。Minecraft 与其他游戏的桥接实验已涉及开放世界、太空探索和动作游戏等多个类型。下面保留一些可以追踪的公开仓库;有源码不等于功能完善或稳定可用,项目各自的实现方式也未必完全相同。演示仅在有明确对应链接时列出。
| 项目 | 宿主游戏 | 仓库 | 演示 |
|---|---|---|---|
| SkyCraft | Skyrim | GitHub | Nexus Mods |
| Minecraft × GTA V | GTA V | GitHub | Bilibili |
| OWCraft | Outer Wilds | GitHub | — |
| FalloutCraft | Fallout 4 | GitHub | — |
| ValCraft | Valheim | GitHub | — |
| Killcraft | ULTRAKILL | GitHub | — |
| LibertyCraft | GTA IV | GitHub | YouTube |
| Minecraft Ring | Elden Ring | GitHub | — |
| Minecraft × Half-Life | Half-Life | GitHub | — |
| WowCraft | World of Warcraft | GitHub | YouTube |
其中“—”表示本文未找到能够明确对应仓库的演示视频,而不是断言项目没有演示。还可以查看持续更新的社区索引 Awesome Game Mashups,但目录中的项目成熟度、源码开放程度和技术路线并不一致。7
注释
-
chasmlol,SkyCraft — GitHub README。项目对 Minecraft 与 Skyrim 的职责、支持功能、安装环境和实验状态的官方说明。 ↩ ↩2 ↩3
-
rehan-remade,Minecraft × GTA V Passthrough — README,2026。项目一手说明,记录 GTA V Legacy、Fabric、ScriptHookV、WebSocket、共享内存、ReShade、深度合成与跨游戏事件映射。 ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10 ↩11
-
chasmlol,SkyCraft — skycraft_protocol.h。公开共享内存协议定义了区块网格、图集、实体及光照等渲染消息的数据结构。 ↩ ↩2 ↩3
-
chasmlol,SkyCraft — DESIGN.md,2026-09-29 草案。解释坐标映射、玩家权威、镜像碰撞、代理实体与早期渲染方案;设计目标不能直接等同于最终代码状态。 ↩ ↩2
-
sogutemir/HalfCraft,SkyCraft Source Audit。基于特定 SkyCraft 源码提交的第三方技术审计,记录了当前碰撞、网格传输、HUD 捕获和控制权实现;仅作为源码阅读辅助。 ↩ ↩2 ↩3 ↩4 ↩5 ↩6
-
crosire,ReShade 官方网站。介绍后处理注入、所支持的图形 API、ReShade FX 与 Add-on API。 ↩
-
bailo167,Awesome Game Mashups,GitHub 社区项目索引。用于发现跨游戏实验与演示,不能代替对各项目实现和可用性的独立验证。 ↩
CONTINUE EXPLORING