วิธีการใช้ 3D ปลอมเช่นเอฟเฟกต์การบิดเบือนสำหรับเกมเลื่อนด้าน 2D


14

ฉันไม่แน่ใจในคำศัพท์ที่เหมาะสมในการค้นหาหรือแม้กระทั่งที่จะเริ่มต้นแม้ว่าฉันจะจินตนาการว่ามันเป็นลักษณะพิเศษของการประมวลผลโพสต์

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

  • มีคำสำหรับผลกระทบนี้หรือไม่?
  • วิธีมาตรฐานในการใช้เอฟเฟกต์นี้ (คำศัพท์) คืออะไร?
  • ฉันจะดำเนินการเกี่ยวกับการใช้เอฟเฟกต์เช่นนี้ในเอ็นจิ้นระดับสูง / กรอบเช่น Unity หรือ XNA / Monogame จากมุมมอง 20,000 ฟุตได้อย่างไร (รหัสรายละเอียดได้รับการยอมรับอย่างมีความสุข แต่ไม่จำเป็น - ฉันตระหนักถึงรายละเอียดการใช้งานที่แน่นอนอาจแตกต่างกัน แต่รายละเอียดในระดับสูงเกี่ยวกับสิ่งที่ต้องทำจะได้รับการชื่นชมอย่างมาก)

ฉันต้องการเป็น Boshy ฉันต้องการที่จะเป็น Boshy

คุณต้องชนะเกม ป้อนคำอธิบายรูปภาพที่นี่


ใช่. ฉันมักจะอยากรู้ว่ารู้คำศัพท์ที่แน่นอนสำหรับเทคนิคนี้อย่างไร ดีที่สุดที่ฉันคิดได้คือ "เอฟเฟ็กต์หน้าจอทีวีเก่า"
Tofu_Craving_Redish_BlueDragon

แน่นอน! และนั่นใช้ได้เฉพาะกับตัวอย่างหลัง
SpartanDonut

คำตอบ:


7

สิ่งนี้สามารถนำไปใช้เป็นลักษณะพิเศษหลังการประมวลผล (เมื่อใช้ Unity / XNA / Dx / OGL / ... )

วิธีการทางเรขาคณิต

เริ่มต้นด้วยการสร้างตาข่ายที่มีเอฟเฟกต์การบิดเบือนที่คุณต้องการให้เกิด (เช่นทำโมเดลครึ่งกระบอก (หรือกรวย, ทรงกลม, ลูกบาศก์, ... ) ตรวจสอบให้แน่ใจว่าได้ตั้งค่าพิกัดพื้นผิว) แสดงผลเกม 2D ของคุณตามปกติ แต่ให้ผลลัพธ์สุดท้ายเป็นพื้นผิว จากนั้นแสดงรูปทรงเรขาคณิตที่ผิดเพี้ยนกับพื้นผิวที่คุณเพิ่งสร้างขึ้น คุณสามารถใช้โลก / มุมมอง / การฉายภาพหรือปรับเปลี่ยนพิกัดเรขาคณิต / พื้นผิวที่เกิดขึ้นจริงเพื่อควบคุมความแข็งแรงของการบิดเบือน (ภาพที่ 1 แสดงเกม 2D ปกติภาพที่ 2 แสดงพื้นผิวแบบเดียวกันที่คาดการณ์ไว้บนทรงกลม)

ตัวอย่างเกม ตัวอย่างที่ฉายลงบนทรงกลม (ใช้เครื่องปั่น)

วิธีการผิดเพี้ยน

เครื่องมือประมวลผลภาพมักจะให้เอฟเฟกต์การบิดเบือนที่สามารถเลียนแบบการฉายภาพ (บิตเช่นภาพลวงตา) ตัวอย่างเช่นภาพที่ 3 ถูกสร้างขึ้นโดยใช้ตัวกรองนูนจาก Paint.Net

นูนนูน.

(คุณสามารถค้นหาการนำไปใช้ (OpenGL ES 2.0) ของเอฟเฟกต์การบิดเบือนนี้จากโครงการGPUImage - ดู GPUImageBulgeDistortionFilter)

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


คำตอบที่ยอดเยี่ยม!
Tholle

1
ทั้งสองต้องการการประมวลผลภาพในจำนวนเดียวกัน การฉายภาพจะไม่เร็วไปกว่าการไม่ทำอะไรเลยและการประมวลผลภาพก็มีค่าใช้จ่ายเหมือนกัน - วิธี "การบิดเบือน" เร็วขึ้นเพราะคุณข้ามการแปลงจุดสุดยอดและการแรสเตอร์อีกทั้งคุณยังให้อิสระแก่ผู้ขับขี่ในการย้ำพิกเซลซึ่งวิธีการรูปหลายเหลี่ยมนั้นมีความเฉพาะเจาะจงมากขึ้นเกี่ยวกับลำดับการวาดในที่สุดรูปหลายเหลี่ยม เก็บข้อมูลเกี่ยวกับผลกระทบที่คุณตั้งใจไว้น้อยลงหันไปใช้วิธีแก้ปัญหาทั่วไปซึ่งเน้นฮาร์ดแวร์การกรองพื้นผิวและสร้างการประมาณแทนตัวกรองจริง
MickLH

@MickLH: จุดยอดสำหรับโปรเจ็กต์การโพสต์การประมวลผลดังกล่าวสามารถคำนวณแบบออฟไลน์หรือโหลดได้ซึ่งเป็นจุดสุดยอดการส่งผ่านที่มีราคาถูกมาก สำหรับตัวกรองนูนแบบเต็มหน้าจอจะต้องแสดงผลและ rasterized ด้วย (ยกเว้นถ้า SpartanDonut มีการเข้าถึงเช่นเฉดสีคำนวณ) และสำหรับทุกพิกเซลจะต้องคำนวณออฟเซ็ตแทนการแทรกสอด ดังนั้นฉันเชื่อว่า (ขึ้นอยู่กับเครื่องมือที่มีและการนำไปใช้) ทั้งสองวิธีอาจเร็วพอ ๆ กัน ฉันได้อัปเดตคำตอบแล้วขอบคุณสำหรับข้อมูลของคุณ
Miklas
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.