กล้องสมจริง / หน้าจอเขย่าจากการระเบิด


36

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

ไม่มีใครรู้รูปแบบการเขย่ากล้องที่ดีหรือไม่?


2
ลองค้นหาวิดีโอจากภาพยนตร์เรื่องกล้องสั่นหลังจากการระเบิดและดูในแบบสโลว์โมชั่นเพื่อดูว่ากล้องสั่นไหวและยึดรหัสของคุณไว้อย่างไร
Skizz

ฉันมีปัญหาเดียวกันแน่นอน - โยกเยกเพียงแค่ดูเรียบเกินไป
Iain

ปัญหาที่ใหญ่ที่สุดที่ฉันเผชิญเมื่อใช้การสั่นของกล้องคือดูเหมือนว่าตัวละครของผู้เล่น (ซึ่งกล้องโฟกัส) จะเคลื่อนไหวแทนกล้อง สิ่งที่แปลกคือมันเป็นกล้องที่เคลื่อนไหวถ้าคุณมองไปรอบ ๆ คุณสังเกตเห็น แต่เนื่องจากคุณมุ่งเน้นไปที่ตัวละครผู้เล่นการรับรู้ของคุณจะได้รับการเมา ฉันยังคงพยายามที่จะแก้ปัญหานี้ - อาจเปลี่ยนมุมมองเมื่อกล้องเคลื่อนไป / ไปยังผู้เล่น
Kaj

คำตอบ:


35

ฉันได้กล้องสั่นที่ดีโดยใช้เสียง Perlin กับทิศทางของกล้อง มันช่วยให้คุณตีใหญ่ที่เหมาะสมด้วยการเขย่าความถี่สูงในตัวและสามารถดูดีมาก

http://mrl.nyu.edu/~perlin/doc/oscar.htmlมีรายละเอียดเพิ่มเติมและรหัสตัวอย่างสำหรับการสร้างเสียงรบกวน


3
โอ้เสียงทำไมฉันไม่คิดอย่างนั้น ... บางสิ่งบางอย่างฉันค่อนข้างระเบิดเสียงไม่สั้น ... ความคิดที่ยอดเยี่ยม!
falstro

ความคิดที่ดีมีอะไรที่คุณไม่สามารถใช้เสียง perlin เพื่อแก้ปัญหา? : P
Cubed2D

1
เสียงรบกวนเป็นวิธีที่แน่นอนถ้าคุณนึกภาพผลกระทบของคุณหลังจากนั้นการเปลี่ยนแปลงแบบสั้น ๆ ของการเคลื่อนไหวแบบสุ่มในทิศทางที่แตกต่างกัน แต่มันไม่สามารถเป็นอาการกระตุกได้ดังนั้นคุณต้องมีช่วงสั้น ๆ ของความสม่ำเสมอ เสียงเหมือนการใช้งานที่สมบูรณ์แบบสำหรับเสียง Perlin
deceleratedcaviar

17

หากคุณอ้างถึงหน้าจอสั่นสะเทือนจากการระเบิดฉันได้ลองใช้มันในเกมต้นแบบของฉัน (มันเป็น 2d แต่ควรแปลเป็น 3d ค่อนข้างดีฉันคาดหวัง) ลองดูที่วิดีโอ youtubeและดูว่าเป็นสิ่งที่คุณกำลังมองหาหรือไม่หน้าจอสั่นเตะออกประมาณ 1:35

อย่างไรก็ตามวิธีที่ฉันประสบความสำเร็จก็คือการสร้างวิวพอร์ตสำหรับ sceen และเก็บจุดศูนย์กลาง ( centre)

เมื่อการระเบิดเริ่มต้นขึ้นฉันสร้างแบบสุ่มradius~ 30px จากนั้นฉันจะชดเชยวิวพอร์ตจากcentreพิกเซลจำนวนมากนี้ในทิศทางแบบสุ่ม

สำหรับการอัปเดตแต่ละครั้งในภายหลัง (ระหว่างการดึงหน้าจอ) ฉันลดลงradius10-20% และชดเชยวิวพอร์ตด้วยพิกเซลจำนวนมากนี้จากcentreอีกครั้ง อย่างไรก็ตามแทนที่จะเลือกมุมสุ่มสำหรับออฟเซ็ตนี้ฉันแทนมุมมองก่อนหน้าของมุมมองจากcentreและเพิ่ม 180 +/- 60 องศา

ดังนั้นโดยทั่วไปการอัปเดตแต่ละครั้ง (หรือ 10-20ms หรือมากกว่านั้น) ฉันชดเชยออฟเซ็ตวิวด้วยจำนวนพิกเซลที่ลดลงจากcentreหน้าจอ

นี่คือรหัสเทียมบางส่วน:

viewportCentre = (400,300) //Lets say screen size is 800 x 600
radius = 30.0
randomAngle = rand()%360
offset = ( sin(randomAngle) * radius , cos(randomAngle) * radius) //create offset 2d vector
viewport.setCentre(viewportCentre + offset) // set centre of viewport
draw()  

while(true)  //update about every 10-20ms
{ 
    radius *=0.9 //diminish radius each frame
    randomAngle +=(180 +\- rand()%60) //pick new angle 
    offset = (sin(randomAngle) * radius , cos(randomAngle) * radius) //create offset 2d vector
    viewport.setCentre(viewportCentre + offset) //set centre of viewport
    draw() //redraw
}

ฉันมักจะหยุดสั่นหน้าจอเมื่อรัศมีได้รับต่ำกว่า 2.0 centreจุดที่ผมตั้งค่าวิวพอร์ตกลับไป


4
ฉันชอบการติดตั้งนี้มากใช้งานได้ดีกับเกม 2D ขนาดเล็ก ในฐานะที่เป็นความคิดเห็นมันเทียบเท่ากับการทำrandomAngle += (150 + rand()%60)เพื่อกำจัดปัญหา +/- ใด ๆ
Krøllebølle

2
วิดีโอของคุณไม่ทำงาน
ธารา

การคำนวณแบบ "+/-" เป็นแบบไหน? ฉันไม่เคยเห็นอะไรแบบนี้มาก่อน
Yoo Matsuo

4

การทำให้กล้องสั่น "รู้สึก" ถูกต้องจะมีน้อยกว่าเกี่ยวกับทิศทางของการเคลื่อนไหวและเพิ่มเติมเกี่ยวกับเส้นโค้งการเร่งความเร็ว

กล้องสั่นกำลังดำน้ำเข้าไปในดินแดนของภาพเคลื่อนไหวและดังนั้นจึงใช้กฏการกระทำ / ปฏิกิริยาทั้งหมด หากคุณกำลังเคลื่อนไหวในลักษณะเชิงเส้นจากจุดหนึ่งไปอีกจุดหนึ่งมันจะรู้สึกราบรื่นและสม่ำเสมอและไม่เหมือนการกระแทก

หากคุณสั่นศีรษะไปมาคุณจะสังเกตเห็นว่ามันเคลื่อนที่เร็วที่สุดที่จุดกึ่งกลางระหว่างการเปลี่ยนทิศทางและช้าลงในแต่ละด้านในขณะที่คุณต้องชะลอตัวลงก่อนแล้วจึงเริ่มขึ้นในทิศทางใหม่

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


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

3

wkerslake ถูกต้องกล้องสั่นดูเหมือนจะซับซ้อนกว่าที่คุณคิด

เมื่อลอกเลียนแบบกล้องสั่นคุณต้องคิดว่าคุณต้องการเลียนแบบกล้องประเภทใด (ผู้ดำเนินการ) น้ำหนักของกล้องมีผลต่อความเฉื่อยเช่น กล้องที่หนักกว่าจะเคลื่อนไหวอย่าง 'สุ่ม' อย่างนุ่มนวล ผู้ประกอบการกล้องบนรางหรือในรถเพิ่มเสียงรบกวนเพิ่มเติม

การใช้เสียง Perlin หรือ Simplex เป็นตัวเลือกแน่นอนแล้วมันคือทั้งหมดที่เกี่ยวกับการหาสมดุลที่เหมาะสมระหว่างอัตราส่วนเสียงรบกวนที่แตกต่างกัน แต่ฉันพบว่าการใช้การแก้ไขระหว่างค่านั้นมีความเข้มข้นน้อยกว่าการคำนวณและอาจมีประสิทธิภาพ

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

นอกจากนี้คุณอาจต้องการดูGran Turismo (5)ทีมของพวกเขาทำงานที่น่าประทับใจในการทำกล้องเรียลไทม์ประเภทต่างๆเมื่อคุณดูรีเพลย์ในเกม


2

หากคุณมีฟิสิกส์วัตถุแบบไดนามิก [อาจไม่ใช่คำที่ถูกต้อง แต่เป็นสิ่งที่ฉันหมายถึง] ซึ่งวัตถุใด ๆ ที่ไม่คงที่จะถูก 'ระเบิด' โดยการระเบิดคุณอาจได้รับผลกระทบจากกล้องเป็นวัตถุเช่นนั้น
ความแตกต่างเพียงแค่เปลี่ยนการหมุน / พิตช์ / หันเห / ม้วนของกล้องไม่ใช่ตำแหน่ง
นอกจากนั้นอาจสร้างลำดับเลขสุ่มและแปลงให้เป็นการหมุนอย่างใด? คิดว่า heightmap, ระดับสีเทาสิ่งอาจเป็นตัวอย่าง; ไม่แตกต่างกันโดยสิ้นเชิง แต่สุ่ม


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