Hiệu ứng đổ bóng GLSL: Làm thế nào để làm mờ chuyển động?


16

Tôi có một môi trường 2D đầy đủ, với các họa tiết xung quanh là phong cảnh, nhân vật, v.v.

Để làm cho nó trông hiện đại hơn, tôi muốn thực hiện hiệu ứng làm mờ chuyển động, tương tự như các game FPS hiện đại (tức là Crysis) làm mờ khi di chuyển máy ảnh nhanh chóng.

Trong một sidcroller, hiệu ứng mong muốn là có một vệt mờ nhỏ này xuất hiện để đưa ra ý tưởng về chuyển động nhanh khi máy ảnh đang di chuyển. Nếu bất cứ ai có thể cho tôi một số lời khuyên để làm điều này, tôi giả sử trong một shader pixel, tôi sẽ rất biết ơn.


Giữ nhiều bản sao của bộ đệm kết xuất của bạn. Ví dụ: làm mờ bốn trong số các khung trước đó để tạo khung hiện tại của bạn. Điều đó sẽ tạo ra hiệu ứng bạn muốn.
hiệp sĩ666

@ Knight666 sẽ không tốt hơn (chắc chắn là bộ nhớ, tốc độ tôi không chắc chắn) để giữ thêm 1 bộ đệm (gọi là A) và hơn là trộn một phần (giả sử 0,75) với bộ đệm đầu ra (đi đến màn hình, gọi nó là B) và sau đó sao chép B sang A sau đó. Điều này sẽ tạo ra một trung bình lăn và làm mờ chuyển động tăng sẽ không tốn thêm bất cứ điều gì.
Elva

1
Tôi có ý định đưa ra nhận xét này, nhưng không thể tìm thấy nút bình luận. Dù sao, những gì Dave O. nói có lẽ là bạn đặt cược tốt nhất và những gì được sử dụng trong các trò chơi như Crysis. Điều này hoạt động một chút như thế này. Trong quá trình kết xuất đối tượng, Kết xuất vận tốc của đối tượng vào một bộ đệm riêng. Tàu điện ngầm sẽ làm việc này nhanh hơn một chút và có nhiều cách để tính vận tốc, nhưng bạn muốn kết thúc với một bộ đệm bổ sung có vận tốc cho toàn bộ bộ đệm kết xuất. Sau đó, trong một shader hậu xử lý, dựa trên vận tốc ở mọi pixel, bạn lấy mẫu vào bộ đệm màu theo hướng ngược lại của vận tốc
Arelius

Mã HLSL / Cg trong Liệt kê 27-1 sử dụng các phương trình trước đó trong trình đổ bóng pixel xử lý hậu màn hình toàn màn hình để tính toán vị trí không gian thế giới của các đối tượng được hiển thị tại một pixel nhất định, sử dụng bộ đệm độ sâu và nghịch đảo của dòng điện ma trận xem-chiếu. ... HLSL .... Trong mã của bạn, nó không phải là GLSL .....

Câu trả lời:


6

Giữ một bản sao của bộ đệm khung cuối cùng. Lấy vector chuyển động của camera và đảo ngược nó. Vẽ cảnh của bạn như bình thường, sau đó vẽ bộ đệm khung cuối cùng với độ lệch nhẹ (delta camera bạn vừa tính) và 0,75 alpha. Lặp lại nhiều lần bạn muốn để tạo hiệu ứng mờ chuyển động.


1
Cách tiếp cận này rất dễ thực hiện nhưng rất khó để tinh chỉnh (nó có thể trông giống như các vật thể để lại dấu vết thay vì bị mờ). Một cách tiếp cận đơn giản khác là "làm mờ" các pixel theo hướng chuyển động của camera ngược trong trình đổ bóng pixel xử lý bài.
Dave O.

6
Vấn đề chính của phương pháp này là nó phụ thuộc vào tốc độ khung hình - nó sẽ trông rất khác nếu bạn chạy ở tốc độ 20 khung hình / giây so với giao diện nếu bạn chạy ở tốc độ 100 khung hình / giây. Miễn là bạn nhận thức được điều đó và nhận được kết quả mà bạn muốn ở tốc độ khung hình mà bạn chạy thì không sao, nhưng bạn cần phải nhận thức được điều đó.
Maximus Minimus

19

Tôi khuyên bạn nên sử dụng phương pháp này: Motion Blur như một hiệu ứng hậu xử lý

Rất đơn giản để thực hiện, đó là cái tôi đã sử dụng trong bản demo glsl đảo Ruin [link]


Phương pháp này vượt trội hơn nhiều so với pha trộn trong các khung hình trong quá khứ ...
Steven Lu

Như bây giờ, câu trả lời này chỉ cung cấp một liên kết. Nếu liên kết bị phá vỡ trong tương lai, không ai sẽ biết làm thế nào để thực sự giải quyết vấn đề của họ. Hãy thử ít nhất để bao gồm các thông tin cần thiết mà liên kết cung cấp cho bạn

Vâng, hãy tạo một bản sao của Internet, vì bản sao đó hoàn toàn sẽ không bị
hỏng
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.