- RenderFormer là một pipeline neural rendering trực tiếp hiện thực cả hiệu ứng global illumination trên các cảnh dựa trên lưới tam giác
- Không cần huấn luyện riêng hay fine-tune cho từng cảnh
- Định nghĩa rendering như một phép biến đổi sequence-to-sequence, chuyển trực tiếp token tam giác thành token patch pixel
- Toàn bộ pipeline được thiết kế dựa trên Transformer, chỉ áp dụng mức ràng buộc tiên nghiệm tối thiểu
- Tạo ảnh không dùng rasterization hay ray tracing
Giới thiệu
- RenderFormer là một pipeline neural trực tiếp render hình ảnh từ biểu diễn cảnh dựa trên tam giác
- Xuất ra hình ảnh đã áp dụng đầy đủ hiệu ứng global illumination
- Hoạt động với cấu trúc không cần huấn luyện hoặc fine-tune riêng cho từng cảnh
Cách tiếp cận
- Khác với phương pháp rendering dựa trên vật lý truyền thống, hệ thống định nghĩa lại rendering thành một bài toán biến đổi sequence-to-sequence
- Chuyển một chuỗi token chứa tam giác và đặc tính phản xạ thành một chuỗi token đầu ra, trong đó mỗi token tương ứng với một patch pixel nhỏ
Cấu trúc pipeline
- RenderFormer gồm 2 giai đoạn
- Giai đoạn độc lập với góc nhìn: mô hình hóa hiện tượng truyền ánh sáng giữa các tam giác
- Giai đoạn phụ thuộc góc nhìn: chuyển các token biểu diễn chùm tia thành giá trị pixel. Ở đây, chuỗi tam giác từ giai đoạn trước đóng vai trò dẫn hướng
- Cả hai giai đoạn đều dựa trên kiến trúc Transformer
- Hệ thống được huấn luyện với chỉ mức ràng buộc tiên nghiệm tối thiểu
Đặc điểm kỹ thuật
- Khi rendering không hề sử dụng các phương pháp truyền thống như rasterization, ray tracing
- Tận dụng mạnh mẽ khả năng biến đổi chuỗi của Transformer
Kết luận
- So với các kỹ thuật neural rendering hiện có, đây là cách tiếp cận tạo ra hình ảnh linh hoạt và chất lượng cao mà không cần chuẩn bị trước hay tinh chỉnh theo từng cảnh riêng biệt
1 bình luận
Ý kiến trên Hacker News
Điểm ấn tượng nhất là tốc độ. Với cùng một cảnh, RenderFormer hoàn tất trong 0,076 giây, còn Blender Cycles mất 3,97 giây (hoặc 12,05 giây ở thiết lập cao hơn). Trong khi đó, chỉ số tương đồng cấu trúc (SSIM) là 0,9526, gần như không có khác biệt đáng kể. Khuyên nên xem bảng 2 và 1 trong bài báo. Ý nghĩa thực tế của điều này là các nhà thiết kế 3D có thể xem bản preview render tức thì với chất lượng cao hơn nhiều bằng mô hình transformer chạy on-device trên web hoặc ứng dụng native. Dĩ nhiên, kết quả trên được đo bằng GPU A100 và chưa tối ưu PyTorch, nên GPU của người dùng phổ thông sẽ không nhanh đến mức đó, nhưng vẫn có thể kỳ vọng mức cải thiện tốc độ đủ lớn so với render truyền thống. Hoặc nếu là hệ thống web-based thì cũng có thể nối backend với A100 rồi stream ảnh kết quả sang trình duyệt. Tuy vậy, giới hạn của nó cũng rất rõ. Khi cảnh trở nên phức tạp hơn thì độ chính xác giảm xuống, đặc biệt với bóng đổ phức tạp (bao gồm hạt hoặc tóc) thì khả năng phát sinh sai số là lớn, nên render cuối cùng vẫn phải xử lý bằng phương pháp truyền thống để tránh các artifact thường thấy trong ảnh/video do AI tạo ra. Dù vậy, nếu mức tăng tốc đủ lớn thì tôi nghĩ các studio hoạt hình lớn, nơi cần render preview dài cả phim để duyệt nhạc hoặc câu chuyện, có thể sẽ dùng nó cho những mục đích như vậy
Tôi không nghĩ các nhà nghiên cứu cố ý bóp méo sự thật, nhưng với GPU có hiệu năng như vậy thì Blender Cycles hoàn toàn có thể render mọi cảnh trong bài báo trong vòng dưới 4 giây. Bản thân các cảnh dùng trong bài cũng có độ phức tạp thấp, trong khi Blender lại được cấu hình lặp lấy mẫu 4.000 lần, dù thực tế chỉ vài trăm lần là gần đạt chất lượng cuối cùng và phần còn lại gần như không còn tác dụng. Kết quả là tài nguyên GPU bị tiêu tốn không cần thiết. Ngoài ra, có vẻ như họ tính cả quá trình chuẩn bị render ban đầu của Blender vào thời gian render, trong khi lại loại trừ thời gian khởi tạo transformer. Tôi cũng tò mò thời gian để render khung hình thứ hai trên từng hệ thống là bao lâu. Tôi đoán Blender sẽ nhanh hơn nhiều. Dù sao thì bản thân kết quả của bài báo vẫn rất thú vị, chỉ là có chút khác biệt tinh tế ở phần cấu hình Blender và so sánh thời gian
Nếu xét theo các cảnh được trình bày thì 76ms thậm chí còn là khá chậm. Dĩ nhiên tôi nghĩ sau này nó sẽ còn nhanh hơn nhiều, nhưng để kết luận rằng nó tốt hơn render truyền thống thì vẫn còn hơi sớm
So sánh thời gian trong bài có phần chưa chính xác. Với ray tracing, sai số giảm theo căn bậc hai của số mẫu. Bài báo dùng số mẫu cao một cách phi thực tế để tạo ảnh tham chiếu, trong khi renderer offline thực tế thường lấy mẫu ít hơn 10~100 lần so với mức đó. Các ảnh được tạo với số mẫu cao như trong bài chỉ phù hợp để so chất lượng, chứ dùng để so thời gian thì không phổ biến. Vì kết quả không thật sự nghiêm ngặt, sẽ công bằng hơn nếu so với các thuật toán render khác tạo ra xấp xỉ tương tự. Hiện nay, các bộ path tracer thời gian thực kết hợp denoiser cũng có thể render những cảnh phức tạp hơn nhiều trong dưới 16ms trên GPU tiêu dùng. Đặc biệt, mô hình transformer tiêu tốn thời gian tỷ lệ bậc hai theo cả số tam giác lẫn số pixel. Có thể nghiên cứu machine learning hiện đại đã cải thiện ở một số điểm, nhưng sẽ rất khó vượt qua khả năng mở rộng O(log n triangles), O(n pixels) của path tracer truyền thống (trên thực tế còn ít nhạy với việc tăng số pixel hơn nhờ tính nhất quán giữa các pixel lân cận)
Tôi khá ngạc nhiên trước nhận định rằng tốc độ của nó xuất sắc. Tôi chỉ lướt nhanh bài báo, nhưng không rõ Blender Cycles dùng CPU của A100 hay có dùng CUDA kernel hay không. Nếu chỉ là một khung hình thì có thể đã tính cả thời gian khởi động renderer. Nếu là render theo chuỗi thì thời gian trên mỗi khung hình sẽ giảm đáng kể. Và như người khác đã nhắc, độ phức tạp tam giác (mở rộng O(n^2)) chắc chắn cũng sẽ ảnh hưởng rõ rệt
Trong bài báo có nói rằng "độ phức tạp thời gian chạy của lớp Attention tăng theo bình phương số token, tức trong trường hợp này là số tam giác. Vì vậy số tam giác trong cảnh bị giới hạn tối đa ở 4096"
Deep learning cũng đang được dùng rất thành công để khử nhiễu cho ảnh render global illumination. Cách làm là lấy ảnh global illumination thô từ ray tracing truyền thống, rồi mạng nơ-ron sẽ loại bỏ nhiễu trong ảnh đầu ra. Link liên quan: Open Image Denoise
Tôi có một người bạn đang thực sự phát triển renderer dựa trên vật lý cho ngành điện ảnh, và mỗi khi nghe cách ngành này làm việc hay các câu chuyện xung quanh nó đều rất thú vị. Tôi đang tò mò không biết hiện giờ có những công ty nào đang tuyển những nhân sự kiểu này. Cũng tự hỏi liệu các công ty AI có tuyển kỹ sư rendering để xây dựng môi trường phục vụ training hay không. Nếu có ai đang muốn tuyển kỹ sư nghiên cứu/ngành rendering nhiều kinh nghiệm thì tôi có thể kết nối, vì bạn tôi không dùng mạng xã hội
Tôi thấy lạ là không ví dụ nào cho thấy các vật thể phía sau camera. Không rõ đó là giới hạn trong cách dựng ví dụ hay là giới hạn của chính cách tiếp cận này, nhưng khi xét tới phản xạ hay ánh sáng thì phần phía sau camera là yếu tố cực kỳ quan trọng
Lại thêm một khoảnh khắc cho thấy rõ "the bitter lesson". Giờ xu hướng đó cũng đang áp dụng vào lĩnh vực graphics rendering. NeRF dùng một phần prior dựa trên ray tracing, Gaussian splat dùng một phần prior dựa trên rasterization, còn cách này thì bỏ hẳn các prior miền hay tri thức chuyên biệt đó để chỉ giải bằng dữ liệu và attention. Tôi có cảm giác kiểu tiếp cận này rốt cuộc chính là tương lai
Điều ấn tượng là cuối cùng đã hình thành được một cấu trúc vòng lặp nơi rendering và compute xoay quanh GPU rồi liên kết ngược lại với nhau
Kết quả trông ổn, nhưng hơi mờ một chút. Tôi vẫn muốn thấy thêm nhiều so sánh thời gian render giữa mạng nơ-ron và renderer cổ điển hơn
Trong animation (đặc biệt là Animated Crab và Robot Animation) có thể thấy artifact rất đặc trưng của AI art: hiện tượng xoáy bất tự nhiên quanh mô hình khi vật thể hoặc camera di chuyển
Bài báo có bàn phần nào về so sánh thời gian. So với Blender Cycles (path tracing), ít nhất với các cảnh dưới 4K tam giác thì cách neural nhanh hơn rất nhiều. Tuy nhiên với các cảnh phức tạp hơn thế thì có thể không phù hợp lắm (vì thời gian chạy của attention tăng theo bình phương số tam giác). Link bài báo: PDF bài báo RenderFormer. Theo tôi, một cách thực tế là chỉ dùng neural cho indirect lighting, còn ảnh nền thì tạo bằng rasterizer truyền thống rồi chỉ chồng thêm Global Illumination bằng neural
Có thể tôi chưa hiểu rõ, nhưng nếu những cảnh này cuối cùng vẫn được render theo kiểu có thể dự đoán được, thì tôi tò mò không biết cách này có lợi thế gì so với những phương pháp trực tiếp đơn giản hơn (nếu cũng không nhanh hơn thì có lý do gì để dùng?)
Thực ra cách này có thể tạo ra những hiệu ứng thú vị hơn vẻ ngoài của nó. Ví dụ, có thể xem toàn bộ scene như một cụm input weight rồi thêm nhiễu vào đó, hoặc nội suy/interpolate giữa các scene khác nhau để tạo ra kết quả ngoài dự đoán
Rốt cuộc tôi nghĩ cách này gần với kiểu "Cool Research" hơn. Tính thực dụng thấp, vì chi phí tăng theo bình phương khi số tam giác tăng lên. Vì vậy trong bài họ cũng giới hạn mỗi scene ở 4096 tam giác
Như các bình luận khác đã nói, cách này thật ra là nhanh hơn. Global illumination bằng phương pháp trực tiếp thì cực kỳ chậm
Đây có vẻ là một nghiên cứu mới mẻ. Transformer không chỉ hợp với ngôn ngữ tự nhiên mà còn có thể áp dụng rộng cho nhiều kiểu dữ liệu liên tục và những miền mà tương quan giữa các token là đặc trưng cốt lõi, nên tôi rất mong chờ thêm các nghiên cứu áp dụng vào miền phi văn bản trong tương lai. Tôi tò mò người dùng Hacker News thấy còn những miền phi văn bản nào phù hợp với transformer mà đặc biệt thú vị
Tôi nghĩ đây là một ý tưởng cực kỳ thông minh và hấp dẫn. Họ huấn luyện một transformer để biến mô tả scene dựa trên tập tam giác thành một mảng pixel 2D, và kết quả là nó có thể gần như ngay lập tức tạo ra hình ảnh gần giống với đầu ra của renderer global illumination truyền thống. Nếu nhìn lại nghiên cứu 5 năm qua thì bản thân chuyện này có thể làm được lẽ ra không còn quá gây sốc nữa, nhưng nó vẫn cực kỳ ấn tượng. Nó cho thấy kiến trúc transformer thực sự đa dụng đến mức nào. Tốc độ thì cực nhanh, kết quả gần với đầu ra Blender, mô hình cỡ khoảng 1B tham số, và tôi không chắc là fp16 hay 32 nhưng file nặng tới 2GB. Tôi cũng muốn xem demo với các scene chân thực hơn, nhưng tôi thích ở chỗ là ngay bây giờ cũng có thể tải về máy Mac của mình và tự chạy thử