Vẽ các hạt như một đốm mịn


12

Tôi mới phát triển trò chơi / đồ họa và tôi đang chơi xung quanh với các hạt (ở dạng 2D). Tôi muốn vẽ các hạt gần nhau như một đốm màu, giống như chất lỏng / nước. Tôi không muốn vẽ các vòng tròn lớn chồng lên nhau vì blob sẽ không được trơn tru (và quá lớn). Tôi không thực sự biết vật lý nhưng tôi cho rằng những gì tôi muốn là thứ gì đó trông tương tự như sức căng bề mặt.

Tôi chưa thể tìm thấy bất cứ điều gì trên stackexchange hoặc trên Google (có thể tôi không biết từ khóa chính xác?). Cho đến nay tôi đã tìm thấy hai giải pháp khả thi, nhưng tôi không thể tìm thấy bất kỳ thông tin cụ thể nào về thuật toán.

Một trong số đó là tính toán vỏ lõm của các hạt mà tôi coi là một đốm màu. Tôi có thể tính toán blob bằng cách tạo một lớp tương đương (trên mối quan hệ "gần nhau"). Thật kỳ lạ, tôi không thể tìm thấy bất kỳ thuật toán nào giải thích cách tính vỏ tàu lõm. Nhiều bài đăng (và trong số stackexchange) liên kết đến các thư viện hoặc sản phẩm thương mại làm điều này (tôi cần các thư viện để làm việc trong C #), nhưng không bao giờ có bất kỳ thuật toán nào. Ngoài ra, giải pháp này có thể có vấn đề với một vòng tròn các hạt, sẽ không phát hiện ra khoảng trống ở giữa.

Trong khi nghiên cứu thân tàu lõm, tôi tình cờ phát hiện ra một thứ gọi là hình dạng alpha. Dường như đó chính xác là những gì tôi muốn làm, tuy nhiên cũng giống như với thân tàu lõm tôi không tìm thấy bất kỳ nguồn nào giải thích cách chúng thực sự hoạt động. Tôi đã tìm thấy một số tài liệu thuyết trình nhưng không đủ để tiếp tục. Nó giống như một bí mật lớn mà mọi người đều biết ngoại trừ tôi: - /

Sau khi tính toán thân tàu lõm hoặc hình dạng alpha, tôi muốn biến nó thành một đường cong Bézier để làm cho nó mịn và đẹp.

Mặc dù tôi thấy cách tiếp cận của mình hơi phức tạp, nhưng có lẽ tôi đang cố gắng giải quyết điều này sai cách? Nếu bạn có thể đề xuất bất kỳ giải pháp nào khác cho vấn đề của tôi, hoặc giải thích những phần tôi đang thiếu tôi sẽ rất vui và biết ơn :-)

Cảm ơn.



@BlueRaja Cảm ơn bình luận của bạn. Mặc dù tôi đã tìm thấy bài đăng đó nhưng đã loại bỏ nó vì các câu trả lời liên kết đến các bài báo không trực tiếp giải quyết vấn đề của tôi, nhưng tài liệu tham khảo của họ có thể hoặc bằng sáng chế mà tôi không thể sử dụng một cách công khai (tôi nghĩ, tôi không tốt với quan liêu) (Tôi thậm chí không tìm thấy liên kết tải xuống nào).
Nömmik

1
Bằng sáng chế "khối hành quân" đã hết hạn vào năm 2005, hầu hết các ví dụ 2D đều cũ hơn nhiều và đó là lý do tại sao bạn có thể thấy chúng cảnh báo bạn về việc sử dụng chúng trên các trang web cũ.
Patrick Hughes

1
Đây là một bài viết gamedev đi sâu vào cả metaballs và isosurfaces, với một số mẫu để làm cho các ý tưởng rõ ràng: link
Patrick Hughes

Cảm ơn vì đã khai sáng cho tôi về siêu thị, họ dường như làm những gì tôi muốn :-)
Nömmik

Câu trả lời:


8

Từ khóa bạn có thể cần là "Metaballs" và nằm trong khoảng từ mẫu GPU nVidia GPU phức tạp cho đến các phiên bản điều khiển cảnh thử nghiệm được thiết kế chỉ để trông đẹp và chạy nhanh.


Thật vậy, tôi không biết từ khóa :-) Tôi sẽ xem xét kỹ hơn về nó và nếu nó có vẻ là thứ tôi cần, thì tôi sẽ chấp nhận câu trả lời của bạn. Cảm ơn!
Nömmik

1
+1 cho tôi nghĩ đó là "thịt viên" trước khi tôi đọc nó lần thứ hai.
James

2
Bạn có thể thêm một chút chi tiết cho câu trả lời này? +1 nếu bạn làm.
Tấn

@James Tôi nghĩ rằng mọi người đều mắc lỗi đó ngay lần đầu tiên họ nhìn thấy từ này!
Jeff

1

Để chuyển đổi một nhóm các hạt thành một lưới để có thể kết xuất, kiểu siêu dữ liệu, bạn có thể xem thuật toán Marching Cubes , tạo ra một lưới đa giác từ dữ liệu voxel. Có một bản demo demoscene có một ví dụ tuyệt vời về điều này, với mọi thứ được tạo ra trên GPU: tê liệt .


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.