一个跑在浏览器里的 3D 虚拟世界——部署在你自己的机器上,数据完全归你。 你把它装在自己的电脑或服务器上,打开浏览器就能进入一个完整的 3D 世界:可以拖拽搭建场景、自定义角色、邀请朋友进来一起逛。不同人部署的世界之间还能互相传送,身份和资产跨世界跟随。 它不是托管在某个平台上的云服务,而是你自己的独立节点。没有账号注册、没有内容审核、没有平台抽成,代码未加密,想怎么改就怎么改。 核心技术特点 独立世界 —— 数据 100% 归自己,不论是电脑还是服务器,都可以部署本世界。这个世界就是你的私有资产,放到服务器或者 IPv6 的电脑上即可对外公开,通过域名或者 IP 让其他用户访问。 资产私有化 —— 虚拟资产只存在您的电脑或者服务器上。 跨世界获得 —— 在其他世界获得的物品会归属到当前用户注册使用的服务器上。 跨世界传送 —— 跨世界传送时用户当前配置的角色样式、骨骼、动画、声音、模型样式等,在目标世界依然生效,在其他人眼里也是你配置的样式。 适合谁用 个人 零成本拥有自己的 3D 虚拟空间存放图片视频和回忆等各种虚拟资产,如果能实现数字永生,这里可能会是你的…… 中小企业 把店变成可逛可玩的 3D 虚拟旗舰店,停留时间提升 10 倍 大型企业 多地分公司联邦互联,数据安全自主可控 教育机构 把课本变成可以走进去的 3D 世界,完课率和兴趣度翻倍 景区/博物馆 永不闭馆、无限容量、全球可达的数字孪生景区 政府/公共组织 智慧城市的 3D 交互界面,市民看得见摸得着的数字政务 会展行业 零场地费的 365 天永不落幕的全球 virtual expo 联邦多世界互联 多个独立部署的世界实例之间互联,玩家可跨世界旅行
Virtual World — 3D 多人虚拟世界平台
🌐 English | 简体中文

基于 Three.js + Express.js + PostgreSQL 构建的沉浸式 3D 多人虚拟世界系统。
支持多世界联邦互联、角色定制、3D 建筑搭建和实时多人交互。
VWFP v2.1 协议 | Copyright © 2026 济宁米多信息科技有限公司
目录
项目简介
一个跑在浏览器里的 3D 虚拟世界——部署在你自己的机器上,数据完全归你。
你把它装在自己的电脑或服务器上,打开浏览器就能进入一个完整的 3D 世界:可以拖拽搭建场景、自定义角色、邀请朋友进来一起逛。不同人部署的世界之间还能互相传送,身份和资产跨世界跟随。 它不是托管在某个平台上的云服务,而是你自己的独立节点。没有账号注册、没有内容审核、没有平台抽成,代码未加密,想怎么改就怎么改。
很抱歉让它在不完善的状态下与大家见面。 这个产品做到这个程度已经消耗了我所能承受的范围。很抱歉让他在不完善的状态下与大家见面。因为我需要赚钱去了,然后继续再做这个项目。如果喜欢的人多订阅多,我将会快速的更新。即使喜欢的人少我也会持续更新,多了我会加快进度,少了我就慢点。一边生活一边筑梦吧!
核心技术特点
- 独立世界 —— 数据 100% 归自己,不论是电脑还是服务器,都可以部署本世界。这个世界就是你的私有资产,放到服务器或者 IPv6 的电脑上即可对外公开,通过域名或者 IP 让其他用户访问。
- 资产私有化 —— 虚拟资产只存在您的电脑或者服务器上。
- 跨世界获得 —— 在其他世界获得的物品会归属到当前用户注册使用的服务器上。
- 跨世界传送 —— 跨世界传送时用户当前配置的角色样式、骨骼、动画、声音、模型样式等,在目标世界依然生效,在其他人眼里也是你配置的样式。
- 极致性能 —— 模型上传自动两级压缩(gltfpack 几何压缩 + sharp 纹理重压缩),体积平均降低 70%+、显存节省最高 75%,配合智能优先级加载队列与分级进度反馈,低配机器也能流畅逛世界。
为了这个想法能更广阔的被使用,现在我公布防御性技术公开文档:PATENT_DISCLOSURE.md
我为什么要做这个?
你是否察觉到,当下的互联网正身处层层束缚之中。AI之后程序不难编写,人人都具备开发软件的能力,可是否感觉处处束手束脚? 想详细看就看我的文章吧:
👉 AI 让人人变成开发者,中心化牢笼再也压不住创造力——Web 2.0走到头了
适合谁用
| 用户群体 | 使用场景 |
|---|---|
| 个人 | 零成本拥有自己的 3D 虚拟空间存放图片视频和回忆等各种虚拟资产,如果能实现数字永生,这里可能会是你的…… |
| 中小企业 | 把店变成可逛可玩的 3D 虚拟旗舰店,停留时间提升 10 倍 |
| 大型企业 | 多地分公司联邦互联,数据安全自主可控 |
| 教育机构 | 把课本变成可以走进去的 3D 世界,完课率和兴趣度翻倍 |
| 景区/博物馆 | 永不闭馆、无限容量、全球可达的数字孪生景区 |
| 政府/公共组织 | 智慧城市的 3D 交互界面,市民看得见摸得着的数字政务 |
| 会展行业 | 零场地费的 365 天永不落幕的全球 virtual expo |
| 联邦多世界互联 | 多个独立部署的世界实例之间互联,玩家可跨世界旅行 |
截图预览
| 用户首页(3D 世界) | 管理后台仪表盘 |
|---|---|
![]() |
![]() |
| 传送 | 传送按钮 |
![]() |
![]() |
| 世界布置后台 | 世界信息 |
![]() |
![]() |
| 手机版首页 | 手机版世界 |
![]() |
![]() |
核心特性
3D 场景与渲染
- Three.js 驱动:完整的 3D 场景渲染引擎,支持动态光照、阴影和天空盒
- 自由搭建建筑:几何体建筑(立方体/球体/圆柱等)和 GLB/GLTF 模型上传
- 实时多人同步:WebSocket 驱动的角色位置、动画和场景变更广播
- 移动端适配:虚拟摇杆 + 触屏操作
- 自动模型压缩:上传 GLB 自动执行两级压缩——gltfpack 几何压缩(meshopt)+ 纹理重压缩(法线/遮挡无损、颜色贴图量化降分辨率),大模型体积平均降低 70%~90%,显存占用最高减少 75%
- 智能加载调度:优先级加载队列(几何体/媒体 → 小模型 → 大模型)、大模型并发控制、基于距离的分阶段加载与自动卸载,世界秒开不卡顿
- 加载进度可视化:顶部进度条 + 场景内 3D 进度浮标(已下载/总字节数),配合模拟进度兜底,任何网络条件下都有清晰反馈
多世界联邦系统
- 世界互联:多个服务器组成联邦网络,实现跨世界传送和访问
- 对等架构:各世界平等互联,无需中央协调节点
- 安全握手:基于 RSA-2048 公钥交换 + JWT 签名验证的世界间认证机制
- VWFP v2.1 协议:自研跨虚拟世界联邦协议
角色与动画
- 角色自定义:支持 Mixamo、ReadyPlayerMe、VRoid 等多平台骨骼
- 动画系统:动作库管理、骨骼重定向(Retargeting)、武器挂载点
- 实时换装:切换角色模板和外观
- 跨世界角色迁移:角色配置在联邦世界间安全传递
世界生态
- NPC 系统:自定义 NPC 创建、对话和行为配置
- 怪物系统:战斗怪物创建与管理,掉落物品
- 传送门:世界内部和跨世界传送
- 商城与背包:完整的虚拟物品交易和库存管理
- 技能系统:语音触发技能、效果、范围、冷却
- 画廊系统:3D 画廊展示
编辑器套件
- 统一编辑器:几何体 + 模型库,二合一
- 世界编辑器:对象摆放/移动/旋转/缩放/出生点设置
- 角色编辑器:外观定制(发型/面部/服装/装备)
待优化 - 动画编辑器:骨骼关键帧录制/时间轴播放
待优化 - Three.js 代码块:直接编写 Three.js 代码生成 3D 对象
技术栈
| 层级 | 技术 |
|---|---|
| 前端 3D | Three.js 0.185, WebGL2 |
| 前端 UI | React 18(管理后台), Vanilla JS(世界页) |
| 后端 | Express.js 4.18 (Node.js) |
| 数据库 | PostgreSQL ≥ 17 |
| 实时通信 | WebSocket (ws 8.14) |
| 认证 | JWT (用户 + 管理员双密钥) + bcryptjs 密码哈希 |
| 跨世界安全 | RSA-2048 非对称加密 + JWT RS256 签名 |
| 样式 | Tailwind CSS |
| 文件处理 | multer(上传)+ adm-zip(ZIP解压)+ gltfpack(几何压缩)+ sharp(纹理重压缩) |
| 构建工具 | Vite 5 + TypeScript |
快速开始
环境要求
| 软件 | 最低版本 | 推荐版本 |
|---|---|---|
| Node.js | 18.x | 20.x |
| PostgreSQL | 17 | 18.1 |
| 端口 | 3002(应用 + WebSocket 共用) | - |
完整部署流程(环境配置 / .env 详解 / 数据库导入 / Nginx / PM2 / 联邦系统)请参阅独立部署文档:
| 文档 | 说明 |
|---|---|
| 程序部署说明 | 完整部署步骤(中文) |
| 数据库导入 | 数据库创建与数据导入(中文) |
| Deployment Guide | Complete deployment guide (English) |
| Database Import | Database setup guide (English) |
访问入口
| 入口 | 地址 |
|---|---|
| 用户首页(3D 世界) | http://localhost:3002/ |
| 管理后台 | http://localhost:3002/admin.html |
| 管理员登录页 | http://localhost:3002/admin_login.html |
| 默认管理员账号 | admin / admin123456(请立即修改!) |
项目结构
├── src/ # 后端源码
│ ├── server.js # 主入口
│ ├── server_simple.js # 简化入口
│ ├── federationSystem.js # 联邦系统核心
│ ├── centralWorldConnector.js # 联邦连接器
│ ├── routes/ # API 路由(35+ 模块)
│ │ ├── auth.js # 用户认证
│ │ ├── world.js # 世界场景管理
│ │ ├── federation.js # 联邦通信
│ │ ├── portal.js # 传送门
│ │ ├── users.js # 用户管理
│ │ ├── shop.js / inventory.js # 商城/背包
│ │ ├── npc.js / monster.js # NPC/怪物
│ │ ├── aiSceneGenerator.js # 场景生成
│ │ ├── aiProviders.js # 服务商管理
│ │ ├── geometryBuilding.js # 几何体建筑
│ │ ├── characterTemplates/ # 角色模板(12 文件)
│ │ └── ... # 更多模块
│ ├── services/ # 业务逻辑层(14 文件)
│ ├── middleware/ # 中间件(限流、权限等)
│ ├── websocket/ # WebSocket 处理
│ ├── database/ # 数据库连接与迁移
│ └── utils/ # 工具函数
├── public/ # 前端资源
│ ├── index.html # 3D 世界主页
│ ├── admin.html # 管理后台(React)
│ ├── character_editor.html # 角色编辑器
│ ├── world_editor.html # 世界编辑器
│ ├── unified_editor.html # 统一编辑器
│ ├── animation_puppeteer.html # 动画编辑器
│ ├── ai_scene_generator.html # 场景生成器
│ ├── ai_motion_factory.html # 动作工厂
│ ├── js/ # 前端 JS(67 个文件)
│ │ ├── world.js # 3D 场景主逻辑
│ │ ├── player.js # 玩家控制
│ │ ├── ui.js # UI 交互
│ │ ├── websocket.js # 实时通信
│ │ ├── portalManager.js # 传送门管理
│ │ └── ... # 更多模块
│ ├── models/ # 3D 模型文件(GLB/OBJ)
│ ├── uploads/ # 用户上传文件
│ └── i18n/ # 国际化资源
├── database/ # SQL 迁移脚本
├── db_export.sql # 完整数据库导出
├── Dockerfile # Docker 构建配置
├── docker-compose.yml # Docker Compose 编排
├── package.json # 项目依赖
├── EULA.md # 最终用户许可协议
├── LICENSE # 许可证
└── PATENT_DISCLOSURE.md # 专利技术公开文档
部署方式
支持 Windows 直装、Docker 部署、宝塔面板等多种方式。
| 文档 | 说明 |
|---|---|
| 程序部署说明 | 完整部署步骤(环境配置 / 启动 / Nginx / 联邦系统) |
| 数据库导入 | 数据库创建与数据导入指南 |
英文版请参阅 Deployment Guide 和 Database Import。
Nginx 反向代理配置(生产环境推荐)
server {
listen 80;
server_name your-domain.com;
client_max_body_size 200m; # 3D 模型上传最大 200MB
# 静态文件缓存
location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff2?|glb|gltf)$ {
root /var/www/virtual-world/public;
expires 1y;
add_header Cache-Control "public, immutable";
}
# 主应用(含浏览器根路径 WebSocket:CONFIG.WS_URL 无路径,连 ws://host/)
location / {
proxy_pass http://localhost:3002;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 必需:告诉 Node 原始请求协议。缺这两行时 https 站点会把 AI Agent 发现端点
# 广播成 http://(AI 客户端被 Mixed Content 拦截),且所有访客在限流里算同一个 IP。
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_read_timeout 300s;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
# WebSocket
location /ws {
proxy_pass http://localhost:3002;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 7d;
}
}
验证反向代理(AI Agent 发现端点)
发现文档 /.well-known/virtual-world-agent.json 广播的协议必须与站点实际协议一致
(https 站点 → https:// + wss://)。三步:
- 按上面的配置,在
location /内补两行、location /ws内补四行 - 重载 Nginx:
sudo nginx -t && sudo systemctl reload nginx - 验证(期望看到
https://,不是http://):curl -s "https://你的域名/.well-known/virtual-world-agent.json?t=$(date +%s)" | grep -o '"apiBase": "[^"]*"' curl -s "https://你的域名/.well-known/virtual-world-agent.json?t=$(date +%s)" | grep -o '"websocket": "[^"]*"'
该文档有 60 秒缓存(
Cache-Control: public, max-age=60),改完等 1 分钟或像上面那样加?t=绕过缓存。
联邦系统
联邦系统允许多个独立部署的虚拟世界实例互联,玩家可跨世界传送。
架构
各世界之间平等互联,通过双向信任握手建立联邦关系:
┌──────────┐ 双向信任 ┌──────────┐
│ 世界A │◄──────────────►│ 世界B │
│ (World1) │ │ (World2) │
└────┬─────┘ └────┬─────┘
│ 双向信任 │
└────────────────────────────┘
配置
联邦参与世界的 .env:
IS_CENTRAL_WORLD=false
WORLD_NAME=我的世界
WORLD_URL=https://my-world.your-domain.com
验证联邦连接
# 检查联邦状态
curl https://your-domain.com/api/federation/info
# 预期返回
{
"success": true,
"worldName": "我的世界",
"connectedWorlds": [...]
}
管理后台
管理后台基于 React 构建,提供完整的运营管理功能。
功能模块
| 模块 | 功能 |
|---|---|
| 控制台 | 用户数/建筑数/传送门数/传送次数 统计看板 |
| 用户管理 | 查看所有用户,修改角色权限,删除用户 |
| 传送门管理 | 创建/编辑/统计传送门 |
| 系统配置 | 敏感配置加密存储 / 热更新 |
| 联邦信任 | 审批/拒绝联邦连接请求 |
| 模型守卫 | 远程模型复杂度阈值 / 文件大小限制 |
| 操作日志 | 管理员操作审计追踪 |
编辑器工具
| 编辑器 | 入口 | 功能 |
|---|---|---|
| 统一编辑器 | unified_editor.html |
几何体 + 模型库 |
| 世界编辑器 | world_editor.html |
场景对象摆放/调整 |
| 角色编辑器 | character_editor.html |
角色外观定制 |
| 动画编辑器 | animation_puppeteer.html |
骨骼动画录制 |
许可证与订阅
免费使用(仅限本地个人使用)
在以下条件全部满足时可免费使用:
- 仅在本地机器上个人使用
- 不通过 IP 或域名向他人提供服务
- 不与其他世界建立联邦连接
- 不进行二次开发对外销售
订阅许可(联网/联邦/商业使用)
如果进行以下任一操作,必须获取订阅许可:
- 通过 IP 地址或域名向他人提供访问
- 与其他世界建立联邦连接
- 进行二次开发并对外销售
| 项目 | 费用 |
|---|---|
| 首次订阅(含2个月免费) | ¥60 / $9.18 |
| 月续费(每个世界) | ¥3/月 / $0.46 |
| 年续费 | ¥36/年 / $5.51 |
| 10年续费 | ¥360 / $55.08 |
| 100年续费 | ¥3,600 / $550.80 |
联系方式
-
公司:济宁米多信息科技有限公司
-
统一社会信用代码:913708003104166341
-
邮箱:888@miduo100.com
常见问题
启动报错:EADDRINUSE: address already in use :::3002
端口 3002 被占用,先释放端口再重启:
# Linux
kill $(lsof -t -i:3002)
# Windows
netstat -ano | findstr :3002
taskkill /PID <进程ID> /F
启动报错:password authentication failed for user "postgres"
数据库密码错误,检查 .env 中 DB_PASSWORD 是否与 PostgreSQL 实际密码一致。
启动报错:column "xxx" does not exist
数据库缺少字段,执行迁移脚本或重新导入 db_export.sql。
前端报错:Failed to fetch
API 地址错误或服务未启动,检查:
- 服务是否在运行(
pm2 status) .env中WORLD_URL配置是否正确- 浏览器控制台 Network 标签查看请求详情
3D 模型加载失败
- 检查模型文件是否在
public/uploads/目录 - 检查 Nginx 是否配置了 CORS 头
- 联邦场景下检查目标世界的资源是否可跨域访问
WebSocket 连接失败
检查 Nginx 是否配置了 WebSocket 代理(参考上方 Nginx 配置)。
相关文档
| 文档 | 说明 |
|---|---|
| 程序部署说明 | 中文部署指南 |
| Deployment Guide | 英文部署指南 |
| 数据库导入 | 数据库导入步骤 |
| Database Import | 英文数据库导入指南 |
| EULA | 最终用户许可协议 |
| LICENSE | 许可证 |
| 专利公开文档 | 防御性技术公开 |
| Patent Disclosure | 英文专利公开文档 |
| Three.js r185 升级规划与规范 | r128 → r185 升级总纲:阶段进度表、11 条红线、兼容三层防线与验收记录 |
开发者信息
- 作者:济宁米多信息科技有限公司
- 版本:1.0.0
- 协议版本:VWFP v2.1
- 仓库:Git
技术支持
如需技术支持或有任何问题,请通过以下方式联系:
- 邮箱:888@miduo100.com
Star History
如果这个项目对你有帮助,请给个 Star ⭐
Copyright © 2026 济宁米多信息科技有限公司. All Rights Reserved. VWFP is a protocol developed by 济宁米多信息科技有限公司.
项目介绍
一个跑在浏览器里的 3D 虚拟世界——部署在你自己的机器上,数据完全归你。 你把它装在自己的电脑或服务器上,打开浏览器就能进入一个完整的 3D 世界:可以拖拽搭建场景、自定义角色、邀请朋友进来一起逛。不同人部署的世界之间还能互相传送,身份和资产跨世界跟随。 它不是托管在某个平台上的云服务,而是你自己的独立节点。没有账号注册、没有内容审核、没有平台抽成,代码未加密,想怎么改就怎么改。 核心技术特点 独立世界 —— 数据 100% 归自己,不论是电脑还是服务器,都可以部署本世界。这个世界就是你的私有资产,放到服务器或者 IPv6 的电脑上即可对外公开,通过域名或者 IP 让其他用户访问。 资产私有化 —— 虚拟资产只存在您的电脑或者服务器上。 跨世界获得 —— 在其他世界获得的物品会归属到当前用户注册使用的服务器上。 跨世界传送 —— 跨世界传送时用户当前配置的角色样式、骨骼、动画、声音、模型样式等,在目标世界依然生效,在其他人眼里也是你配置的样式。 适合谁用 个人 零成本拥有自己的 3D 虚拟空间存放图片视频和回忆等各种虚拟资产,如果能实现数字永生,这里可能会是你的…… 中小企业 把店变成可逛可玩的 3D 虚拟旗舰店,停留时间提升 10 倍 大型企业 多地分公司联邦互联,数据安全自主可控 教育机构 把课本变成可以走进去的 3D 世界,完课率和兴趣度翻倍 景区/博物馆 永不闭馆、无限容量、全球可达的数字孪生景区 政府/公共组织 智慧城市的 3D 交互界面,市民看得见摸得着的数字政务 会展行业 零场地费的 365 天永不落幕的全球 virtual expo 联邦多世界互联 多个独立部署的世界实例之间互联,玩家可跨世界旅行
https://miduo100.com/定制我的领域






