2 điểm bởi GN⁺ 2024-04-03 | 1 bình luận | Chia sẻ qua WhatsApp

Kinh nghiệm tại Adobe và sự ra đời của Renderlet

  • Đã làm việc về hạ tầng cho các ứng dụng lớn như Photoshop và Acrobat tại Adobe.
  • Việc vận hành một codebase mạnh mẽ trên desktop, web, mobile và cloud là một vấn đề đau đầu lớn.
  • Để chạy Lightroom và Photoshop trên web, đã phải trải qua một quá trình phức tạp đi từ JavaScript, PNaCl của Google, asm.js, và cuối cùng là WebAssembly.
  • Cần phải suy nghĩ lại về kiến trúc GPU, làm cho các bản build đơn luồng hoạt động, và tái cấu trúc UI xoay quanh web component.
  • Bản build web hiện giờ hoạt động tốt, nhưng để đi đến đây đã là một hành trình dài 10 năm.

Tiềm năng của WebAssembly

  • Stack đồ họa là phần gây ra nút thắt cổ chai lớn nhất về tính di động.
  • Một ngày nọ đã nhận ra rằng WebAssembly (Wasm) mang đến lời giải cho vấn đề này.
  • Wasm có thể chạy ở mọi nơi, có thể được nhúng vào bất cứ thứ gì, và cung cấp hiệu năng đủ tốt cho đồ họa thời gian thực.
  • Vì vậy đã nghỉ việc và bắt đầu hành trình xây dựng từ đầu một framework đồ họa dựa trên WASM có tính di động và khả năng nhúng.
  • Nó cung cấp mức trừu tượng cao để nhà phát triển ứng dụng dễ dàng tạo ra đồ họa như mong muốn, đồng thời cũng cung cấp các khả năng mức thấp để tận dụng tối đa mọi thứ cần thiết cho ứng dụng hiệu năng cao, bao gồm cả GPU.

Giới thiệu Renderlet

  • Tên Renderlet được đặt để nhấn mạnh khía cạnh có thể nhúng của nó.
  • Có thể tạo các mô-đun đồ họa riêng rồi kết nối chúng lại, giúp dễ dàng tương tác với bất cứ thứ gì và bên trong bất cứ môi trường nào.
  • Cũng giống như Unity giúp nhà phát triển dễ dàng tạo game đa nền tảng, ý tưởng ở đây là làm điều tương tự cho mọi ứng dụng thị giác.

Quá trình phát triển và lời mời góp ý

  • Đã tham gia YC với tư cách nhà sáng lập solo, nhưng phần lớn thời gian trong 6 tháng qua được tập trung để xây dựng dự án này.
  • Vẫn chưa sẵn sàng cho bản phát hành open alpha, nhưng sẽ sớm sẵn sàng, và muốn viết về nó, trình diễn nó, cũng như nhận phản hồi.
  • Đây là điều đã luôn mơ ước với tư cách một nhà phát triển ứng dụng, và muốn biết mọi người nghĩ gì.

Kết hợp Rive và Renderlet

  • Đã thấy hứng thú khi Rive open source engine vector 2D của mình và trở thành chủ đề được chú ý.
  • Renderer của Rive được xây dựng bằng API 2D mức cao tương tự SVG, còn renderer Wander của Renderlet thì phơi bày API 3D mức thấp trên GPU.
  • Renderlet có thể chạy thư viện Rive Renderer bằng backend GPU, qua đó cho phép mọi ứng dụng 3D có một backend vector 2D.
  • Có thể xem bản triển khai thực tế đang hoạt động trên Vimeo, và đào sâu chi tiết kỹ thuật trên GitHub.

Ý kiến của GN⁺

  • Renderlet đưa ra một cách tiếp cận đổi mới nhằm giải quyết bài toán port các ứng dụng đồ họa phức tạp hiện có. Đây có thể trở thành một công cụ mạnh mẽ giúp nhà phát triển mang lại trải nghiệm người dùng nhất quán trên nhiều nền tảng.
  • Nhà phát triển Renderlet hiểu rõ nhu cầu thực tế của thị trường và các giới hạn kỹ thuật nhờ kinh nghiệm tại Adobe, điều này làm tăng khả năng thành công của dự án.
  • Tuy nhiên, Renderlet vẫn đang ở giai đoạn đầu và chưa phát hành open alpha, nên hiệu năng và độ ổn định trong môi trường thực tế vẫn chưa được kiểm chứng.
  • Để công nghệ này được áp dụng thành công, cần có sự hỗ trợ rộng rãi từ cộng đồng và sự tham gia tích cực của các nhà phát triển. Với vai trò là một dự án open source, các đóng góp và phản hồi từ cộng đồng sẽ ảnh hưởng lớn đến sự phát triển của dự án.
  • Những dự án hoặc framework khác cung cấp chức năng tương tự như Renderlet có thể kể đến Unity, Unreal Engine và Godot, nhưng Renderlet theo đuổi hướng tiếp cận khác biệt khi tập trung nhiều hơn vào tính gọn nhẹ và tính di động dựa trên Wasm.

1 bình luận

 
GN⁺ 2024-04-03
Ý kiến trên Hacker News
  • Nên bỏ qua bước PAL và chuyển thẳng sang SetupRuntime. Các nhà phát triển không chuyên về đồ họa thường không biết những điều này, và việc thêm các bước không cần thiết vào API là không mong muốn. Vì PAL không được dùng ở nơi khác, tốt hơn là dùng WebGPU. (IPal nên là một thành viên của IRuntime và đang sẵn sàng để bị loại bỏ trong ngữ cảnh WebGPU).

    • Khuyến nghị dùng WebGPU: bỏ qua bước PAL, bắt đầu trực tiếp với SetupRuntime, cần đơn giản hóa API, tích hợp IPal vào IRuntime và dự kiến loại bỏ.
  • Dự án này có thể trở thành một bộ widget tuyệt vời để xây dựng GUI đa nền tảng và là một canvas ấn tượng cho mô hình tương tác. Backend C/C++ và target WASM cho phép xây dựng FFI với gần như mọi ngôn ngữ.

    • Khả năng phát triển GUI đa nền tảng: có thể xây dựng FFI bằng nhiều ngôn ngữ, tận dụng ưu thế của backend C/C++ và target WASM.
  • Tò mò về kế hoạch hỗ trợ văn bản và phông chữ. Một số engine đồ họa không hỗ trợ văn bản theo mọi cách mong muốn. Có câu hỏi liệu có thể tải tệp OTF hoặc WOFF2 và hiển thị chuỗi ký tự tùy ý hay không.

    • Câu hỏi về hỗ trợ văn bản và phông chữ: hỗ trợ nhiều cách hiển thị văn bản, khả năng tải tệp OTF/WOFF2 và hiển thị chuỗi ký tự.
  • Rất quan tâm đến dự án. Có một số câu hỏi về runtime, event loop, FFI, quyền sở hữu con trỏ cửa sổ, v.v. Có hứng thú với plugin âm thanh và VST, đồng thời có các ràng buộc liên quan đến event loop và quản lý cửa sổ. JUCE là giải pháp thực tế mặc định nhưng đã cũ và bất tiện.

    • Quan tâm đến plugin âm thanh và VST: câu hỏi về runtime, event loop, FFI và quản lý cửa sổ, cùng khả năng trở thành lựa chọn thay thế cho JUCE.
  • Dự án này thực sự rất tuyệt và là điều đã mơ ước trong vài năm qua. WASM có rất nhiều tiềm năng như một đơn vị di động cho các phép tính đồ họa/âm thanh/đa phương tiện.

    • Nhấn mạnh tiềm năng của WASM: khả năng của WASM như một đơn vị di động cho tính toán đồ họa/âm thanh/đa phương tiện.
  • Đang làm việc để chạy WASM trong Godot Engine. Tò mò không biết họ đã vượt qua vấn đề khả dụng của shared array buffer trên Safari và vấn đề truy cập mạng quảng cáo vốn quan trọng với game online như thế nào. Cũng chỉ ra vấn đề giữa bản dựng đơn luồng và bản dựng thông thường.

    • Godot Engine và công việc với WASM: vấn đề shared array buffer trên Safari, truy cập mạng quảng cáo, và sự khác biệt giữa bản dựng đơn luồng với bản dựng thông thường.
  • Rất vui khi thấy thêm nhiều dự án trong lĩnh vực đồ họa 3D/WASM. Hỏi xem có lời khuyên nào để vào YC hay không. Đã nhiều năm chuyển Unreal Engine 5 sang WebGPU và WebAssembly. Có renderer đa luồng và hệ thống streaming tài nguyên, nên người dùng không cần tải trước toàn bộ game/ứng dụng. Ngoài ra cũng không cần nạp toàn bộ ứng dụng vào bộ nhớ cùng một lúc. Còn xây dựng cả một nền tảng hosting và backend hoàn chỉnh để các nhà phát triển có thể triển khai dự án trực tuyến.

    • Port Unreal Engine 5 sang WebGPU và WebAssembly: renderer đa luồng, hệ thống streaming tài nguyên, không cần tải toàn bộ game/ứng dụng trước, cùng nền tảng hosting và backend đã được xây dựng.
  • Phần trình bày tại wasm I/O thật đáng kinh ngạc, và thật vui khi thấy công việc này đang nhận được sự chú ý.

    • Phản hồi tích cực về bài trình bày tại wasm I/O: nội dung ấn tượng của bài trình bày và việc dự án đang được chú ý.
  • Hỏi liệu đã đọc bài viết của Ian Hickson, nhà phát triển chủ chốt của Flutter, hay chưa. Bài viết mô tả khái niệm có một framework UI đa nền tảng hoàn chỉnh bằng cách dùng WASM, và đó cũng là khái niệm Flutter sử dụng.

    • Việc dùng WASM liên quan đến Flutter: khái niệm framework UI đa nền tảng và mối liên hệ với Flutter.
  • Đối với CAD kernel, rất khuyến nghị manifold, có thể tích hợp vào ứng dụng.

    • Khuyến nghị CAD kernel: đề xuất manifold để tích hợp vào ứng dụng.