Bỏ qua tới nội dung chính
Quay lại tin tức

Đa thức đã khắc phục 30 năm mô phỏng vải

Towards Data Science· Ferran Alia· 8/6/2026general

Lỗi cắt xén (clipping bug) đã tồn tại trong mọi quy trình mô phỏng 3D suốt ba thập kỷ. Bài viết này sẽ giải thích chính xác nguyên nhân gây ra lỗi, cách các phép toán bị sai lệch và cách thay thế một phương trình duy nhất có thể khắc phục vấn đề; kèm theo mã Python để độc giả tự kiểm chứng. Bài viết The Polynomial That Fixed 30 Years of Cloth Simulation xuất hiện lần đầu trên Towards Data Science.

Vật lý Đa thức đã khắc phục 30 năm mô phỏng vải Một công ty thương mại điện tử Nhật Bản đã công bố một trong những bài báo mô phỏng vải được thiết kế chặt chẽ nhất trong những năm gần đây, lý do rào cản logarit thất bại dưới giới hạn biến dạng chặt chẽ và cách tái tạo ý tưởng cốt lõi trong Python. Ferran Alia Ngày 8/6/2026 15 phút đọc Chia sẻ Các ví dụ về bộ giải của Zozo © ZOZO Technologies / Ryoichi Ando (giấy phép Apache 2.0) Có một lỗi ẩn trong mã của hầu hết mọi quy trình hoạt hình 3D từng được xây dựng. Lỗi này xuất hiện khi ống tay áo của nhân vật xuyên qua thân mình, khi váy xuyên qua chân giữa lúc đi bộ, khi một chiếc khăn trải bàn mô phỏng xuyên qua cạnh bàn như thể nó được làm bằng ánh sáng. Các studio cao cấp dành hàng nghìn giờ của nghệ sĩ để tìm kiếm lỗi này từng khung hình trước khi một bộ phim ra rạp. Trong trò chơi điện tử và đồ họa thời gian thực, lỗi này chỉ được phát hành. Lỗi cắt xén. Vải không biết nó là vật thể rắn. Cuối năm 2024, một công ty tên là ZOZO (nền tảng thương mại điện tử thời trang lớn nhất Nhật Bản) đã công bố một bộ giải vật lý trên ACM Transactions on Graphics, tạp chí hàng đầu trong lĩnh vực này, với tiêu đề khô khan "A Cubic Barrier with Elasticity-Inclusive Dynamic Stiffness". Bài báo này hầu như không gây chú ý vào thời điểm đó. Sau đó, cộng đồng bắt đầu đăng các so sánh song song với mọi bộ giải khác mà họ sở hữu, và các bản demo của ZOZO liên tục giành chiến thắng. Mô phỏng vải từ một phiên bản đơn giản hóa của thuật toán, bởi tác giả Các bản demo cho thấy vải hoạt động như vải. Không phải cao su, không phải thạch, không phải bóng ma: mà là vải. Năm lớp lưới phủ lên một hình cầu, mỗi lớp chạm vào lớp tiếp theo mà không có một tam giác nào xâm phạm không gian của lớp khác. Trong các thử nghiệm ứng suất quy mô lớn của họ, bộ giải xử lý hơn 184 triệu cặp tiếp xúc đồng thời mà không có một sự xuyên thấu nào. Để hiểu tại sao việc hoán đổi đa thức lại là một bước đột phá đáng kể như vậy, bạn phải xem xét hàng thập kỷ thỏa hiệp toán học đã có trước đó, và cách bạn có thể tái tạo logic cốt lõi của ZOZO chỉ trong vài trăm dòng mã Python. Vấn đề không ai có thể giải quyết hoàn toàn Vải, ở cấp độ mà một kỹ sư vật lý quan tâm, là một lưới các đỉnh được nối với nhau bằng các tam giác. Mỗi đỉnh có một khối lượng và một vận tốc, và ở mỗi bước thời gian, công cụ tích hợp định luật thứ hai của Newton (F = ma) trên tất cả chúng đồng thời. Các lực đến từ trọng lực, từ sức cản đàn hồi của vải và từ bất kỳ bề mặt nào mà vải đang chạm vào. Phần đàn hồi tương đối được giải quyết tốt: mô hình hóa mỗi tam giác như một miếng vật liệu đàn hồi nhỏ, xác định cách nó chống lại sự kéo giãn và cắt, suy ra các lực từ gradient biến dạng. Đó là Phương pháp phần tử hữu hạn tiêu chuẩn và nó hoạt động đủ tốt để không phải là nút thắt cổ chai. Phần va chạm là nơi mọi ý tưởng thông minh cuối cùng đều thất bại. Sơ đồ xử lý va chạm khác nhau, bởi tác giả Cách tiếp cận ngây thơ là lực phạt: khi hai bề mặt chồng lên nhau, đẩy chúng ra xa bằng một lực tỷ lệ với độ sâu xuyên thấu. Đơn giản và nhanh chóng, nhưng về cơ bản là phản ứng: lực đẩy chỉ kích hoạt sau khi xuyên thấu đã xảy ra. Với một bước thời gian lớn, các bề mặt có thể xuyên qua nhau trước khi lực tác động, và nếu bạn làm cho lực phạt đủ cứng để bắt các bề mặt chuyển động nhanh, bạn sẽ gặp phải sự mất ổn định số học làm nổ tung mô phỏng. Một phương pháp cổ điển khác là chiếu ràng buộc: vào cuối mỗi bước, phát hiện các giao cắt và di chuyển rõ ràng các đỉnh ra xa để giải quyết chúng. Phương pháp này ổn định hơn trong thực tế, nhưng không bảo toàn năng lượng một cách chính xác, gây ra sự trôi dạt trong các mô phỏng dài, và trong các cảnh có hàng nghìn điểm tiếp xúc, việc làm cho nó mạnh mẽ trở nên thực sự khó khăn, nó giải quyết một giao cắt và tạo ra thêm hai giao cắt khác. Trong nhiều thập kỷ, đó là những lựa chọn: chấp nhận cắt xén, chấp nhận sự kéo giãn giống như cao su, hoặc chấp nhận rằng mô phỏng của bạn đôi khi sẽ "nổ tung", thường là sự kết hợp của cả ba. Tiếp xúc tiềm năng tăng dần (Incremental Potential Contact): Tiêu chuẩn vàng trong học thuật Năm 2020, một nhóm nghiên cứu học thuật và công nghiệp của Hoa Kỳ đã công bố Incremental Potential Contact (IPC), trong đó định hình lại hoàn toàn vấn đề va chạm. Ý tưởng chính: không mô hình hóa tiếp xúc như một lực hay một ràng buộc. Hãy mô hình hóa nó như một năng lượng. Cụ thể, thêm một số hạng vào tổng năng lượng mà trở nên vô hạn lớn khi hai bề mặt tiếp cận khoảng cách bằng không. Vì mô phỏng chỉ là việc tối thiểu hóa năng lượng, bộ giải sẽ tự nhiên tránh các cấu hình mà các bề mặt gần nhau — không phải vì bạn đã yêu cầu nó, mà vì việc di chuyển vào chúng sẽ tốn năng lượng vô hạn. Sự xuyên thấu trở nên không thể đạt được về mặt toán học, không chỉ bị phạt. Ở mỗi bước thời gian, bạn đang giải: \[ x_{t+1} = \text{argmin}(E_{kinetic}(x) + E_{elastic}(x) + B(x)) \] trong đó B(x) là năng lượng rào cản: một hàm số tăng vọt khi bất kỳ cặp bề mặt nào nằm trong khoảng cách ngưỡng d̂. Rào cản của IPC là logarit: $$ B_{\log}(d)= \begin{cases} -(d-\hat{d})^{2}\log\!\left(\frac{d}{\hat{d}}\right), & dAs d → 0, log(d/d̂) → -∞, so B_log(d) → +∞. Khoảng cách giữa các bề mặt có thể tiệm cận đến 0 nhưng không bao giờ đạt đến 0. Đó là một ý tưởng thực sự thanh lịch, và kết quả đã chứng minh điều đó — các tấm vải mỏng xếp chồng lên nhau, mỗi lớp nằm đúng trên lớp bên dưới, không có sự xuyên thấu. Hình dạng của các rào cản, theo tác giả Tại sao Logarit có hình dạng không phù hợp Đây là điểm tinh tế mà bài báo của ZOZO khai thác. Đạo hàm bậc hai của rào cản logarit (độ cong của nó, trực tiếp xác định độ cứng của hệ thống Newton khi gần tiếp xúc) tăng không giới hạn khi các bề mặt tiếp cận: $$ \lim_{d\to 0^+} B_{\log}”(d)=\infty $$ Điều đó là cần thiết về mặt toán học: bạn cần rào cản trở nên dốc vô hạn tại điểm 0 để đảm bảo năng lượng vô hạn ở đó. Nhưng nó tạo ra một vấn đề nghiêm trọng cho phương pháp Newton. Bất cứ khi nào hai bề mặt gần nhau, hệ thống tuyến tính mà bạn cần giải ở mỗi lần lặp trở nên không ổn định.

Nguồn tin: Towards Data Science — Tác giả: Ferran Alia. Bản dịch tiếng Việt do AI thực hiện, có thể có sai sót.