Thêm XNA Craters (thông qua GPU) với Hiệu ứng Burn Burn


11

Tôi hiện đang làm việc trên một bản sao 2D "Worms" trong XNA và một trong những tính năng là địa hình "có thể biến dạng" (ví dụ khi một tên lửa chạm vào địa hình, có một vụ nổ và một đoạn địa hình biến mất).

Làm thế nào tôi hiện đang làm điều này là bằng cách sử dụng một kết cấu có giá trị Đỏ cao hơn dần dần khi nó tiếp cận trung tâm. Tôi xoay vòng qua từng pixel của kết cấu "Biến dạng" đó và nếu pixel hiện tại trùng với pixel địa hình và có giá trị đỏ đủ cao, tôi sẽ sửa đổi mảng màu biểu thị địa hình thành trong suốt. Nếu pixel hiện tại KHÔNG có giá trị Đỏ đủ cao, tôi sẽ làm đen màu địa hình (nó sẽ càng đen thì giá trị Đỏ càng gần ngưỡng). Vào cuối hoạt động này, tôi sử dụng SetData để cập nhật kết cấu địa hình của mình.

Tôi nhận ra đây không phải là một cách tốt để làm điều đó, không chỉ bởi vì tôi đã đọc về các quầy hàng đường ống và như vậy, mà còn bởi vì nó có thể trở nên khá chậm trễ nếu nhiều miệng hố được thêm vào cùng một lúc. Tôi muốn làm lại Thế hệ miệng núi lửa của mình trên GPU thay vì sử dụng Mục tiêu kết xuất "ping-ponging" giữa mục tiêu và kết cấu cần sửa đổi. Đó không phải là vấn đề, tôi biết làm thế nào để làm điều đó. vấn đề là tôi không biết làm thế nào để giữ hiệu ứng ghi đĩa của mình bằng phương pháp này.

Đây là cách hiệu ứng ghi hình ngay bây giờ:

Hiệu ứng bỏng

Có ai có ý tưởng làm thế nào tôi có thể tạo ra một hiệu ứng ghi tương tự (làm tối các cạnh xung quanh miệng núi lửa đã hình thành) không? Tôi hoàn toàn xa lạ với Shader nhưng nếu nó đòi hỏi tôi sẽ thực sự biết ơn nếu có ai đó hướng dẫn tôi cách làm. Nếu có bất kỳ cách nào khác cũng sẽ rất tuyệt.


Điều này có thể giúp: gamedev.stackexchange.com/q/6721/1163
Adam Harte

Câu trả lời:


7

Một cách bạn có thể làm nó tương tự như những gì bạn đã và đang làm. Có kết cấu "Thiệt hại" và kết cấu nền thực tế, nhưng thay vì sao chép dữ liệu qua mỗi lần, chỉ cần giữ hai kết cấu làm hai kết cấu riêng biệt.

Khi một vụ nổ được thực hiện, vẽ một vòng tròn trên kết cấu Damage có cạnh hơi trong suốt. Đây sẽ là khu vực "đốt cháy".

Bất cứ khi nào bạn vẽ địa hình, hãy cung cấp cho GPU cả hai kết cấu và để trình đổ bóng của bạn nhân màu (.rgb) của các pixel nền với 1 - giá trị alpha của kết cấu thiệt hại. Loại bỏ các pixel đen hoàn toàn (alpha chúng thành 0 hoặc bạn cũng có thể nhân số này thành alpha (.rgba thay vì .rgb) tùy thuộc vào việc bạn muốn các khu vực bị cháy mờ) và voila!

Tôi nghi ngờ đây là giải pháp tốt nhất , nhưng nó khá giống với những gì bạn đã làm trước đây có thể giúp việc chuyển tiền dễ dàng hơn. Bạn có thể cũng có thể thoát khỏi một mảng của Vector3 (x, y, bán kính) và thực hiện một số phép toán trong shader dựa trên các điểm nổ đó nhưng tôi không chắc về hiệu quả của nó.

Hi vọng điêu nay co ich!


Cảm ơn! Đó cũng là một cách hay để làm điều đó, và tương tự như những gì tôi đang làm bây giờ, như bạn đã nói. Tôi không biết gì về HLSL nhưng tôi chắc chắn sẽ xem xét nó. Một cách khác tôi đã nói tôi có thể làm là bôi đen nó khi tôi đến gần mép miệng núi lửa, nhưng tôi cũng sẽ thử cách này.
Benixo
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.