ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

VMware+Godot:从零搭建后室风格虚拟机实验环境

VMware+Godot:从零搭建后室风格虚拟机实验环境 1. 这篇文章真正要解决的问题看到“卡进后室了”这个标题老二次元心里可能已经浮现出黄色壁纸、潮湿地毯、嗡嗡作响的荧光灯管而技术同学脑海里第一个蹦出来的多半是“VM”和“VMware”。把这两个词放在一起其实就是一次很有意思的交叉后室Backrooms那种“空间错位、孤立无援、一张图无限重复”的诡异体验能不能用虚拟机技术来模拟甚至搭建出来先说结论可以。VMware 这类虚拟化工具天然适合做“沙漠化”的实验环境它能把一个系统、一个场景、一组网络关系封装成独立沙盒。你可以在里面反复折腾、随时快照回滚、断开网络模拟“与世隔绝”这些操作用在后室风格的小型实验项目里几乎就是量身定做。这篇文章不打算写那种“VMware 从入门到精通”的百科全书而是用一个真实可落地的场景把 VM 虚拟机技术串起来先讲清楚后室风格实验环境需要什么再带你从零创建一个带后室氛围的虚拟机配置共享文件夹在内部跑一个简单的三维场景最后覆盖常见报错和工程建议。如果你还没接触过 VMware读完后你会知道虚拟机到底解决什么问题如果你已经会创建虚拟机这篇文章能让你把虚拟化和创意场景结合起来做出一个能展示、能继续扩展的实验项目。2. 后室到底是什么和虚拟机有什么关系2.1 一个源自网络的都市怪谈“后室”最初是 4chan 上一张图片引发的集体创作。那张图里是一个颜色单调、无限重复的办公室空间墙纸发黄地毯铺满但没有任何窗户。创作者把它设定为“不小心从现实脱落之后会到达的地方”没有出口没有 NPC只有一层一层让人逐渐起鸡皮疙瘩的诡异安静。从技术视角看后室的本质是“受限环境下的空间循环”。它不需要复杂的剧情、不需要建模精良的角色只需要几个可重复利用的纹理、统一的光照、静谧的环境音就能让人产生强烈的不安感。这种极简思路恰好非常适合在性能有限的虚拟机里演示。2.2 虚拟机在这里扮演什么角色很多人对虚拟机的第一印象是“拿它装个 Windows 或 Linux 来折腾”但其实虚拟机更大的价值是隔离和可控。后室场景的核心体验是“被困住”而虚拟机恰恰能帮你制造这种被困住的环境断网运行模拟孤立无援。使用快照随时回到“坠入后室”的那一刻。通过共享文件夹向虚拟机内投入资源模拟“外界失联但仍有微弱信号”。限制 CPU 和内存让系统运行在低性能状态下反而更贴合后室的压抑氛围。换句话说虚拟机是让后室从“概念图”变成“可体验原型”的底盘。2.3 这个实验项目适合谁正在学 Linux 和 VMware 的初学者想找一个有趣的项目来练手。对独立游戏、视觉小说感兴趣想低成本尝试场景搭建的创作者。需要用隔离环境做演示、测试但不想碰真实生产服务器的开发者。纯粹被这个题材吸引想在自己的电脑上复刻一个“诡异空间”的玩家。3. VMware 环境准备与前置条件3.1 主机要求运行 VMware 并创建带图形界面的 Linux 虚拟机主机建议满足以下条件实际配置可以低于这个要求但体验会明显打折项目建议配置CPU支持虚拟化技术Intel VT-x 或 AMD-V建议 4 核以上内存至少 8GB16GB 更稳妥硬盘可用空间 40GB 以上推荐 SSD操作系统Windows 10/11 或 Linux 主流发行版注意事项虚拟机内跑图形界面3D 加速能力很重要。VMware 对虚拟显卡的模拟能力有限场景复杂度不要太高否则帧率会让人怀疑人生。3.2 虚拟化开关检查如果后续创建虚拟机时提示“此主机支持 Intel VT-x但 Intel VT-x 处于禁用状态”不要急着重装 VMware先进 BIOS/UEFI 打开虚拟化开关。一般来说Intel 平台查找Intel Virtualization Technology设置为 Enabled。AMD 平台查找SVM Mode设置为 Enabled。Windows 系统需要关闭 Hyper-V 或虚拟机监控程序的独占锁定否则 VMware 可能与 WSL2、Hyper-V 产生冲突。3.3 下载与安装 VMware版本选择上个人学习使用 VMware Workstation Player 就够用它是一个免费版本支持创建和运行虚拟机需要更多高级功能比如多台虚拟机快照管理、克隆可以选用 Workstation Pro 的试用版本。安装过程不需要过多配置默认下一步即可。需要注意的点是安装时如果系统检测到 Hyper-V 冲突会提示你禁用 Windows 功能按提示操作后重启即可。安装完成后确认命令行能识别 VMware 工具vmware -v如果能输出版本号说明安装成功。4. 创建后室风格 Ubuntu 虚拟机4.1 系统镜像准备我们要在虚拟机里运行一个带桌面环境的 Linux 系统选 Ubuntu 长期支持版LTS比较稳妥软件源丰富遇到问题时搜索到的资料也最多。也可以使用 Debian 或 Linux Mint原理一致本文演示以 Ubuntu 为例。先下载 ISO 镜像刻录到 U 盘这一步可以跳过因为 VMware 可以直接加载 ISO。4.2 新建虚拟机向导打开 VMware Workstation点击“创建新的虚拟机”选择“典型推荐”。接下来按下面配置客户机操作系统选择 Linux版本选择 Ubuntu 64 位。虚拟机名称建议命名为backrooms-lab后面方便辨认。磁盘大小给 30GB 以上选择“将虚拟磁盘存储为单个文件”性能更稳定。内存分配 4GBCPU 给 2 核。创建完成后不要急着启动先进入“虚拟机设置”把 ISO 镜像挂载到 CD/DVD 光驱然后勾选“启动时连接”。显示设置里可以把“加速 3D 图形”打开这个选项直接影响虚拟机内部三维场景的流畅度。配置完成后页面大致是这样Memory: 4096 MB Processors: 2 Hard Disk: 40 GB (Single file) CD/DVD: Ubuntu LTS ISO (Connected at power on) Network: NAT (先用 NAT后续试验桥接) Display: 3D Acceleration on4.3 操作系统安装启动虚拟机Ubuntu 安装界面出现后选择“安装 Ubuntu”推荐勾选“为图形或无线硬件安装第三方软件”可以省掉不少显卡驱动麻烦。安装分区这里普通实验直接用默认选项“清除整个磁盘并安装 Ubuntu”即可因为这个“磁盘”本质上是虚拟磁盘不影响真实主机数据。完成初始化用户后系统会自动重启。重启后如果看到 Ubuntu 桌面虚拟机创建这一关就算过了。4.4 安装 VMware Tools 与增强功能VMware Tools 的作用是提升虚拟机性能支持剪贴板共享、拖拽文件、自适应分辨率。Ubuntu 新版系统可以通过命令安装开源版本sudo apt update sudo apt install open-vm-tools open-vm-tools-desktop安装完成后重启虚拟机窗口分辨率会自适应变化复制粘贴也生效了。5. 后室场景的基础配置5.1 配置共享文件夹向虚拟机投喂资源后室风格的实验环境需要把外部素材纹理图片、音频、三维模型送进虚拟机里最方便的方式是配置共享文件夹。在 VMware 菜单栏选择“虚拟机—设置—选项—共享文件夹”添加主机上的一个目录比如D:\backrooms-assets。格式建议选择“总是启用”并勾选“在虚拟机中映射为网络驱动器”。在 Ubuntu 虚拟机里看到共享目录的方法ls /mnt/hgfs/如果能看到你设置的目录名说明共享文件夹生效。如果没有出现可以执行一次挂载sudo vmhgfs-fuse .host:/ /mnt/hgfs/ -o allow_other -o uid1000注意uid1000通常对应 Ubuntu 默认创建的第一个用户如果当前用户 uid 不是 1000可以用id -u查一下再替换。5.2 网络隔离制造“后室失联感”后室的重要氛围是“联系不上外界”。VMware 提供了几种网络模式这里我们切换到“仅主机模式Host-Only”。在这种模式下虚拟机只能和主机通信无法访问互联网这正好用来模拟“卡进后室后和外部断开联系”的状态。切换到仅主机模式的步骤虚拟机设置 — 网络适配器 — 选择“仅主机模式”。切换后在虚拟机内验证网络状态ip addr show ping 主机IP主机 IP 可以通过 VMware 虚拟网卡查看通常是 192.168.x.1 网段。虚拟机内ping不通百度等外网地址是预期结果如果能ping通主机就说明仅主机模式的隔离网络已经建立。如果后续需要安装软件包可以临时把网络切回 NAT装完再切回来用这种方式模拟“偶尔收到外界微弱的信号”也很有趣。5.3 使用快照回到“坠入后室之前”快照是虚拟机最实用的功能之一。每当你完成一个阶段的配置比如系统装完、驱动装好、场景搭建到一半都可以打一个快照。虚拟机 — 快照 — 拍摄快照快照名称建议使用场景化描述比如“刚刚醒来身处黄色走廊”“发现第一个出口其实是死路”“遭遇实体之前”这样后面迭代场景、测试不同氛围时随时可以一键回到某个状态不用重新搭建环境。虚拟机快照的底层逻辑是保存当前磁盘状态和内存状态所以恢复速度非常快。6. 在虚拟机内搭建简易后室三维场景6.1 为什么选 Godot 而不是 Unity 或 Unreal在虚拟机内部跑大型三维引擎对虚拟显卡的压力太大Unity 编辑器在虚拟机的性能表现通常捉襟见肘Unreal 更不用考虑。Godot 引擎轻量、开源、对性能要求低而且支持 GDScript 脚本语言非常适合作为一个“后室探索原型”的运行底盘。安装 Godot 的方式是直接解压官方压缩包不依赖安装器cd ~/backrooms-assets wget https://github.com/godotengine/godot/releases/download/4.2-stable/Godot_v4.2-stable_linux.x86_64.zip unzip Godot_v4.2-stable_linux.x86_64.zip chmod x Godot_v4.2-stable_linux.x86_64如果虚拟机的网络被切到仅主机模式这一步会无法下载需要临时切回 NAT 网络。请提前下载引擎和全部依赖素材再切回隔离网络。6.2 项目结构与场景文件在 Godot 里新建一个BackroomsDemo项目目录结构如下BackroomsDemo/ ├── project.godot ├── scenes/ │ ├── main.tscn │ └── player.tscn ├── scripts/ │ ├── player.gd │ └── room_loop.gd └── assets/ ├── wall.png ├── floor.png └── ambient_loop.ogg其中project.godot是 Godot 项目的配置文件Godot 编辑器会自动生成。如果没有素材包可以从一些免费纹理站点下载贴图注意选择可商用授权。6.3 核心脚本房间循环与玩家控制后室的第一层通常是无限循环的走廊这里用两个脚本实现核心机制。第一个脚本放在玩家节点上控制角色移动# 文件路径BackroomsDemo/scripts/player.gd extends CharacterBody3D export var move_speed : 3.0 export var mouse_sensitivity : 0.002 func _ready() - void: Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) func _unhandled_input(event: InputEvent) - void: if event is InputEventMouseMotion: rotate_y(-event.relative.x * mouse_sensitivity) $Camera3D.rotate_x(-event.relative.y * mouse_sensitivity) $Camera3D.rotation.x clamp($Camera3D.rotation.x, -1.2, 1.2) func _physics_process(delta: float) - void: var input_dir : Input.get_vector(left, right, forward, back) var direction : (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized() if direction: velocity.x direction.x * move_speed velocity.z direction.z * move_speed else: velocity.x move_toward(velocity.x, 0, move_speed) velocity.z move_toward(velocity.z, 0, move_speed) move_and_slide()第二个脚本放在“房间”节点上用来实现循环走廊的视觉欺骗。当玩家走到走廊尽头时不触发碰撞死亡而是把玩家传送回起点并轻微改变灯光颜色制造“似乎走了很远但永远走不出去”的既视感# 文件路径BackroomsDemo/scripts/room_loop.gd extends Area3D export var target_teleport_position : Vector3(0, 0, 0) export var light_node_path: NodePath func _on_body_entered(body: Node3D) - void: if body.is_in_group(player): body.global_position target_teleport_position var light : get_node_or_null(light_node_path) if light: light.light_color Color(0.85, 0.8, 0.3)这里没有用随机生成房间的方式而是直接传送玩家位置。视觉上因为走廊纹理高度统一玩家很难察觉自己已经瞬移回到了起点。6.4 场景布局在 Godot 编辑器里主场景main.tscn包含以下节点结构Main ├── Room (StaticBody3D) │ ├── MeshInstance3D (Wall/Floor/Ceiling) │ └── CollisionShape3D ├── LoopTrigger (Area3D) ├── Player (CharacterBody3D) │ └── Camera3D └── AmbientLight (OmniLight3D)房间尺寸建议做成一条长走廊比如宽 6 米、长 30 米、高 4 米。贴图重复参数调到高频这样玩家走起来会明显体会到“同样的墙纸不断重复”。加入一个 OmniLight3D使用偏黄的暖光强度不要太高制造荧光灯管的压抑感。6.5 运行与操作在 Godot 编辑器中直接按 F5 运行项目虚拟机会捕获鼠标。操作方式WASD移动鼠标移动视角旋转Esc释放鼠标光标如果需要调整输入映射在项目设置里把forward、back、left、right绑定到对应键盘按键。7. 运行结果与效果验证7.1 判断场景是否运行正常运行后检查以下几点画面是否稳定保持在 30 FPS 以上。角色能否正常移动和转向。走到走廊尽头是否触发传送。灯光颜色在传送后是否发生轻微变化。虚拟机内声音是否正常播放环境音。如果出现画面严重卡顿优先查看虚拟机的显示设置确认 3D 加速是否开启glxinfo | grep renderer有正常的图形渲染器输出说明 3D 加速生效。如果没有输出需要安装mesa-utilssudo apt install mesa-utils7.2 如何让这个场景更像“后室”后室氛围靠三个东西空间、声音、光。空间走廊尺度需要刚好合适太宽不像室内太窄会让人烦躁。反复测试不同的贴图重复次数找到最让视觉疲劳的参数。声音加入一段低频循环环境音音量压得很低若有若无。这是制造焦虑感最有效的手段。光荧光灯需要带轻微的闪烁效果。在 Godot 中可以通过脚本周期性调整光的强度频率不要太高一秒钟暗一下即可。下面是一个简单的灯光闪烁脚本# 文件路径BackroomsDemo/scripts/flicker.gd extends OmniLight3D export var min_energy : 0.6 export var max_energy : 0.9 export var flicker_duration : 0.15 var time_accum : 0.0 func _process(delta: float) - void: time_accum - delta if time_accum 0.0: light_energy randf_range(min_energy, max_energy) time_accum flicker_duration * randf_range(0.8, 1.2)把该脚本挂到场景中的 OmniLight3D 节点上运行后你就能看到荧光灯那种让人心神不宁的闪烁频率。7.3 快照验证在运行场景的过程中反复拍摄快照记录不同版本的效果快照 A灯光没有闪烁。快照 B灯光加闪烁脚本。快照 C贴图纹理更高频。然后从快照 B 恢复到系统之前的某个状态确认快照恢复是否正常。快照是虚拟机实验中最值得养成的习惯没有之一。8. 常见问题与排查方法问题现象可能原因排查方式解决方案创建虚拟机提示 VT-x 禁用BIOS 虚拟化开关未开启重启进 BIOS/UEFI 查看虚拟化设置开启 Intel VT-x 或 AMD SVM虚拟机启动后黑屏显示驱动不兼容或 3D 加速异常查看虚拟机日志重启进入恢复模式关闭 3D 加速更新虚拟显卡驱动WSL2 与 VMware 冲突Hyper-V 占用虚拟化层打开“Windows 功能”查看 Hyper-V 状态启用 Windows 虚拟机监控程序平台或切换 VMware 版本Ubuntu 共享文件夹不显示open-vm-tools 未安装或未挂载执行ls /mnt/hgfs/安装 open-vm-tools执行 vmhgfs-fuse 挂载虚拟机无法访问互联网网络适配器处于仅主机模式查看ip addr和路由表临时切换到 NAT 模式或桥接模式Godot 运行卡顿场景面数过高压制虚拟显卡查看渲染器输出和性能监控简化几何体降低贴图分辨率关闭抗锯齿无法复制文本到虚拟机VMware Tools 未安装检查菜单栏的虚拟机—重新安装 VMware Tools安装 open-vm-tools-desktop 后重启快照恢复后场景文件丢失快照仅保存磁盘状态未保存外部共享文件检查共享目录挂载情况将项目完整放在虚拟磁盘内再打快照9. 最佳实践与工程建议9.1 养成“先打快照、再改配置”的习惯不管是修改内核参数、安装重量级软件还是给虚拟机加内存动手之前先打一个快照。如果后面配置坏了三秒钟回到之前的状态这是虚拟机相比物理机最核心的工程优势。9.2 用命名约束管理多台虚拟机和快照如果一个后室项目包含多台虚拟机比如一台做场景开发、一台做素材采集、一台做录制验证命名建议遵循统一的规则backrooms-lab-dev 开发环境 backrooms-lab-assets 素材采集环境 backrooms-lab-preview 预览验证环境快照命名带日期和阶段比如snap-20250101-before-flicker不要用“最终版”“最终版2”这种含糊的名字。9.3 虚拟磁盘别放在系统盘默认情况下 VMware 会把虚拟磁盘放在用户目录如果主机系统盘空间紧张建议把虚拟磁盘目录迁移到数据盘。迁移方法先关闭虚拟机在“虚拟机设置—硬盘—高级”里查看磁盘文件路径把.vmdk文件复制到目标目录再重新关联。9.4 素材版权与命名安全做创意实验也要注意素材版权。不要直接使用从游戏里提取的贴图和音频尽量使用 CC0 或明确可商用授权的素材。归档素材时记录好每个文件的来源和授权协议避免后续发布作品时踩坑。9.5 虚拟机资源限制策略不要给虚拟机分配主机全部内存和 CPU。总是给主机留下至少 2GB 内存和 2 个 CPU 核心否则主机会因为资源耗尽变得异常卡顿鼠标漂移、输入延迟这些问题都会冒出来。虚拟机的 CPU 和内存可以在设置里随时调整但调整前需要关闭虚拟机。9.6 后室场景渲染性能优化建议贴图使用 1024x1024 以内分辨率压缩格式选择 VRAM Compressed。房间模型直接用 Box 造型不要导入高模。光照烘焙优先于实时灯光。环境音使用低码率 OGG 文件减小虚拟机内的 IO 压力。10. 总结与后续学习方向VM 虚拟机本身是一套成熟的基础设施工具但把它用在“后室实验场景”这个方向上你会突然发现虚拟化的价值不只是装操作系统、跑服务、练 Linux 命令它还可以成为创意项目的沙盒。通过 VMware 创建隔离环境、配置共享文件夹、切换网络模式、制作快照再通过 Godot 这样一个轻量引擎搭建场景脚本你就能在自己熟悉的开发环境里复刻出一种充满空间错位感的交互体验。这篇文章的核心操作路径是准备 VMware 环境、创建 Ubuntu 虚拟机、配置共享与网络、搭建 Godot 场景、验证运行效果。如果你把这条路完整走了一遍其实已经掌握了虚拟机环境管理、Linux 基础命令、场景编辑器使用、简单游戏脚本编写这几项能力这对日常开发和技术创作都有直接帮助。如果你对“后室”这个题材有更多兴趣值得继续深入的方向包括用程序化生成无限延伸的迷宫走廊替代当前的固定传送点方案。加入音效触发器在不同区域播放不同的环境音制造阶段递进的压迫感。利用 Godot 的多人联机功能让几个人在同一个虚拟环境里“被困住”体验感会完全不一样。把虚拟机快照和自动化测试结合起来批量验证不同灯光参数、贴图组合下的渲染效果。这次实验只是一个起点。虚拟机是工具后室是场景而真正值得长期练习的是“把一个抽象概念落地成可运行原型”的能力。下一次再看到类似“卡进某个空间”、“进入某个世界”的设定你完全可以打开 VMware先创建一个干净的环境然后一步步把那个想象的场景搭出来。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进