GLSL Shader Effects: การเคลื่อนไหวเบลออย่างไร?


16

ฉันมีสภาพแวดล้อมแบบ 2D เต็มรูปแบบด้วยสไปรต์ไปรอบ ๆ เป็นแนวนอนตัวละคร ฯลฯ

เพื่อให้ดูทันสมัยยิ่งขึ้นฉันต้องการใช้เอฟเฟกต์การเบลอแบบเคลื่อนไหวซึ่งคล้ายกับเกม FPS สมัยใหม่ (เช่น Crysis) เบลอเมื่อเคลื่อนไหวกล้องอย่างรวดเร็ว

ใน sidecroller เอฟเฟกต์ที่ต้องการคือการเบลอเล็กน้อยนี้เพื่อให้เกิดแนวคิดในการเคลื่อนไหวอย่างรวดเร็วเมื่อกล้องกำลังเคลื่อนไหว หากใครสามารถให้คำแนะนำในการทำสิ่งนี้กับฉันได้ฉันถือว่าเป็นผู้สร้างพิกเซลฉันจะรู้สึกขอบคุณ


เก็บสำเนาบัฟเฟอร์ที่แสดงผลของคุณหลายชุด ตัวอย่างเช่นเบลอสี่เฟรมก่อนหน้าเพื่อสร้างเฟรมปัจจุบันของคุณ นั่นควรสร้างเอฟเฟกต์ที่คุณต้องการ
knight666

@ knight666 คงไม่ดีกว่า (หน่วยความจำแน่นอนความเร็วฉันไม่แน่ใจ) เพื่อเก็บ 1 บัฟเฟอร์พิเศษ (เรียกมันว่า A) และผสมเศษส่วน (พูด 0.75) กับบัฟเฟอร์เอาท์พุท (ไปที่หน้าจอ เรียกว่า B) จากนั้นคัดลอก B ไปยัง A หลังจากนั้น สิ่งนี้จะสร้างค่าเฉลี่ยการหมุนและการเคลื่อนไหวเบลอที่เพิ่มขึ้นจะไม่เสียค่าใช้จ่ายเพิ่มเติม
Elva

1
ฉันต้องการแสดงความคิดเห็น แต่ไม่พบปุ่มแสดงความคิดเห็น อย่างไรก็ตามสิ่งที่ Dave O. พูดว่าน่าจะเป็นทางออกที่ดีที่สุดและสิ่งที่ใช้ในเกมเช่น Crysis มันใช้งานได้ดีเช่นนี้ ในระหว่างการเรนเดอร์ออบเจ็กต์ความเร็วของวัตถุการแสดงผลเป็นบัฟเฟอร์แยก MRT จะทำให้เร็วขึ้นเล็กน้อยและมีหลายวิธีในการคำนวณความเร็ว แต่คุณต้องการท้ายด้วยบัฟเฟอร์เพิ่มเติมที่มีความเร็วสำหรับบัฟเฟอร์การแสดงผลทั้งหมด จากนั้นในส่วนของกระบวนการหลังการประมวลผลขึ้นอยู่กับความเร็วของทุกพิกเซลคุณสุ่มตัวอย่างลงในบัฟเฟอร์สีในทิศทางตรงกันข้ามของ veloc
Arelius

รหัส HLSL / Cg ในรายการ 27-1 ใช้สมการก่อนหน้านี้ในตัวประมวลผลพิกเซลแบบเต็มหน้าจอเพื่อคำนวณตำแหน่งพื้นที่โลกของวัตถุที่แสดงผลที่พิกเซลที่กำหนดโดยใช้บัฟเฟอร์ความลึกและค่าผกผันของกระแส เมทริกซ์มุมมองการฉาย ... HLSL .... ในรหัสของคุณไม่ใช่ GLSL .....

คำตอบ:


6

เก็บสำเนาของ framebuffer สุดท้าย รับเวกเตอร์การเคลื่อนไหวของกล้องและกลับด้าน วาดฉากของคุณตามปกติแล้ววาดเฟรมเฟรมสุดท้ายด้วยออฟเซ็ตเล็กน้อย (กล้องสามเหลี่ยมที่คุณเพิ่งคำนวณ) และ 0.75 อัลฟา ทำซ้ำหลาย ๆ ครั้งตามที่คุณต้องการให้เอฟเฟกต์เบลอ


1
วิธีนี้ง่ายต่อการใช้งาน แต่ยากมากในการปรับแต่ง (มันสามารถดูเหมือนวัตถุที่ทิ้งร่องรอยแทนที่จะเบลอ) อีกวิธีง่าย ๆ คือการ "smear" พิกเซลในทิศทางการเคลื่อนที่ของกล้อง inverted ในการประมวลผลพิกเซล shader
Dave O.

6
ปัญหาหลักของวิธีนี้คือมันขึ้นอยู่กับอัตราเฟรม - มันจะดูแตกต่างกันมากถ้าคุณวิ่งที่ 20 fps เพื่อดูว่าคุณวิ่งที่ 100 fps หรือไม่ ตราบใดที่คุณรับรู้และได้รับผลที่คุณต้องการในอัตราเฟรมที่คุณวิ่งได้มันก็ดี แต่คุณต้องระวังให้ดี
Maximus Minimus

19

ฉันอยากจะแนะนำให้ใช้วิธีนี้: Motion Blur เป็นเอฟเฟกต์หลังการประมวลผล

ง่ายมากที่จะใช้มันเป็นสิ่งที่ฉันใช้ในการสาธิต glsl ของฉันทำลายเกาะ[ลิงค์]


วิธีการนี้จะไกลกว่าการผสมในกรอบที่ผ่านมา ...
สตีเว่น Lu

ตามที่ตอนนี้คำตอบนี้ให้ลิงค์ หากลิงก์เกิดขึ้นในอนาคตไม่มีใครรู้วิธีแก้ปัญหาของพวกเขาได้จริง ลองอย่างน้อยก็เพื่อรวมข้อมูลสำคัญที่ลิงค์มอบให้คุณ

ใช่ทำสำเนาของอินเทอร์เน็ตเพราะสำเนานั้นจะไม่ทำลายทุกวัน: J
SasQ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.