Chuyển đến nội dung chính

Flutter GPU và 3D: Impeller đã mở khoá gì, và đi được tới đâu

Hệ quả thú vị nhất của Impeller không phải cuộn mượt hơn. Mà là Flutter giờ có một backend render đủ hiện đại để phơi ra một API đồ hoạ cấp thấpflutter_gpu — và một engine 3D thật đã được dựng lên trên nó.

Giờ khi Impeller là renderer mặc định trên mọi nền tảng trừ web, tầm với của API đó rộng hơn bao giờ hết. Bài này nói về thứ thực sự tồn tại hôm nay, và ranh giới hiện tại giữa “demo ấn tượng” với “ship được”.

Flutter GPU là gì

flutter_gpu là một API mỏng, cấp thấp, đặt trên các nguyên thuỷ render của Impeller — command buffer, render pass, texture, và shader pipeline. Nó không phải scene graph và không phải widget. Nó là tầng bạn dùng khi muốn vẽ thứ mà API vẽ của Flutter không diễn đạt được: renderer tuỳ biến, hệ hạt, hậu xử lý, 3D.

Shader được viết riêng và biên dịch thành shader bundle lúc build, dùng flutter_gpu_shadersbuild_runner. Điều đó nhất quán với toàn bộ triết lý của Impeller: trả chi phí biên dịch lúc build, không bao giờ giữa khung hình.

Mô hình tư duy dễ nhớ: CustomPainter cho bạn một canvas, FragmentProgram cho bạn một tầng shader trên một hình chữ nhật, còn flutter_gpu cho bạn cả cái pipeline.

flutter_scene: engine nằm ở trên

Viết code GPU thô không phải thứ phần lớn lập trình viên muốn. flutter_scene — do publisher đã xác minh bdero.dev phát hành, hiện ở 0.20.0 — tự mô tả là một engine 3D thời gian thực linh hoạt cho game và app Flutter, với model glTF, physics, skeletal animation, và ánh sáng PBR.

API có hình dạng đúng như một lập trình viên Flutter mong đợi:

  • SceneView — widget bạn thả vào cây để render một scene
  • SceneNode, SceneMesh, SceneModel — API widget khai báo cho nội dung scene
  • Import glTF lúc chạy, hoặc bản nhị phân .fsceneb đã chuyển đổi trước lúc build
  • .fscene làm định dạng mô tả scene, có hỗ trợ prefab

Cặp cuối cùng quan trọng với app thật. Phân tích glTF lúc chạy thì tiện khi phát triển và đắt lúc khởi động; đường .fsceneb chuyển đổi trước mới là thứ bạn ship.

Độ phủ nền tảng bám theo Impeller — iOS, Android, macOS, Windows, Linux — cộng thêm web qua WebGL2, điều đáng chú ý vì bản thân Impeller vẫn chưa có cho Flutter Web.

Thiết lập

Việc thiết lập rắc rối hơn một package thông thường, vì cả native asset lẫn quyền truy cập GPU đều phải bật:

flutter config --enable-native-assets
flutter config --enable-dart-data-assets   # tuỳ chọn, cho DataAssets

flutter create . --platforms=macos,ios,android,linux,windows,web

flutter run --enable-flutter-gpu --enable-impeller

Thứ sẽ chặn bạn lại: flutter_scene hiện yêu cầu channel master của Flutter, không phải stable. Bản 0.19.0 cần một build master từ ngày 09/06/2026 trở đi để có hỗ trợ render-to-mip-level. Đó là dữ kiện quan trọng nhất trong bài này cho việc lập kế hoạch.

Thực sự làm được tới đâu

Các demo cộng đồng là bằng chứng trung thực ở đây, và chúng thuyết phục hơn con số phiên bản gợi ý. Brandon DeRosier — tác giả của flutter_scene — đã trình diễn một Scene Editor chạy trên Flutter 3.47 stable, và một bản port demo Third Person Shooter của Godot: khoảng 617 MiB nội dung đã nấu, 1.795.763 đỉnh duy nhất, 659.079 tam giác duy nhất, và 320 collision mesh, render qua Flutter GPU và Impeller.

Cách anh diễn đạt mới là phần đáng nhắc lại: không fork, không platform view, không ngữ cảnh render phụ. Đây không phải một view Unity nhúng trong app Flutter. Đây là chính stack đồ hoạ của Flutter vẽ ra scene, nghĩa là nội dung 3D và widget của bạn dùng chung một compositor, một ngân sách khung hình, và một pipeline nhập liệu.

Các lập trình viên khác ghi nhận flutter_gpu cộng Impeller render cỡ 20.000 ảnh ở khoảng 120fps trên nhiều nền tảng — mức thông lượng trước đây đơn giản là không diễn đạt được qua tầng widget.

Chọn giữa các tầng

Bạn muốnDùngĐộ chín
Vẽ 2D tuỳ biếnCustomPainterỔn định, mọi nơi
Một fragment shader tuỳ biếnFragmentProgramỔn định
Renderer tuỳ biến, hệ hạt, hậu xử lýflutter_gpuCấp thấp, đang tiến hoá
Scene 3D đầy đủ, glTF, PBR, skeletal animationflutter_scene0.20.0, channel master
Một game engine đầy đủ kèm hệ sinh thái editorUnity / Godot / UnrealChín muồi, stack riêng

Hãy đọc bảng đó như một cái thang, và lấy bậc thấp nhất giải được vấn đề của bạn. Phần lớn app đòi “3D” chỉ muốn một model sản phẩm xoay được hoặc một hình ảnh hoá dữ liệu, và flutter_scene xử lý thoải mái. Rất ít nơi thật sự cần một engine.

Đánh giá độ chín một cách trung thực

Những điều đúng thật hôm nay: stack đồ hoạ là thật, các con số hiệu năng là thật, và câu chuyện tích hợp — một compositor, không platform view — tốt hơn mọi cách nhúng khác.

Những điều cần cân trước khi đặt cược lộ trình vào nó:

  • Yêu cầu channel master nghĩa là không có bảo đảm của kênh stable, không có cửa sổ hỗ trợ dài hạn, và có rủi ro thật là hỏng vào bất kỳ ngày nào.
  • Đánh số 0.x nghĩa là API có thể đổi dưới chân bạn.
  • Package là dự án cộng đồng của một publisher cá nhân, không phải sản phẩm được Google hỗ trợ. Khảo sát Q2 2026 cho thấy lập trình viên tin các tính năng cộng đồng “thử lửa” ở mức 41% so với 26% cho tính năng do Google xây, nên đó không tự động là điểm trừ — nhưng là mô hình hỗ trợ khác.
  • Tooling còn mỏng. Có một Scene Editor, nhưng chưa có gì giống hệ sinh thái của Unity.

Nếu bạn muốn thử

  1. Chuyển một project nháp sang channel master. Đừng làm việc này trong repo production.
  2. Bật native asset và sinh platform stub bằng các lệnh ở trên.
  3. Chạy với --enable-flutter-gpu --enable-impeller và xác nhận bạn có một khung hình trước khi viết code thật.
  4. Bắt đầu với flutter_scene, không phải flutter_gpu thô. Thả một SceneView vào và nạp một model glTF.
  5. Chuyển đổi trước asset sang .fsceneb ngay khi bạn quan tâm tới thời gian khởi động.
  6. Profile trên thiết bị đích tệ nhất từ sớm — công việc nặng GPU làm lộ khác biệt phần cứng nhanh hơn nhiều so với code widget.
  7. Ghim commit hash của Flutter trong CI, vì master đổi hàng ngày.

Kết luận

Flutter GPU là bằng chứng rõ nhất rằng Impeller là một khoản đầu tư kiến trúc chứ không phải bản vá hiệu năng. Một lập trình viên đơn lẻ dựng được một engine 3D đáng tin lên trên nó — engine port được demo Godot 1,8 triệu đỉnh mà không cần fork framework — nói lên nhiều điều về cái nền móng hơn mọi release note. Chỉ cần tỉnh táo về hiện trạng: đây là stack chạy channel master, phiên bản 0.x, do cộng đồng duy trì. Hãy nhiệt tình prototype trên nó. Chỉ ship trên nó nếu bạn thoải mái với việc bám theo master.


Bài viết gốc đăng tại FlutterCook. Bản trên đó là bản được cập nhật mới nhất.

Nhận xét

Bài đăng phổ biến từ blog này

5 concepts every Flutter dev should know

  Phụ lục: State management architecture Testing IDE Shortcuts Platform channel Maintaining a project Tôi đã làm việc với Flagship trong một thời gian dài, và đây là những điều mà tôi phát hiện ra là điều cần phải có đối với bất kỳ nhà phát triển Flagship nào, về tổng thể nó sẽ khiến bạn trở thành một nhà phát triển Flagship giỏi trong thời gian dài. 1. State management architecture Đây là một trong những chủ đề quan trọng nhất trong cộng đồng thiết bị rung, nó khá quan trọng nếu bạn muốn duy trì một dự án rung kích thước trung bình hoặc lớn. Nó sẽ giúp tạo một dự án suôn sẻ và thêm các tính năng mới một cách hoàn hảo.  2. Testing Đây là một chủ đề duy nhất mà tôi không hiểu tại sao nó lại quan trọng trước đó trong sự nghiệp của tôi, nhưng khi tôi tiến lên trong sự nghiệp của mình và có kinh nghiệm với nhiều dự án và vấn đề xảy ra trong môi trường sản xuất. Tôi đã nhận ra một cách khó khăn, tại sao điều này lại quan trọng như vậy. Nếu bạn vẫn muốn có thêm lý do để cân nhắc thử...

Thiết kế giao diện với DotNetBar (Phần 1)

Đây là phiên bản DotNetBar hỗ trợ C# và Visual Basic https://www.dropbox.com/s/wx80jpvgnlrmtux/DotNetBar.rar  , phiên bản này hỗ trợ giao diện Metro cực kỳ “dễ thương” Các bạn load về và cài đặt, khi cài đặt xong sẽ có source code mẫu của tất cả các control. Để sử dụng được các control của DotNetBar các bạn nhớ add item vào controls box. Thiết kế giao diện với DotNetBar, giao diện sẽ rất đẹp. Link các video hướng dẫn chi tiết cách sử dụng và coding: http://www.devcomponents.com/dotnetbar/movies.aspx Hiện tại DotNetBar có rất nhiều công cụ cực mạnh, trong đó có 3 công cụ dưới đây: DotNetBar for Windows Forms Requires with Visual Studio 2003, 2005, 2008, 2010 or 2012.   DotNetBar for WPF Requires with Visual Studio 2010 or 2012 and Windows Presentation Foundation.   DotNetBar for Silverlight Requires with Visual Studio 2010 or 2012 and Silverlight. Dưới đây là một số hình ảnh về các control trong DotnetBar.   Metro User Interface  controls with Metro Tiles, toolba...

2026 👏 Google miễn phí một năm gói AI Plus cho sinh viên Việt Nam 🇻🇳🇻🇳🇻🇳

Chúc mừng anh em 👏 Google miễn phí một năm gói AI Plus cho sinh viên Việt Nam 🇻🇳🇻🇳🇻🇳 Đối tượng là sinh viên đại học từ 18–24 tuổi (bao gồm sinh viên mới và sinh viên từng dùng gói AI Pro 2025). Lưu ý là cần xác minh tư cách sinh viên hàng năm. Khi nhận gói, anh em có được các ưu đãi sau: 🔖 Nâng cấp bộ nhớ đám mây lên 400GB. 🔖 Nhân đôi hạn mức truy cập mô hình AI. 🔖 Mở quyền trải nghiệm tính năng tạo video bằng Gemini Omni. Lưu ý chương trình chỉ dành cho sinh viên đủ điều kiện. Hạn nhận ưu đãi: 31 tháng 12, 2026. Các bạn cần có phương thức thanh toán hợp lệ khi đăng ký. Google AI Plus sẽ tự động tính phí 132.000 ₫/tháng sau khi thời gian dùng thử kết thúc, trừ phi bạn đã huỷ trước đó. Huỷ bất cứ lúc nào. CÁC BƯỚC THỰC HIỆN CHI TIẾT 🔹Bước 1: Truy cập cổng đăng ký chương trình 🔖 Mở trình duyệt và truy cập vào trang chính thức: gemini.google/students/ 🔖 Đăng nhập vào Tài khoản Google cá nhân của bạn. 🔖 Nhấn vào nút "Claim your student plan at no cost" (hoặc Nhận gó...