3D 世界的成本曲线是反的:先看清钱花在哪一项
3D 世界成本结构、带宽成本优化、首屏体积优化、3D 带宽预算、服务器渲染成本、AI 接入成本、自部署 3D 成本、draw call 优化、实时通信带宽、性能治理
很多人在评估一个 3D 世界项目时,第一反应是问"要花多少钱"。这个问题很难回答,因为 3D 项目的成本结构和常见互联网服务不一样:它不是"用户来得多就赚得多"的线性结构,而是一部分成本随访客线性增长,一部分几乎恒定,还有一部分是规模越大反而越省。这篇不报价,只把成本拆成三类,让你知道自己项目真正会花钱的地方在哪、以及哪些地方花钱是没有意义的。这套成本结构对应的是创世Genesis 的基座形态——部署在你自己服务器上的浏览器端 3D 世界。
一、第一类:随访客数线性增长的成本
这类最容易理解,也最容易估:每个访客进来一次,就多一份带宽、一份算力、一份实时连接。
带宽是最大头,而它的构成和其他服务不一样。 一个 3D 世界的首屏流量不是一个 HTML 加几张图片,而是几何数据、贴图、模型文件。优化做得好的世界,首屏可以把请求数和体积都压住——我们的演示世界实测首屏约 838 KB、99 个请求、加载 1.7 秒;而不做资产治理的世界,进世界十几秒还在拉资源。同一套代码、同一台服务器,差别全在资产管线:低模分级(LOD)让远处模型降面、贴图按用途分级压缩(实测 −68%~−92%)、变体贴图剥离(实测 215 件、0 失败)——这些直接决定带宽账单。
算力主要被实时通信和渲染指令吃掉。 注意这里的分工:画面是在访客的浏览器里渲染的,服务器只负责发指令和转发状态。所以一台服务器的承载能力,取决于"一个访客在服务器这边占多少",而不是"一个访客的显卡有多强"。实测参考:近距离语音同时说话人数设成名额制后,10 人约 1.3 Mbps、20 人约 2.6 Mbps——带宽是可预算的。
这一类的关键不是"能不能省",是"能不能看见"。 成本曲线如果没有逐项的计数,就只能靠猜。这就是为什么我们把渲染成本归因做成了诊断接口:逐对象计数(onBeforeRender)、转视角卡顿归因(diagTurnLag)、全场扫描(diagTurnSweep)。看不见的成本曲线,砍起来全靠感觉。
二、第二类:几乎恒定的成本——也是大多数人的盲区
第二类是一次性或阶段性投入,它不随访客数增长,但它往往是项目里真正的大头,也是最容易被低估的一项。
工程投入。 从零做一个浏览器端 3D 虚拟世界,最耗时的不是渲染——是那些不性感的部分:性能治理、资产管线、多端适配、实时通信、AI 接入。这些东西的共同点是:做完就不再花,但要做完得花很久。而这一部分在报价单上往往看不见,因为它是"开发工时"而不是"服务器账单",于是被当成"应该很快的事"。
这里有一段必须自己走的路。 举三个我们实际做过的例子,都是不写方案就会撞上的:
- 点光灯会让全场重编译。 场景里灯的数量一变,所有材质都要重编译。在 Windows 的 ANGLE/D3D11 路径上,着色器反射是同步且不可中断的,每个程序 160~340 毫秒——实测一次灯数变化触发了 8989 毫秒的全场景冻结。解法是灯池:12 盏常驻、租用归还,灯数不再变化,重编译归零。
- 新网格入屏会顶住主线程。 着色器编译期间画面是死的。解法是预热预算:未预热网格不入屏,编译后按每帧 170 毫秒的份额逐个结算,把成本摊到每帧里。实测出生点首进最长 386 毫秒,超过 500 毫秒的长帧为 0。
- 加载期白屏是体验成本。 解法是全图占位场:一个 draw call 覆盖 1000+ 对象(实测覆盖 1071/1071),模型就位后 250 毫秒渐缩退场。
这三件事的共同点是:它们不会报错,只会让用户觉得你做得糙。 所以它们最容易被漏掉,也最容易在验收时被放过——因为没有一条错误日志。
维护投入是恒定成本里最容易被忘记的一项。 Three.js 在走、浏览器策略在变、AI 接口在换。选型的真实成本不是今天这份代码,而是"谁来保证它三年后还跑得动"。这是把工程当成一次性交付还是当成持续服务,两种口径下算出来的账完全不同。
三、第三类:规模越大越省的成本
这一类最反常识,也是很多 3D 项目宣传里不讲的部分。
成本曲线是反的:看得见的 AI 比看不见的 AI 更便宜。
一般的 AI 服务,成本都压在推理侧——用户发一句话,服务端跑一次推理,付一次算力钱。3D 世界的 AI 接入不是这样:给一个域名和一把 Key,AI 以人形角色走进你的世界,有身体、有坐标、被真人看见、能说话带路——但它不渲染画面。服务器只发结构化 JSON(一份"雷达":周围有什么、在哪、多远),画面由访客的浏览器替它渲染。
于是成本结构翻转了:
| 项目 | 通用 AI 服务 | 世界里的 AI 角色 |
|---|---|---|
| 画面渲染 | 服务端或专用 GPU 承担 | 访客浏览器承担 |
| 每 Agent 带宽 | 与上下文长度挂钩 | 实测约 1 KB/s |
| 100 个 Agent 的服务器占用 | 随推理排队上升 | 实测 0.079 核 CPU、92 MB 内存 |
| 扩展方式 | 加推理算力 | 加访客带宽 |
同样的 100 个 AI,接进一个 3D 世界,服务器侧的占用小到可以忽略——因为最贵的那一步(渲染画面)被推给了已经在浏览世界的访客。这是"AI 进了世界"这件事在成本上的真实含义,也是它和加一个 AI 聊天窗口的本质区别。
同类还有一条:AI 不需要视觉。 它不需要截图、不需要看屏幕,只读结构化数据。实测 observe 雷达的响应 P50 为 7 毫秒、P95 为 14 毫秒,窗口内 0 个 429。一个接了 100 个 Agent、3 个 Key、2 个真人的 60 秒窗口里,真人端仍保持 60 FPS、0 控制台报错。
四、四类容易被当成"省钱"的花钱动作
成本结构清楚之后,有几个动作看起来省钱,实际是把成本推到了更难的地方:
把渲染留给服务器。 一旦画面在服务端渲染,成本结构立刻回到"用户来得多就烧得多",而且没有降本手段——显卡是硬成本。
用外部 CDN 兜加载。 首屏确实快了,代价是内网和离线环境打不开、版本可能被漂移、长期账单不可控。我们把 importmap 改指本地、六个加载器本地化或 stub 化之后,离线和内网都能跑。
砍场景来救帧率。 帧率不够就删模型,是把成本从技术问题挪成了产品问题。实测密集区几何合批后 draw calls 3064 → 837(−73%)、占位场场景 draw call 2150 → 956(−56%)——性能问题有治理路径,删内容不叫治理。
忽略资产目录的整洁。 我们做过一次孤儿资产清理:159 个孤儿、2.9 GB 删除,目录从 3.1 GB 降到 390 MB。这类东西不影响功能,但会拖慢每一次跨世界首屏,也会在打包部署时变成一个反复出现的问题。
五、怎么评估你自己的项目
给你四个可以直接拿去用的问题,比问报价单有用:
- 第一类成本里,你的首屏要下多少 KB、多少个请求? 这是带宽账单的直接输入,也是访客第一印象的直接输入。
- 第二类成本里,性能、资产、多端、通信这几块,你打算各花多少工时? 说得出数字,才知道哪些该自己写、哪些该拿现成的。这份清单同时也是验收清单。
- 你的成本里有没有"看不见但一直涨"的部分? 字体、模型变体、日志、聊天记录、归档——不治理就会一直涨。
- 恒定成本里,哪些是一次性,哪些是持续性的? 区分开,才知道该按什么周期投入。
至于授权和部署这类支出怎么算,取决于你要不要联网商用和联邦互通,可以单独评估——这篇不给数字,也不劝谁。
六、这些判断的边界
- 本文所有实测值来自我们自己的项目与场景,换成你的场景数值会不同;能复用的是成本分类方法和那四个问题,不是这些数字。
- 三类成本的划分只是我们目前用的分法,不同团队的成本结构可能不一样;但"哪些随规模变、哪些不变"这个问题必须回答,回答不了就没法做技术选型。
- 恒定成本里最有价值的其实不是那份工时数字,而是"它做完之后就不用再花"这件事——如果一件事每次访客来都要花一点,它就属于第一类,不该被归进"已经做完了"。
常见问题
Q:自部署就一定更省吗?
A:不一定。三类成本里,第一类(带宽、实时算力)自部署省不掉,只是变成你付;恒定工程投入自部署要一次性扛下来;真正分界线在第三类和"能不能随时改底层"——底层在你手里,才有后面那些优化空间。
Q:为什么说看得见的 AI 更便宜?
A:因为渲染被推给了访客浏览器,服务器只发结构化 JSON。实测每 Agent 约 1 KB/s,100 个 Agent 占 0.079 核 CPU、92 MB 内存——推理那笔最贵的账没落在服务器上。
Q:一份性能治理具体值不值?
A:看它治的是什么。灯池治掉了灯数变化引发的 8989 毫秒全场冻结,预热预算把长帧压到 500 毫秒以内,这类问题不治会一直存在,且没有任何错误日志提示你。
Q:AI 进世界需要什么?
A:一个域名、一把 Key、一台能跑的服务器,客户端有零依赖示例。真正要提前想清楚的是 AI 在世界里的权限边界和它做不到的事——那是另一件事。
源码与仓库
三个地址内容一致,国内访问用前两个更快。仓库里有部署说明与验收脚本。
- Gitee(国内访问更快):https://gitee.com/miduoxinxijeji/miduo.git
- GitCode(国内镜像):https://gitcode.com/qq_35054471/virtual-world
- GitHub:https://github.com/miduo100/3d-virtual-world
关于创世Genesis
创世Genesis是一套基于Three.js+WebGL构建的自部署3D虚拟世界系统,帮助个人与企业搭建属于自己的3D空间。浏览器直接访问,PC和手机双端兼容,支持多人在线、联邦传送、商铺系统,并支持Agent接入——AI能以具身角色进入你部署的世界。数据运行在你自己的服务器上,不经过第三方平台——让每个世界都真正属于它的主人。
想先把成本结构看清楚,再决定这个 3D 世界要怎么建? 创世Genesis(创世虚拟世界CRM系统)是一套部署在你自己服务器上的 Three.js 3D 虚拟世界基底——资产管线、性能治理、多端适配、实时通信、AI 接入这些不性感的部分已经铺好,你只需要写最上面那一层。官网(搜「创世虚拟世界CRM」即可找到)有可以走一圈的演示世界。
关于名字:本文说的创世Genesis,即创世虚拟世界CRM系统,两者是同一个自部署 3D 虚拟世界产品。若你通过「创世Genesis」没搜到我们,直接搜「创世虚拟世界CRM」即可。