Three.js
概述
Three.js 是由 Ricardo CabelloRicardo CabelloRicardo Cabello,公開使用 Mr.doob、mrdoob 等名稱,是圖形程序員、網頁交互創作者和開源 JavaScript 三維圖形庫 Three.js 的創建者。他的工作橫跨演示藝術、瀏覽器實驗、互動音樂項目和圖形工具開發;Three.js 將場景、相機、幾何體、材質等功能整理為可複用的接口,是其持續維護的代表項目。點擊查看完整詞條(Mr.doob)於 2010 年公開發布、由開源社區共同開發的 JavaScript 三維圖形庫。它為網頁中的三維場景提供相機、幾何體、材質、紋理、燈光和渲染等抽象,減少開發者直接編寫底層圖形接口代碼的負擔。項目以 MIT 許可證發佈,官網為 threejs.org,核心代碼庫為 mrdoob/three.js。[1][2][3]
本頁目錄17 節
詞條資料
2010年4月24日首個公開版本
Three.js 的首個公開版本提交記錄為 2010 年 4 月 24 日,提交者為 Mr.doob。首批文件已經包含場景、網格、幾何體,以及 Canvas、SVG 渲染相關代碼。GitHub 倉庫建立時間與這一公開版本提交不是同一事件,項目起點宜採用具有明確提交說明的公開記錄。[2]
Cabello 在 2013 年採訪中解釋,代碼源於此前的 ActionScript 引擎。他希望圖形功能能夠跨項目積累和複用,而不是沿用每做一部演示便重新制作引擎的方式。庫的設計因此突出易用、可擴展的接口,並承認接口演變會給舊應用帶來遷移成本。[5]
2010年早期互動網站與 WebGL 擴展
2010 年的互動音樂項目 The Wilderness Downtown 是 Three.js 的早期應用。創建者在 2015 年回顧中指出,庫承擔了飛鳥及全景場景中的樹木等元素,作品其他部分還使用單獨的 Canvas 實現。該案例展示了三維庫嵌入綜合網頁體驗的方式。[6][7]
同一回顧把早期 WebGL 渲染器的推進歸於貢獻者 alteredqualia,並展示了隨後出現的燈光、反射、折射及模型加載等效果。早期 Three.js 的發展因此既有創建者的基礎設計,也依賴社區把同一場景接口擴展到不同渲染方式。[7]
2011年ROME 推動動畫能力
2011 年 5 月的 ROME / 3 Dreams of Black 進一步使用 Three.js。Cabello 在五週年回顧中說,團隊為項目中的動物變化等視覺需求擴展動畫與變形功能;其同年採訪亦介紹了開放代碼和 BlenderBlenderBlender 是自由開源的三維創作軟件,覆蓋建模、動畫、渲染、二維繪製、合成與視頻編輯等工作流程。它起源於 Ton Roosendaal 為動畫工作室開發的內部工具,2002年轉為開源,由 Blender Foundation 支持並與全球開發者和藝術家社區共同發展。點擊查看完整詞條、Python 等工具參與的製作流程。[6][7][8]
2012年10月CSS3DRenderer
2012 年 10 月 28 日的創建者文章介紹了 CSS3DRenderer 的開發背景:在當時 iOS 的圖形支持條件下,利用 CSS 三維變換呈現全景和元素週期表。實現把網頁元素置入三維排列,並配合觸摸友好的 TrackballControls,說明 Three.js 的場景組織能力並不只服務 WebGL。[9]
2015年五週年回顧與可視化編輯器
FITC 於 2015 年 4 月發佈的五週年演講總結了渲染後端、文檔、動畫與社區貢獻的發展。Cabello 展示了可在瀏覽器中導入模型、組織場景並導出的編輯器,希望讓設計者也能參與制作。這一方向使庫之外出現了輔助創作工具,但庫本身仍負責可組合的圖形能力。[7]
演講還討論了更貼近 GPU 數據形式的 BufferGeometry 整理,以及 Cardboard、設備方向控制和當時實驗性 WebVR 的探索。這些內容屬於 2015 年的技術階段,不能直接作為當代瀏覽器或 XR 支持狀況的說明。[7]
2023年4月r152 調整默認色彩管理
GitHub 於 2023 年 4 月 28 日發佈的 r152 記錄包含一組影響畫面輸出的變化:默認啟用 ColorManagement,以 colorSpace 替代紋理 encoding,以 outputColorSpace 替代 renderer.outputEncoding,並默認輸出 sRGB。升級舊項目時,顏色變亮、變暗或紋理色彩異常可能與這些配置變化有關,需要依據版本遷移說明檢查,而不能只更新包文件。[10]
2024年3月r163 移除 WebGL 1 支持
2024 年 3 月 29 日的 r163 發佈記錄明確移除了 WebGLRenderer 對 WebGL 1 的支持,並清理了示例中的相關代碼。此後使用這一渲染器的現代版本需要 WebGL2;早年介紹中籠統的 WebGL 兼容範圍不能無條件套用到新版本。該版本也增加 Scene.environmentIntensity,並調整 stencil 等默認行為。[11]
2024年公開討論 WebGPU 轉型
2026年6月至7月r185 公告與 Release 記錄
官方 X 賬號在 2026 年 6 月 25 日宣佈 r185 發佈並鏈接到更新日誌;GitHub 的對應 Release 元數據則記錄於 7 月 1 日發佈。截至 2026 年 9 月 6 日核查,GitHub latest release 接口返回的版本仍為 r185。公告日期與倉庫 Release 記錄日期分別保留,不將二者時間差推斷為延期或版本故障。[13][14]
r185 記錄的功能包括 WebGPURenderer 的 WebXR 支持、Forward+ 分簇光照,以及材質反序列化接口等擴展;同時修復了幾何體屬性數量不一致、WebGL 上下文恢復後的幀緩衝狀態、紋理釋放和多項渲染問題。更新日誌逐項標註貢獻者,體現出版本由多人共同完成。[14]
這一版本還停止把 examples/fonts 打入 npm 包,並清理若干棄用代碼。示例、附加組件和依賴文件的分發方式也是遷移檢查的一部分,不能僅憑核心渲染 API 仍可調用就判斷升級完全兼容。[14]
截至2026年9月:場景與渲染模型
Three.js 應用以場景、相機和渲染器的組合為基礎:場景組織要顯示的對象,相機定義觀察視角和可見範圍,渲染器據此生成畫面。場景圖按父子關係組織對象,子對象的變換相對父對象計算,因此移動一組對象時可以保留其內部位置關係。[15]
截至2026年9月:模型資源與擴展
模型加載通過相應格式的加載器完成,許多加載器屬於需要單獨導入的 addons。官方工作流優先介紹 glTF 和 GLB,因為該格式面向運行時資源交付,可攜帶網格、材質、紋理、骨骼、變形目標、動畫、燈光和相機;也提供 FBX、OBJ、COLLADA 等格式的加載路徑。[17]
庫降低了繪製三維內容的門檻,但資源正確託管、模型格式、貼圖配置和場景組織仍影響結果。官方排錯流程建議同時檢查控制台、加載錯誤、模型在其他查看器中的表現,以及資源導出選項,以區分文件問題和渲染設置問題。[17]
截至2026年9月:WebGPU、節點材質與 TSL
WebGPURenderer 默認使用 WebGPU,並可在不支持 WebGPU 的設備上回退到 WebGL2。其節點材質系統與 Three.js Shading Language(TSL)允許用 JavaScript 形式組織著色邏輯,再按後端生成 WGSL 或 GLSL;後處理也採用節點組合,並支持多渲染目標。[4]
遷移不是簡單替換渲染器名稱:官方說明列明,舊有 ShaderMaterial、RawShaderMaterial、onBeforeCompile 自定義方式和 EffectComposer 後處理鏈不能直接照搬,需要轉成節點材質與 TSL。WebGPU 初始化為異步過程,應用也須確保初始化完成後再開始相關渲染。[4]
截至2026年9月:成熟度與性能邊界
截至核查時,官方文檔仍將 WebGPURenderer 標為實驗性,指出部分場景可能缺少功能,或使用 WebGLRenderer 反而性能更好。WebGLRenderer 仍被維護,並是純 WebGL2 應用的推薦選擇;項目的新功能重點則轉向 WebGPURenderer。不能據此宣稱 WebGL 後端已經停用,或 WebGPU 在所有場景都更快。[4]
資源生命週期也是使用邊界。官方說明幾何體、材質和紋理等 GPU 資源需要適時調用 dispose;從場景中移除對象並不自動等同於釋放全部關聯資源。應用若持續切換模型或累積高分辨率紋理,仍須自行管理資源佔用。[18]
截至2026年9月:React 生態及協作
React Three Fiber 是圍繞 Three.js 形成的獨立生態項目,由 Poimandres 的代碼庫維護。它將 Three.js 對象表達為 React 組件,使場景可以隨組件狀態和交互更新;其 README 另列 Drei、glTF 轉 JSX、後處理、XR 和物理集成等工具。這些項目擴展了使用方式,不能與 Three.js 核心庫或創建者個人作品混為一體。[19]
截至2026年9月:許可與安全維護
Three.js 使用 MIT 許可證,允許在保留版權及許可聲明的條件下使用、複製、修改、合併、發佈、分發、再許可和銷售軟件副本。許可同時規定軟件按現狀提供,不作相應擔保。庫的開放許可不自動覆蓋應用另行使用的模型、音樂、字體或其他第三方素材。[3]
項目安全政策要求將漏洞私下報告給維護方,並提供影響與復現信息,避免修復前公開細節。維護方說明項目由志願者按合理努力原則維護,請求在公開披露前給予 90 天修復時間。這是維護流程的說明,不構成固定修復期限或不存在漏洞的保證。[21]
來源
- Three.js 官方代码库与 README(在新窗口打開)
- Three.js 首个公开版本提交(在新窗口打開)
- Three.js MIT License(在新窗口打開)
- WebGPURenderer(在新窗口打開)
- Interview with three.js Creator(在新窗口打開)
- Ricardo Cabello:个人作品与演讲年表(在新窗口打開)
- Ricardo Cabello (Mr doob) — 5 years of three.js(在新窗口打開)
- Interview with Mr Doob(在新窗口打開)
- CSS3DRenderer:原 2012 年 Google+ 文章存档(在新窗口打開)
- Three.js r152 release(在新窗口打開)
- Three.js r163 release(在新窗口打開)
- Moving Three.js from WebGL to WebGPU — Mr.doob(在新窗口打開)
- Three.js:r185 发布公告(在新窗口打開)
- Three.js r185 release(在新窗口打開)
- Three.js Fundamentals(在新窗口打開)
- Creating a scene(在新窗口打開)
- Loading 3D Models(在新窗口打開)
- Cleanup(在新窗口打開)
- React Three Fiber README(在新窗口打開)
- Three.js 的公开 X 资料(在新窗口打開)
- Three.js Security Policy(在新窗口打開)