meshy-dev/ThreeRT
多媒体与设计一套硬件光线追踪实时路径追踪器,用接近 three.js 的 API 构建可实时渲染的游戏和场景。
项目介绍
ThreeRT 是一个基于 Rust 和 wgpu 的实时路径追踪器,对外提供接近 three.js 的场景 API。它不依赖阴影贴图、光照探针或烘焙光照贴图,场景中的每一盏灯都由 GPU 的光线追踪硬件追踪,在没有硬件光追查询的平台上回退到软件 BVH (L42-L49)。目标是让按 three.js 习惯编写的场景文件既能跑在 ThreeRT 运行时里,也能作为普通 three.js 在浏览器中运行。
仓库包含引擎本体、场景与玩法包,以及参考场景和可玩游戏目录。renderer/ 是 Rust + wgpu 路径追踪器、降噪、后处理和内嵌 QuickJS 运行时;packages/ 包含 @threert/scene、@threert/gameplay 和 @threert/voxel (L163-L176)。
适合希望获得物理光照与实时帧率、又不想从零写渲染器的图形和游戏开发者,前提是能接受 TypeScript 场景代码和 Rust 构建。
快速使用
按用途有三条入口:
玩游戏、做游戏。 从 下载页 获取 macOS(14 及以上,Apple 芯片)或 iOS/iPadOS 17 及以上的客户端,打开应用库或 threert.app 中的示例,再用 Mac 应用内置的命令行创建项目:
threert create my-game
cd my-game
threert dev
threert dev 会在保存时打包、向局域网内客户端提供页面,并打印手机扫码用的二维码。同一地址在浏览器里会以 three.js 渲染。完整流程见 官方文档 。
直接使用 npm 包。 用于类型、测试或自建构建流程:
npm install @threert/scene @threert/gameplay
最小场景从 @threert/scene 引入 Scene、PerspectiveCamera、Mesh、灯光和 SkyAtmosphere,在导出的 build() 中搭建场景并返回 { scene, camera }。光照使用物理单位:示例中的定向太阳光为 90,000 lux,自发光表面本身就是光源 (L50-L82)。完整示例在 scenes/sun-room.ts。
从源码构建引擎。 需要 Rust、Node 24 和 Bun (L130-L150):
npm install && bun scripts/setup.ts
node tools/build-scenes.ts
bun renderer/build.ts
然后可在窗口中运行游戏,或把场景渲染成图片:
renderer/target/release/threert-render play out/bundles/light-room.js
renderer/target/release/threert-render render out/bundles/cornell-box.js -o out/cornell.png --spp 32
视口内拖动旋转、右键拖动平移、WASD/QE 飞行、R 重置、P 截图 (L134-L142)。
使用约束
- 平台。 分发的客户端为 macOS 14+(Apple 芯片)和 iOS 17+。客户端免费但闭源;仓库中的引擎和包采用 MIT 许可证 (L195-L208)。
- 资产不在仓库中。
bun scripts/setup.ts会填充共享资产库并拉取缺失内容。第三方场景和城市数据保留各自许可,详见docs/ASSETS.md。 - 构建要求。 从源码构建需要 Rust、Node 24 和 Bun。GPU 支持 Metal 或 Vulkan 时使用硬件光追查询,否则回退到软件 BVH (L130-L150)。
- 与 three.js 无隶属关系。 ThreeRT 沿用 three.js 风格的 API,但它是独立项目 (L195-L208)。
HotRepo 点评
2026-11-13,项目出现在 HotRepo 新项目榜上,当时 113 stars,在约一个半小时的观测窗口内新增 13 stars。样本很小,只能说明初期有一波关注,不能据此判断持续趋势。更值得关注的是工程体量:Rust + wgpu 路径追踪器、降噪、QuickJS 运行时、玩法与体素包,加上 Bistro、Beeple 的 Zero-Day 和 PLATEAU 东京数据等参考目录,说明它远不止一个演示仓库。README 还给出了与 three.js 的对比:Bistro 场景在 1280 × 720 下每帧 15.5 ms(60 fps)、相对离线参考的 ΔE 为 3.4,而 three.js WebGPU 为 34.7 ms、ΔE 10.1 (L83-L99);这些是作者自己的测量,应结合 docs/COMPARE.md 中的方法阅读。
本文由 AI 根据项目 README 生成,更新于 ,以项目官方文档为准。