2026年6月29日 星期一

Just talking

在 3D 繪圖 API 領域裡, 老舊的 OpenGL 已經漸漸被遺棄, 由 Vulkan 取而代之. Apple 主推自家的 Metal, Microsoft 也早有 Direct3D. 似乎沒有能跨平台的繪圖函式庫了.

對於只熟悉 OpenGL 語法的我而言, 原本只想在 Flutter 使用 OpenGL 繪製 3D 模型, 複習 3D 繪圖. 然而搜尋一下 pub.dev, 關於 OpenGL 的套件, 都許久未更新. 偶然發現了 ANGLE (Almost Native Graphics Layer Engine), 這個由 Google 設計的 OpenGL 轉譯平台, 正好完美符合需求. 可以使用 OpenGL 語法, 將其自動轉譯為 Vulkan, Metal, Direct3D.

flutter_angle 這個套件開啟了 ANGLE 的入口, 於是想嘗試看看, 號稱跨平台的 Flutter, 能否完成 OpenGL engine 重生計劃. 在 Unity, Unreal 引擎如此優秀的時代, 想自己手搓一個 3D 引擎的人也不多吧.

早在 2011年起, 就開發一個基於 OpenGL ES2 的繪圖引擎(C++), Gouraud shading, Phong Shading, CubeMap, ShadowMap, Water Effect, Fog, NormalMap, vertex shader, fragment shader 這類的技巧也都做過一遍. 經過十多年卻也忘得差不多了.

2022年底 chatGPT 開啟了 AI 大門, 才短短幾年, AI Agent 也發展到能協作程式設計的工作. 誠所謂溫故知新, 於是就有了重啟 3D 引擎的計劃. 既然 Flutter 也沒有一個合用的 3D 引擎, 那就捲起袖子自己來吧, 有些事現在不做的話, 就再也不會做了. 這就是 macbear_3d 研發之路.



Flutter 開發歷程 Macbear
時間 里程碑
2023-05 AppFlutter App 開發啟動,使用 VS Code
2023-12 AppFlutter App 正式上架(iOS / Android)
2025-09 macbear_3d基於 Google ANGLE 的 3D 引擎開始開發,使用 VS Code
2025-11 ToolingGoogle Antigravity 1.0 導入,取代 VS Code
2026-04 rapier_physics基於 Rapier 的物理引擎開始開發
2026-05 ToolingGoogle Antigravity IDE 2.0 升級(自 Antigravity 遷移)


macbear_3d Changelog
版本 日期 主要更新
0.9.1 2026-06-19 Shader 模組化 .glsl 系統、型別安全 Shader 包裝器、程序化水面法線貼圖、16-bit 高度圖地形、M3Fog 霧效
0.9.0 2026-05-24 RenderingPhysics M3Water(雙層法線貼圖、Fresnel)、M3PlanarReflection、M3RenderContext、切換至 Rapier 物理引擎
0.8.1 2026-05-02 Rendering PCF 柔和陰影、M3Node 場景圖層次管理、重構 M3Entity / M3Transform
0.8.0 2026-04-17 PhysicsPlatform M3OimoPhysics、Android 自動選擇 Vulkan / OpenGLES、移除 dart:io 依賴 — pubspec 首次宣告 Windows
0.7.2 2026-04-12 Platform 轉為 Flutter plugin(原生視訊紋理)、合併 m3_video_bridge、M3Axis 幾何方向擴展
0.7.1 2026-03-20 Add BVH 動作捕捉格式支援、M3OctahedralGeom 骨骼視覺化、字型移至套件 assets
0.7.0 2026-03-04 Rendering 升級至 OpenGL ES 3.0(GLSL 3.00)、M3ReflectionProbe 動態反射、PlatformInfo / GraphicsInfo
0.6.1 2026-02-21 Platform Web build 支援上線、GitHub Pages Live Demo 自動部署
0.6.0 2026-02-11 Rendering PBR(Metallic / Roughness)、IBL、Perlin Noise 地形系統、模組化 Shader 架構
0.5.0 2026-01-29 Rendering Cubemap 環境反射(renderReflection)
0.4.0 2026-01-24 Add Skinned Mesh 骨骼動畫、M3Animator、Delta timing 精準計時
0.3.0 2026-01-17 Rendering CSM 最多 4 段 cascade、Bounding Sphere 計算、Texel Snapping 消抖動、前向面 Shadow Pass
0.2.0 2026-01-12 Add 3D 文字(TTF / OTF → M3TextGeom)、AABB + Bounding Sphere、Resource Manager、Render Stats
0.1.1 2026-01-02 Add UML 圖表、截圖素材
0.1.0 2026-01-02 初始版本 OpenGL ES / Scene Graph ECS / glTF + OBJ / Oimo Physics、基礎光照陰影


rapier_physics Changelog
版本 發布日期 主要更新
0.4.0 2026-06-27 Platform Windows 平台支援(C++ plugin、CMake、rapier_ffi.dll)、Swift Package Manager 支援(iOS/macOS)、建置腳本自動化
0.3.1 2026-05-07 API Timestep getter/setter、FFI 命名統一為 rapier_[component]_[action]、ColliderDesc 參數順序修正(radius, halfHeight)
0.3.0 2026-05-01 Architecture 統一 ColliderDesc API、Native local transform(localPosition / localRotation)、FFI 記憶體佈局優化(64 bytes 零拷貝)、移除冗余 createBoxCollider 等方法
0.2.0 2026-04-23 Physics Force / Impulse API、速度直接控制、動態移除 RigidBody / Collider / Joint、CCD 支援、Heightfield 碰撞體、Cone 碰撞體、關節系統(Fixed / Spherical / Revolute / Prismatic / Rope)、Motor 控制、rapier3d v0.32.0 升級
0.1.0 2026-04-08 Add 跨平台架構重構(Native / Web 抽象綁定)、完整 WASM 實作(dart:js_interop)、Android jniLibs 修正、非同步 init()、多種 RigidBodyType 支援

2026年6月19日 星期五

macbear_3d 0.9.1 正式發佈 水面渲染與場景霧效全面升級

macbearchen.github.io/macbear_3d 在新分頁開啟 ↗

歷經多個版本的迭代,macbear_3d 0.9.1 正式上架 pub.dev。這次更新是引擎架構自 0.8.x 以來最大幅度的進化,涵蓋了完整的即時水面效果以及全新的場景霧效系統。

🌊

即時水面渲染(M3Water)

  • 雙層動態法線貼圖流動:以不同速度與方向捲動兩張法線貼圖,模擬自然水波紋理,支援執行期程序化生成。
  • 平面反射與折射(M3PlanarReflection):採用 FBO 離屏渲染,配合斜近截面裁切(oblique clipping plane)技術,精準裁除水面以下的反射內容,消除傳統 Cubemap 反射在大型平坦表面的視差誤差。
  • Schlick Fresnel 模型:依視角動態混合反射與折射比例,模擬真實水面的光學行為——淺角度看水面呈現強反射,垂直往下看則趨向透明。
  • 霧深水下著色:相機潛入水面以下時自動切換為水下深度衰減的顏色吸收效果。
  • 可配置波紋失真:反射與折射的 UV 偏移量可調整,讓水面波動視覺效果靈活控制。
macbear_3d 場景展示動畫

🌫️

場景霧效(M3Fog)

  • 相機朝向深度衰減:以相機正前方為軸計算深度,避免傳統球形霧在大視角下的不自然截面感。
  • 自訂顏色設定:可分別設定霧的顏色與起始/終止距離。
  • 自訂裁切平面:配合水面使用時,可傳入水平面方程式作為裁切平面,實現水下區域獨立的顏色吸收,模擬光線在水中的衰減。

資源連結

Macbear 3D — OpenGL can, I will.