2026年10月31日 星期六

Flutter rapier_physics 0.6.0 更新!

底層基於 Rust 官方的 Rapier3D 與 WebAssembly,這次版本正式帶來了賽車與載具必備的 Raycast Vehicle 車輛物理控制器,讓大家在 Flutter 裡能輕鬆打造具備真實懸吊回饋的 3D 車輛!

Physics Demos

🌟 0.6.0 重點特色

  1. 射線車輛控制器 (VehicleController)
    • 封裝 Rapier 經典的 DynamicRayCastVehicleController。
    • 採用射線檢測模擬輪胎接觸,避免實體輪胎碰撞卡死或穿模,運行效率高且穩定。
  2. 真實懸吊調校 (WheelTuning)
    • 支援各輪獨立設定懸吊剛性 (Stiffness)、阻尼壓縮/回彈 (Damping)、行程 (Travel)、輪胎抓地力 (Friction Slip) 與最大懸吊力。
    • 內建 WheelTuning.car() 預設參數,開箱即有逼真手感。
  3. 完整車輛控制與狀態查詢
    • 獨立控制轉向角 (setSteering)、馬達動力 (setEngineForce) 與煞車 (setBrake),並可隨時讀取車速 (currentSpeed)。
    • 提供實時狀態 (WheelState):取得各輪胎著地狀態、接地法線、懸吊壓縮長度、輪胎 3D 位置與自轉/轉向角度,與視覺 3D 模型無縫同步。
  4. 全新 3D 高程地形越野 Demo
    • 新增 Demo 7(HeightfieldScene):4WD 四輪驅動車馳騁在高低起伏的地形(波浪、漣漪、圓弧回圈)。
    • 具備第三人稱追蹤鏡頭、螢幕虛擬油門/方向盤/煞車操作面板,以及鍵盤駕駛 (WASD / 方向鍵、空白鍵煞車、R 鍵翻車重置)。

🌐 線上試玩與專案連結

各大平台預編譯二進制庫(iOS/macOS XCFramework、Android .so、WebAssembly)皆已同步更新,無需配置 Rust 環境即可直接體驗!

2026年10月17日 星期六

Macbear 3D 0.12.0 更新:帶來 HDR、Bloom 與 FXAA 視覺升級

Release v0.12.0

Macbear 3D 是一個基於 Google ANGLE (OpenGL ES 3.0) 的 Flutter 輕量高效能 3D 引擎。最新 v0.12.0 著重於渲染管線重構,帶來更細膩逼真的視覺後處理體驗。

🌟 本次更新重點

  • 全面支援 HDR 渲染管線 (RGBA16F)
    緩衝區全面升級為 16-bit 浮點數精度,光照全程於線性空間運算,告別高光斷階。
  • 物理級 Bloom 泛光效果
    導入 UE4 風格 Soft-Knee 高光萃取與 5-tap 高斯可分離模糊,呈現柔和自然的發光質感。
  • FXAA 快速抗鋸齒 (M3FxaaPass)
    透過邊緣亮度偵測進行次像素平滑,以極低的 GPU 負載消除邊緣鋸齒。
  • 豐富的色調映射模式 (Tonemapping)
    內建 ACES Filmic、Khronos PBR Neutral、Reinhard 等曲線,並支援動態 exposure 曝光值即時調節。
  • 控制面板模組化重構
    範例中的後處理、霧效及著色器選單已封裝為獨立 Flutter Widget,便於快速自訂與整合。

2026年10月1日 星期四

Macbear 3D 0.11.0 發布

Macbear 3D 0.11.0 PBR 渲染截圖

✨ 新增功能

  • sRGB 紋理支援 — 硬體 GPU 自動 sRGB→線性色彩空間轉換,涵蓋 2D、ASTC 壓縮紋理與 glTF baseColor 貼圖
  • 切線空間法線貼圖 — 完整 TBN 矩陣管線,支援所有幾何體的逐像素法線光照
  • glTF PBR ORM 紋理 — 打包式 AO / Roughness / Metallic 紋理,GGX 物理正確;M3GltfMaterial 自動解析
  • 深度預通道(Depth Pre-Pass) — Early-Z 遮擋剔除,減少 Overdraw
  • 雙面材質(Double-Sided) — M3Material.doubleSided,自動管理 GL 面剔除;glTF 自動解析
  • 遮罩面 / Alpha Cutout — 可設定 alphaCutoff 閥值,專屬著色器變體 programTextureMasked / programShadowMasked / programUnlitMasked
  • PBR 獨立光源顏色 — uLightColor Uniform 解耦方向光顏色與表面 Diffuse
  • 可設定 CSM 層數 — M3ShaderOptions.csmCount,執行期支援 1–4 層陰影級聯

⬆️ 升級

dependencies:
  macbear_3d: ^0.11.0

🌐 線上演示:macbearchen.github.io/macbear_3d  |  ☕ 贊助:Ko-fi  |  📋 完整更新日誌

2026年9月6日 星期日

【Flutter 3D 引擎】Macbear 3D v0.10.1 重磅發佈:聚光燈陰影 (Spotlight Shadow)、地形 LOD 邊界縫合、Rapier 物理展示與 glTF 模組化全面進化!

各位關心 Flutter 與跨平台 3D 開發的夥伴們,很高興向大家宣布:Macbear 3D 渲染引擎 v0.10.1 正式發佈!🎉

Macbear 3D 是專為 Flutter 打造的高效能輕量級 3D 渲染引擎,底層基於 Google ANGLE (OpenGL ES 3.0)。在經歷了 v0.9.x 的架構沉澱與地形系統基礎建設後,v0.10.1 帶來了幾項里程碑等級的重大突破: 聚光燈與聚光燈陰影貼圖 (Spotlight & Spot Shadow Mapping)、多級地形細節 (LOD) 與無縫邊緣縫合 (Stitching)、全面升級的 Rapier 物理展示場景,以及 glTF 解析器的模組化重構。

Macbear 3D v0.10.1 Preview

▲ 支援聚光燈、動態陰影、多光源與 PBR 渲染的 Macbear 3D 引擎畫面


🌟 v0.10.1 重點更新深度解析

1. 🔦 聚光燈與聚光燈陰影貼圖 (Spotlight & Spot Shadow Mapping)

在 v0.9.3 實現了多點光源優化之後,許多開發者引頸期盼的「探照燈 / 聚光燈」終於正式登場!

  • 錐體光束與平滑邊緣:新增 M3SpotLight,具備精確的內切角 (inner cutoff) 與外切角 (outer cutoff),提供自然的邊緣柔和過渡與基於距離的衰減模型。
  • 聚光燈動態陰影:實作了專屬的聚光燈陰影貼圖矩陣轉換 (Shadow Matrix) 與視錐透視投影。
  • 共用 PCF 濾波著色器:聚光燈陰影與現有的平行光陰影共享高效的 PCF (Percentage Closer Filtering) 柔和陰影核心演算法 (LightFS.es3.glsl, ShadowFS.es3.glsl, ShadowVS.es3.glsl),不僅消除了鋸齒,也兼顧了效能與記憶體開銷。

2. 🏔️ 地形 LOD (Level of Detail) 與防裂縫邊界縫合 (Edge Stitching)

在大型室外場景中,若全地圖都以高解析度網格渲染,對 GPU 頂點處理將會是沉重的負擔。瓦片地形系統 (Tiled Terrain) 迎來了關鍵升級:

  • 四級 LOD 網格切換:地形瓦片現在支援動態解析度等級(32×32 → 16×16 → 8×8 → 4×4 網格面數遞減)。遠處瓦片大幅減少面數,近處保持細膩起伏。
  • 邊界無縫縫合 (Edge Stitching):當高解析度 Tile 與低解析度相鄰 Tile 拼接時,傳統技術容易出現因頂點無法對齊而形成的露底「裂縫 (T-Junction gaps)」。Macbear 3D 在邊界頂點處進行了自動約束縫合運算,保證視角推移時地表依舊無縫貼合。

3. ⚙️ Rapier 物理引擎全面整合與五大經典範例場景

為了展現與高效能物理引擎 Rapier3D (結合 rapier_physics) 的深度整合,本次重構了物理引擎的架構,並一口氣增加了 5 個完整的經典物理示範:

  • 雙擺系統 (DoublePendulumScene):展現剛體關節約束 (Joints) 與高敏混沌運動的高精確模擬。
  • 牛頓擺 (NewtonCradleScene):精準的彈性碰撞衝量傳遞與動量守恆展現。
  • 複合碰撞體 (CompoundScene):展示多個 Collider 組合成單一剛體的物理動態。
  • 射線與場景查詢 (SceneQueryScene):示範 Raycast 射線檢測與空間查詢能力。
  • 架構簡化:將常用的空間圍牆與邊界防護生成機制收斂至 BaseScene,大幅降低開發者編寫物理場景的樣板程式碼。

4. 📦 glTF 解析器架構模組化重構

原本集中的 glTF 載入邏輯完成了全面解耦重組:

  • 拆分為 M3GltfDocument、M3GltfNode、M3GltfMesh、M3GltfMaterial 與 M3GltfAnimation 獨立領域物件。
  • 程式碼可讀性、維護性與記憶體模型大幅提升,為後續擴充自訂材質延伸規格 (KHR Extensions) 與更複雜的骨骼動畫奠定了穩固地基。
  • 同時將 Flutter 相容版本更新支援至 3.47.0。

5. ☕ 贊助專案與社群支持

Macbear 3D 是個人歷經無數個夜晚與週末打造的開源專案。在此版本中正式加入了 Ko-fi 贊助連結 與徽章。如果您覺得這個專案對您的 Flutter 3D 專案有所啟發或幫助,非常歡迎透過 Ko-fi 請作者喝杯咖啡,這將會是推動專案持續前進的巨大動力!☕


🚀 快速升級指南

在您的 pubspec.yaml 中更新至最新版本:

dependencies:
  macbear_3d: ^0.10.1

🌐 相關連結與資源


感謝所有關注 Macbear 3D 的開發者!Happy Coding with Flutter & 3D!

2026年8月26日 星期三

🚀 Flutter 3D 物理引擎 rapier_physics v0.5.3 正式發布!全面升級與穩定性強化

在 Flutter 中打造流暢的 3D 遊戲與互動體驗,強大而精準的物理模擬是不可或缺的基石。rapier_physics 結合了 Rust 高效能物理引擎 Rapier3D 與 Flutter 多平台生態,支援 iOS、macOS、Windows、Android 與 Web。

今天我們很高興宣布 rapier_physics v0.5.3 正式發布!這個版本帶來了底層原生引擎升級、Web 平台切換防護以及建置管線的全面精簡。

rapier_physics demos

🎮 線上即時體驗(Live Demo)

可以直接在下方即時操作體驗 3D 物理模擬與角色控制效果:

💡 提示:若無法正常顯示,您也可以直接點擊前往體驗 👉 線上展示網頁


✨ 0.5.3 核心更新亮點

1. ⚙️ 底層物理核心升級:Rapier3D v0.35.2

我們將底層原生 Rust 引擎依賴全面升級至最新的 rapier3d v0.35.2(以及碰撞檢測庫 parry3d v0.30.2):

  • 提供更極致的物理運算效能與記憶體優化。
  • 提升多物體堆疊、關節約束(Joints)與連續碰撞檢測(CCD)的穩定性與精度。

2. 🌐 Web/WASM 場景切換防護(修復 unreachable 崩潰)

在 Web (WebAssembly) 環境下,當使用者在多個 3D 物理場景間頻繁切換時,過往可能因 WASM 生命週期重複初始化導致舊控制代碼引發 unreachable 執行時期錯誤:

  • 0.5.3 加入了全新的 WASM 重新初始化防護機制,確保在單頁應用(SPA)中動態切換、重建物理場景依然穩如磐石。

3. 📦 建置腳本與 Web 產物路徑重構

  • 重構建置流程,讓 Web 相關產物直接輸出至 web/ 與 example/web/。
  • 移除了冗餘的 prebuilt/web 目錄,使專案結構更乾淨、發布與測試流程更順暢。

4. 🧹 程式碼日誌清理

  • 移除了 RapierWorld 中的額外 Debug Print 調試輸出,讓開發者的 Console 保持乾淨清晰。

🌟 近期版本特色回顧 (0.5.0 ~ 0.5.2)

  • 🏃 運動學角色控制器 (Kinematic Character Controller):支援 3D 角色物理導航、自動攀爬階梯、斜坡滑動、貼地吸附與推動動態物體。
  • 🎯 場景查詢 (Scene Query API):完整的射線投射(castRay、castRayAndGetNormal)與形狀投射(castShape),並支援自訂過濾器旗標(QueryFilterFlags)。
  • 🛡️ 安全的生命週期管理:提供 dispose()` 與加固的 `destroy()` 流程,杜絕原生記憶體洩漏與重複釋放(double-free)。

📦 立即開始使用

在您的 Flutter 專案 pubspec.yaml 中新增依賴:

dependencies:
  rapier_physics: ^0.5.3

或直接透過終端機安裝:

flutter pub add rapier_physics

歡迎前往 GitHub 查看更多 3D 互動範例(包含角色控制器、雙擺、牛頓擺、複合剛體與場景查詢):
👉 GitHub 專案庫:macbearchen/rapier_physics

2026年8月1日 星期六

Macbear 3D v0.9.4

【Flutter 3D 引擎】Macbear 3D v0.9.4 正式發佈:瓦片地形系統、安全視圖切換與效能統計躍進!

"OpenGL can. I will."

「OpenGL 能,我來。」

親愛的 Flutter 與 3D 開發者們,很高興向大家宣佈 Macbear 3D 渲染引擎 v0.9.4 版本正式發佈!

Macbear 3D 是一套專為 Flutter 打造的高效能輕量級 3D 渲染引擎,底層基於 Google ANGLE (OpenGL ES 3.0),旨在解決 Flutter 在跨平台 3D 場景開發中的效能瓶頸與開發體驗。

在最新的 v0.9.4 版本中,我們帶來了全新的分塊瓦片地形系統 (Tiled Terrain)、安全視圖卸載/重新掛載機制 (Unmount/Remount),以及多項幾何體與渲染統計優化。


🌟 v0.9.4 重點更新特輯

1. 🏔️ 全新瓦片地形系統 (Tiled Terrain & LOD)

為了支援更大規模、更細緻的 3D 地貌景觀渲染,v0.9.4 推出了 M3TerrainTileGeom 與 M3TiledTerrain:

  • 分區與瓦片渲染 (Chunked / Tiled Rendering):將大型地形分割為多個獨立 Tile,利於未來實現動態視錐體裁剪與分級細節 (LOD) 載入。
  • 高度圖構建優化:新增 M3HeightField.fromHeightmap,並使用 package:image 完全重構 M3TerrainGeom.fromHeightmapImage,支援 8-bit RGBA 以及高精度 16-bit 灰階 PNG 高度圖,帶來更平滑的雙線性插值地形起伏。

2. 🔄 視圖生命週期安全切換 (unmount / remount)

在 Flutter 的聲明式 UI 架構中,頁面切換、Tab 標籤切換或 Widget 的銷毀與重建是常態。

  • 以往的挑戰:銷毀 M3View 時若一併釋放 M3AppEngine 單例,會導致 OpenGL / ANGLE Context 破壞,再次掛載時容易出現 Context 不一致或貼圖失效的問題。
  • v0.9.4 的解法:解耦了 M3View 與引擎單例生命週期。當頁面離開時調用 unmount() 僅暫停渲染迴圈與 Ticker,保留 GPU 紋理與上下文;當 Widget 重新進入畫面時調用 remount() 瞬間恢復渲染,無縫且高效!

3. ✏️ 自訂線條幾何體 (M3LineGeom) 與幾何建構式優化

  • 3D 線段繪製:新增 M3LineGeom 類別,方便開發者繪製自訂 3D 軌跡、路徑、輔助網格線與 Wireframe。
  • 幾何體參數優化:改進了 M3CylinderGeom (圓柱體) 與 M3CapsuleGeom (膠囊體) 的建構式參數,設置更加靈活直覺。
  • 世界包圍盒計算:子網格新增 subMeshes.worldBounding 世界坐標包圍盒計算,精準提升碰撞與裁剪判定能力。

4. 📊 精確的渲染數據統計 (M3RenderStats)

在效能調優時,精確的數據至關重要。v0.9.4 重構了 M3RenderStats 結構:

  • 將原本的 culls 欄位調整為 submeshes,精確統計與監控當前幀實際繪製的 SubMesh 數量、面數 (Triangles) 與 頂點數 (Vertices)。

🔮 未來展望 (Roadmap)

Macbear 3D 將持續深耕 Flutter 3D 渲染領域,未來的計畫包括:

  • 🔦 多探照燈/聚光燈系統:支援最多 8 個探照光 (Spotlight),提供錐形照射範圍、衰減邊緣與獨立方向控制。
  • 🏔️ 地形 LOD 動態裁切進一步優化:結合視錐體動態加載與 GPU 著色器層級無縫拼接。
  • 🎨 更多 PBR 材質效果與 Shader 擴充:支援更豐富的表面質感與環境光遮蔽 (AO)。
  • 🕹️ 更豐富的物理引擎碰撞與角色控制整合:擴充剛體互動與 Character Controller 操作體驗。

歡迎大家下載體驗並提出建議!有任何問題或想法,歡迎在 GitHub 提交 Issue 或 Discussion。


感謝每一位支援與使用 Macbear 3D 的開發者!Happy Coding with Flutter & 3D!

2026年7月16日 星期四

macbear 3d 0.9.3 支援八個點光源

macbear_3d
RELEASE NOTES · 2026.07.15

把點光源,
做到位。

0.9.3 沒有加新的光源類型,只把點光源的衰減公式、除錯輔助線到座標正確性,一路重新校準了一遍——外加一支遲來已久的 console logger。

📅 2026-07-15 ⚖️ MIT License 🎯 OpenGL ES 3.0 · ANGLE
dependencies:
  macbear_3d: ^0.9.3


// 前情提要

先講清楚,這次在修什麼

從 0.9.1 開始的三個版本,其實一直在為同一件事鋪路。

0.9.1
著色器管線模組化shader refactor
Fog / Shadow / Water 拆成獨立 .glsl 檔案,各自配上型別安全的 Dart wrapper(M3FogShader、M3ShadowShader…)。
0.9.2
光源系統換骨架light system
M3Light / M3DirectionalLight 改用內部 viewer 委派,不再直接繼承 M3Camera——多光源前必須先解開的耦合。
0.9.3
點光源全面校準← 這個版本
骨架搭好了,這次輪到點光源本身:衰減公式、輔助線、座標系統的正確性。
// 效能與精度

先解決最基本的問題:距離的平方根

教科書式的點光源衰減,得先開根號算出實際距離,再拿去做反平方——sqrt 在單次呼叫不貴,但乘上場景裡每個像素、每一顆點光源,就開始有感。0.9.3 直接比較距離平方跟半徑平方,省掉開根號;衰減公式也換成 UE4 那套 windowed inverse-square:光源在有效半徑邊界會平滑收斂到 0,不像傳統反平方公式在近距離爆掉、在邊界外也停不下來。

傳統反平方(無邊界) windowed inverse-square(0.9.3 採用)
d/range = 0.30 · I = 0.00
// 兩條線都正規化到 d=0 時強度為 1,純比較衰減的「形狀」——傳統反平方在邊界外仍大於 0,windowed 版本會準時收斂到 0
// 除錯輔助線

燈泡跟它的射程,現在分開畫

編輯器裡的光源輔助線工具,原本 drawBulb(燈泡本體)跟 drawHelper(有效範圍球)是綁在一起的邏輯;這次拆開,兩者可以獨立控制是否顯示。場景裡光源一多,只想看射程或只想看燈泡位置時會方便不少。

drawBulb() drawHelper()
// 座標正確性

位置跟法線,現在是明確傳進去的

LightFS 裡的點光源計算,更新成接收明確的位置與法向量兩個輸入,並處理物體空間縮放的校正(uInvObjScale)。如果 mesh 做了非等比縮放,點光源的照射方向跟法線計算才不會跟著跑掉。

概念示意 · 非實際原始碼
// before — 隱含依賴外部狀態
vec3 lit = pointLight(worldPos);

// after — 明確傳入位置、法線與物體縮放校正
vec3 lit = pointLight(worldPos, worldNormal, uInvObjScale);
// 新工具

終於有一支像樣的 logger

在這之前,debug 訊息大概就是散落各處的 debugPrint。lib/src/util/log.dart 現在多了 M3Log,統一處理 debug / info / warning / error / system / highlight 六個層級,帶 ANSI 顏色——終端機裡一眼就能分辨層級。

[DEBUG]M3Log initialized · ANSI: enabled
[INFO]Scene loaded · 5 490 verts
[WARNING]Light count (33) exceeds recommended budget
[ERROR]Texture not found: water_normal_02.png
[SYSTEM]ANGLE backend: Metal · ES 3.0
[HIGHLIGHT]macbear_3d 0.9.3 ready

接下來

這個版本刻意把範圍收窄,只做點光源這一件事——夠小,才敢一次校準這麼多細節。下一步繼續往多光源前進,shadow-per-light 的策略也還在想怎麼決定,才不會之後又要重拆一次介面。

dependencies:
  macbear_3d: ^0.9.3