Từ lâu tôi đã muốn thực hiện thuật toán sét 2D dựa trên một ý tưởng tôi thấy trên YouTube . Video là thời gian thực, nhưng nó chạy trên CPU và độ phân giải khá thấp. Tôi tò mò liệu có ai có ý tưởng làm thế nào để làm điều này trên GPU không.
Thuật toán hoạt động theo cách sau:
- Chúng tôi có bản đồ dữ liệu ánh sáng, những bản đồ này giữ màu của vật liệu (ví dụ: kính màu đỏ có 0xFF0000) và pixel đó trong suốt như thế nào.
- Tính toán các giá trị ánh sáng của từng pixel trong các vòng tròn đang phát triển từ một nguồn sáng. Nói cách khác, trước tiên hãy tính các giá trị ngay bên cạnh ánh sáng (8 pixel), sau đó là các lân cận của các pixel này, v.v. Màu của pixel là giá trị của nó từ bản đồ dữ liệu sét, alpha của nó bằng: (alpha của pixel bên cạnh nó gần nhất với nguồn sáng - alpha của riêng nguồn sáng). Vì vậy, nó là một số loại thuật toán đúc tia tính toán giá trị cho từng pixel và có thể xử lý kính màu và sương mù / khói.
Vì vậy, việc thực hiện CPU là khá nhỏ. Vấn đề của tôi là tôi muốn sử dụng nó trong một trò chơi di động, nhưng tôi không biết làm thế nào nó sẽ hoạt động như một shader. Làm thế nào điều này có thể được thực hiện trên GPU (sẽ chạy trên thiết bị di động, vì vậy với OpenGL ES 2.0 / 3.0, có thể với Metal - nếu điều này là không thể thì với OpenCL / CUDA)?
Lưu ý: Tôi không tìm kiếm các triển khai đầy đủ, chỉ là các ý tưởng / mã giả shader làm thế nào điều này sẽ có thể.