1 điểm bởi GN⁺ 2024-04-03 | 1 bình luận | Chia sẻ qua WhatsApp
  • CityGaussian(CityGS) là một phương pháp tại ECCV 2024 mở rộng 3D Gaussian Splatting(3DGS) cho các cảnh quy mô đô thị, đồng thời nhắm đến hiệu quả huấn luyện và chất lượng khám phá theo thời gian thực
  • Giải quyết hạn chế khó xử lý cảnh quy mô lớn cùng lúc bằng cách chia nhỏ vấn đề với huấn luyện chia để trị và chiến lược mức độ chi tiết(LoD)
  • Tận dụng thông tin tiên nghiệm về cảnh toàn cục và lựa chọn dữ liệu huấn luyện thích ứng để căn chỉnh kết quả huấn luyện theo từng khối hiệu quả hơn và hợp nhất mượt mà
  • Nén các Gaussian primitive đã được hợp nhất để tạo nhiều mức độ chi tiết, rồi khi kết xuất sẽ chọn và tổng hợp mức độ chi tiết phù hợp theo từng khối
  • Nếu biểu diễn MatrixCity bằng 25 triệu Gaussian mà không dùng LoD, tốc độ trên A100 chỉ đạt 18 FPS; còn CityGS có LoD đạt trung bình 36 FPS, thực hiện được kết xuất thời gian thực

Cấu trúc huấn luyện và kết xuất cho 3DGS quy mô lớn

  • 3D Gaussian Splatting(3DGS) đã cho thấy thế mạnh trong tái dựng cảnh 3D theo thời gian thực và tổng hợp góc nhìn mới, nhưng huấn luyện cảnh quy mô lớn và kết xuất thời gian thực ở nhiều tỷ lệ vẫn còn là gánh nặng lớn
  • CityGaussian xử lý vấn đề này theo hai giai đoạn
    • Huấn luyện chia để trị: chia cảnh quy mô lớn thành các khối để huấn luyện hiệu quả
    • Chiến lược LoD: chỉ sử dụng mức độ chi tiết cần thiết theo tỷ lệ quan sát để tăng tốc độ kết xuất
  • Thông tin tiên nghiệm về cảnh toàn cục và lựa chọn dữ liệu huấn luyện thích ứng giúp nâng cao hiệu quả huấn luyện, đồng thời hỗ trợ hợp nhất các mảnh cảnh tách rời một cách tự nhiên hơn
  • Các Gaussian primitive đã hợp nhất được đưa qua quá trình nén để cấu thành nhiều mức độ chi tiết
  • Ở giai đoạn kết xuất, hệ thống dùng chiến lược chọn và tổng hợp mức độ chi tiết theo từng khối, giúp tạo khung hình nhanh ngay cả ở nhiều tỷ lệ

Hiệu năng và tài liệu công khai

  • Nếu không áp dụng LoD, cảnh MatrixCity được biểu diễn bằng 25 triệu Gaussian và đo được 18 FPS trên A100
    • Tốc độ này được đánh giá là khó mang lại trải nghiệm roaming mượt mà
  • CityGS có áp dụng LoD có thể kết xuất thời gian thực ngay cả ở những tỷ lệ rất khác nhau, đạt trung bình 36 FPS trên A100
  • Trong các thử nghiệm cảnh quy mô lớn, CityGS cho chất lượng kết xuất ở mức tiên tiến và hỗ trợ kết xuất thời gian thực nhất quán trên các cảnh quy mô lớn ở nhiều tỷ lệ
  • Tài liệu công khai

1 bình luận

 
GN⁺ 2024-04-03
Các ý kiến trên Hacker News
  • Nhìn tên dataset trong video là Matrix city, khả năng cao nó được trích xuất từ bản demo Unreal Engine 5 Matrix được công bố vài năm trước
    Các góc nhìn rất giống nhau nên trông chân thực như ảnh chụp, nhưng có vẻ không đến từ ảnh thật
    Tìm thêm thì đúng là vậy: https://city-super.github.io/matrixcity/

    • Trước đây Epic đã mua lại công ty quang trắc Quixel, nên nhiều khả năng họ đã dùng thư viện asset quét từ ảnh khi tạo Matrix city
      Thú vị là nếu vậy thì bài gốc đang tái dựng lại một thứ vốn đã được tái dựng từ vật thể thật
    • Một số asset của demo The Matrix Awakens đã được phát hành thành các gói riêng trên Unreal Engine Marketplace: [1] bản đồ, [2] tòa nhà·đám đông·xe cộ
      Bản đồ MatrixCity thì khác, nhưng cũng khá giống bản đồ của Matrix Awakens. Có thể thấy điều này trong phần phân tích thiết kế ở trang [3] do technical lead của dự án Matrix Awakens viết
      Đi sâu hơn, nếu xem phần MatrixPlugin trong codebase GitHub [4], có ghi rõ rằng họ đã dùng dự án city-sample
      [1] https://www.unrealengine.com/marketplace/en-US/product/city-...
      [2] https://www.unrealengine.com/marketplace/en-US/learn/city-sa...
      [3] https://quentinmarmier.artstation.com/projects/xYeKNO
      [4] https://github.com/city-super/MatrixCity
    • Nếu dùng dữ liệu từ game engine, có thể lấy được tư thế camera chính xác tương ứng với từng ảnh
      Vì thế việc huấn luyện NeRF hoặc Gaussian splatting trở nên dễ hơn một chút, do không có sai số tối ưu hóa tư thế camera
      Đây cũng là lý do các bài báo NeRF ban đầu dùng chiếc máy xúc Lego màu vàng nổi tiếng được render bằng Blender
    • Nếu đã có một cảnh Unreal Engine được mô hình hóa hoàn chỉnh, tôi tự hỏi liệu có thể tạo splat mà không cần bước huấn luyện hay không
      Với một cảnh như Matrix city, có vẻ không cần tốn nhiều thời gian huấn luyện chỉ để tái hiện dữ liệu
    • Không phải tất cả video đều là Matrix City; một số là địa điểm thật
  • Cuối tuần tôi đã thử ghép mesh tile 3D của Google Maps với Gaussian splat; không hoàn toàn giống nhau, nhưng hiệu ứng khá tương tự và hữu ích
    Ví dụ 1 có link code: https://twitter.com/kfarr/status/1773934700878561396
    Ví dụ 2: https://twitter.com/3dstreetapp/status/1775203540442697782

    • Thật sự rất tuyệt, không biết có GitHub chứa code không
      Ở link đầu tiên, devtools báo lỗi
      Uncaught (in promise) Error: Failed to fetch resource [https://tile.googleapis.com/v1/3dti](<https://tile.googleapis.com/v1/3dti>;)...
    • Tôi đang thử đủ thứ với Aframe và đường bao tòa nhà OSM, nhưng cách này trông tốt hơn nhiều
      Tôi định xem thử aframe-loader-3dtiles-component
    • Sẽ rất tốt nếu có thể đăng cả link kho mã nguồn ở đây cho những người không dùng xitter
  • “Tốc độ trung bình là 36 FPS (thử nghiệm trên A100)” tức là có vẻ nó là thời gian thực nếu bạn có GPU giá $8k

    • Đây là kiểu thời gian thực theo phong cách SIGGRAPH ngày xưa
      Khi một bài báo đồ họa nói đã đạt tốc độ thời gian thực, luôn phải kiểm tra lại xem nó thật sự là thời gian thực, hay là “640x480 20fps trên phần cứng đắt nhất có thể mua bằng tiền”
      Nếu hạ tiêu chuẩn đủ thấp thì cái gì cũng có thể thành thời gian thực
    • Có vẻ đây là 3DGS đầu tiên dùng LOD và block, nên có thể vẫn còn dư địa tối ưu
      Nó có thể trở nên hữu ích cho các mục đích như virtual production, nhưng có lẽ không dành cho mobile
    • Tôi nhớ các benchmark GPU ngày xưa khi mới ra cũng chạy ở 10fps, rồi theo thời gian mọi thứ đã khác
      https://www.techpowerup.com/forums/attachments/all-cards-png...
    • Đáng tiếc là rất nhiều nghiên cứu 3DGS/NeRF đều như vậy
      Nếu muốn thứ có thể chạy trên laptop 10 năm tuổi, thậm chí không cần GPU, hãy xem https://github.com/pierotofy/OpenSplat. Tôi là người tạo ra nó
    • Tôi cho rằng GPU tiêu dùng thế hệ tiếp theo, 5090, sẽ nhanh gấp đôi A100 mà không có giá $8k
      Vì vậy đây không có vẻ là vấn đề không thể vượt qua
  • Ai có thể thuyết phục tôi rằng 3D Gaussian splatting không phải là ngõ cụt không?
    Render thì quá chậm ở mức chênh một chữ số lần, dữ liệu cũng quá lớn ở mức chênh một chữ số lần. Cảm giác như đang xem lại cuộc đối đầu giữa rasterization và ray tracing
    Rasterization sẽ luôn nhanh hơn ray tracing, và nếu ray tracing nhanh hơn 10 lần thì rasterization cũng sẽ nhanh hơn 10 lần
    Việc tạo ra hình học và vật liệu truyền thống từ đám mây điểm Gaussian có thể thú vị. Nhưng phép đo ảnh đã tồn tại từ khá lâu rồi
    Cố gắng render thời gian thực cả một thành phố khổng lồ bằng splat không có cảm giác là “hướng đi đúng”
    Nó ngầu, vui và thú vị, nhưng tôi không chắc liệu nó có thực sự hữu ích hay không. Tôi không phải chuyên gia nên hỏi nghiêm túc

    • Tiềm năng thì cực kỳ nhiều. Đây là một hướng tiếp cận khác, dù tương tự các công nghệ được cấp bằng sáng chế mà Unreal Engine dùng
      Phần lớn nghiên cứu hiện nay không tập trung vào hiệu năng, và thậm chí còn chưa có đồng thuận về định dạng tích hợp, bao gồm cả nén
      Khả năng tối ưu hóa là rất rõ ràng, và cũng dễ điều chỉnh cho nhiều thiết bị. Tương tự LOD cho đám mây điểm hoặc mesh culling
      Hiệu năng splat có thể là lợi thế cạnh tranh tạm thời của trình xem, nhưng giống như giải nén video hay các chuẩn 3D khác đã phổ biến dưới dạng mã nguồn mở, trong vài năm tới việc xem splat chất lượng cao, khung hình cao có thể sẽ trở thành điều kiện mặc định trên hầu hết thiết bị
      Câu hỏi tiếp theo là sẽ dùng nó vào đâu
    • Nó không chậm ở mức chênh một chữ số lần đâu. Ngay bây giờ trong Unreal hay Unity cũng dễ đạt 200~400fps
      Trên trình duyệt hơn 100fps: https://current-exhibition.com/laboratorio31/
      900fps: https://m-niemeyer.github.io/radsplat/
      Các engine truyền thống đã tích lũy 30 năm R&D, nên công cụ và tối ưu hóa sẽ cần thời gian để bắt kịp
      Tuy vậy, nhìn vào nguồn gốc các bài báo thì có rất nhiều từ Apple và Meta, và đây có vẻ là công nghệ sẽ vận hành kỷ nguyên metaverse/spatial computing mà hai công ty đó đang thúc đẩy
      Khả năng chuyển nội dung có chi phí sản xuất rất thấp như video iPhone sang môi trường 3D sẽ thay thế rất nhiều R&D theo cách truyền thống
    • Phép đo ảnh gặp khó với một số vật liệu nhất định như bề mặt phản chiếu
      Việc bắt được chi tiết cực nhỏ như cấu trúc mảnh hoặc tóc cũng rất khó. 3DGS mạnh ở những phần đó
      Cũng đang có nghiên cứu nhằm cải thiện các điểm yếu hiện tại, bao gồm cả phương pháp trích xuất mesh có thể dùng trong pipeline đồ họa truyền thống
    • Về độ chân thực khi tái dựng thế giới thực thành 3D sống động, hiện gần như không có gì sánh được
      Phép đo ảnh chỉ hoạt động tốt khi dữ liệu bề mặt sạch, còn Gaussian splat mạnh với dữ liệu bán thể tích như lông, thảm thực vật, hạt, bề mặt gồ ghề
      Nó cũng phù hợp với bề mặt bóng/phản chiếu, các thể tích có tính chất bề mặt phân mảnh mạnh, và vật liệu phụ thuộc nhiều vào góc nhìn
    • Quan trọng là ngõ cụt đối với cái gì
      Nếu là trường hợp sử dụng tương đương ảnh 3D hoàn chỉnh thì khá tuyệt, và là ứng dụng hoàn toàn có lý
      Nếu dành cho engine game 3D, tôi cho rằng khó xử lý động các primitive cơ bản theo cách engine game yêu cầu. Các nỗ lực sẽ vẫn tiếp diễn, nhưng từ góc nhìn này Gaussian trông giống định dạng render cuối hơn là một biểu diễn trung gian hữu ích
      Để dùng thực tế trong engine, cần phát minh ra thứ gì đó khác để lấp khoảng trống đó, và vẫn còn rất nhiều câu hỏi
      Tôi không biết các mục đích khác, nhưng thế giới đâu chỉ gồm game 3D và hiệu ứng hình ảnh
  • Có quá nhiều thứ mang tên Gauss, và việc cái tên đó vẫn tiếp tục được gắn vào những thứ mới như Gaussian splatting khiến tôi thấy thú vị khi nghĩ lại Gauss đã ảnh hưởng tới bao nhiêu lĩnh vực
    Không phải ông trực tiếp phát minh ra, nhưng có thể nói ông đã đóng góp lớn cho phần toán học đó

  • Tôi tò mò nó sẽ được phát hành theo giấy phép nào
    Tôi muốn thấy một game mã nguồn mở dùng cái này

    • Bất kể hiệu năng, để thực sự dùng trong game thì trước tiên phải tìm ra phương pháp tổng quát để làm cảnh động
      Trong lịch sử đã có nhiều trường hợp trông đầy hứa hẹn như một lựa chọn thay thế cho mesh tam giác, rồi biến mất khi người ta nhận ra không có cách animation hiệu quả
    • Về cơ bản đây là một đám mây điểm rất lớn gồm các điểm có hình dạng kỳ lạ, nên thật sự khó
      Các đối tượng trong đám mây điểm không có metadata nội tại kiểu “ghế, bàn, người”, nên mọi tương tác đều rất khó
      Không phải là bất khả thi, nhưng hiện tại chưa thực tế
      Hơn nữa nó cũng không thực sự được tối ưu cho render thời gian thực. Dù đã cắt tỉa rất nhiều điểm, dùng mesh độ phân giải thấp vẫn hiệu quả hơn nhiều
  • Cái này trông không hơn Cities: Skylines là bao
    Không có zoom in hay zoom out, và lúc nào cũng chỉ cho thấy những khung hình rất giới hạn. Tôi có bỏ lỡ điều gì không?

    • Các trả lời khác có vẻ được viết mà không thực sự suy nghĩ hay tìm hiểu
      Bài báo liên tục tham chiếu MatrixCity, và https://city-super.github.io/matrixcity/ mà một người khác ở trên tìm được cũng nói rõ đó là dữ liệu hoàn toàn tổng hợp
      Theo tôi hiểu thì nó được trích xuất từ Unreal Engine
    • Đây là tái dựng 3D, không phải render game
    • Tôi nghĩ nó được render từ ảnh
    • Đây không phải engine game, mà là chuyển ảnh thật thành góc nhìn Gaussian 3D
  • Mình đang học bằng pygame và thắc mắc làm thế nào để thêm motion blur vào game
    Ví dụ khi làm Mario bằng pygame, mình muốn Mario trông bị nhòe khi nhảy
    Có thể lấy trung bình 9 pixel để tạo một phiên bản Mario bị nhòe, nhưng không rõ các game khác thường có làm như vậy không
    Nhiều game cũng rất sắc nét mà không có motion blur, nên mình tò mò liệu thực tế có dùng không
    Trong phim thì đây là một yếu tố khá lớn, và mình cũng nhớ rằng để có motion blur kiểu điện ảnh thì phải quay ở 25fps

    • Chỉ cần render motion vector của đối tượng vào một render texture khác
      Tức là tính vận tốc của từng đối tượng rồi render thành màu, sau đó dùng nó ở bước hậu xử lý để quyết định cường độ và hướng của hiệu ứng blur
      Có thể cũng cần chuyển động theo góc nhìn camera. Với Mario thì có lẽ không, nhưng trong FPS, khi camera tiến về phía trước, bạn sẽ muốn các rìa màn hình bị nhòe
  • Tài liệu liên quan: https://city-super.github.io/octree-gs/

  • Đây là một cách tiếp cận khá cao cấp để render các cảnh lớn hơn bằng 3D Gaussians, nên nếu code được phát hành thì mình muốn thử nghiệm ngay