นักออกแบบเกมสร้างรูปแบบการสั่นสะเทือนได้อย่างไร


13

ฉันอยากรู้เกี่ยวกับการสร้างและการใช้รูปแบบการสั่นสะเทือนสำหรับตัวควบคุมคอนโซล (สำหรับตัวควบคุม PS4 หากสร้างความแตกต่าง)

มีความล่าช้าและพารามิเตอร์ความเร็วของมอเตอร์ใช่ไหม? แต่เราสามารถจางหายไปจากมอเตอร์ซ้ายไปขวาหรือทำให้มันทำงานร่วมกันได้ ....

มีวิธีมาตรฐานในการสร้างรูปแบบเหล่านั้นหรือไม่

ตัวอย่างเช่นฉันคิดเกี่ยวกับการสร้างพวกเขาด้วยระบบเสียงสเตอริโอ wav ในโปรแกรมแก้ไขเสียงและอ่านไฟล์ wav ในรหัสของฉันเพื่อแปลงให้เป็นความล่าช้าและความเร็ว

สิ่งนี้จะเกิดขึ้นได้อย่างไรในอุตสาหกรรมเกม


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

คุณไม่สามารถควบคุมเสียงดังก้องได้อย่างแม่นยำ ยิ่งไปกว่านั้นใน DualShock เสียงเรียกเข้าด้านซ้ายหนักและอันที่เหมาะสมคือแสงดังนั้นคุณจะได้ความถี่ต่ำจากด้านซ้าย (ฉันอาจมีซ้าย / ขวาย้อนกลับ แต่คุณได้ความคิด)
Almo

@Almo แล้วระบบดังก้อง HD ของ Nintendo คุณมีรูปแบบการควบคุมที่แน่นอน
Bálint

ซึ่งจะเปิดเผยคำถามให้กว้างเกินไป จริง ๆ แล้วฉันไม่รู้เกี่ยวกับระบบของพวกเขา
Almo

1
@DMGregory เอ็นจิ้นเสียงที่ฉันรู้ว่าจัดการกับเสียงดังก้อง / haptics เพียงแค่ใช้ทริกเกอร์ซองจดหมายและอื่น ๆ - ไม่ใช่รูปคลื่นเสียง เช่นเดียวกับ Almo ที่กล่าวว่าคุณไม่มีระดับการควบคุมในระดับ API ฉันนึกภาพไม่ออกว่าระบบของ Nintendo นั้นแตกต่างกันมาก - คุณไม่ต้องการอัปเดตระบบเสียงดังก้องใด ๆ ที่ความถี่สูงเช่นนี้ซึ่งข้อมูลเสียงที่แท้จริงเป็นตัวเลือกที่ดี
Richard Byron

คำตอบ:


8

คอนโทรลเลอร์ dualshock PS4 มีค่า 1 ไบต์สำหรับชุดเสียงก้องซ้ายและขวาดังนั้นโดยทั่วไปจะใช้งานได้เหมือนเพลง 8 บิต

สิ่งเหล่านี้ส่วนใหญ่อยู่หลัง NDA ดังนั้นจึงยากที่จะรับข้อมูลใด ๆ เกี่ยวกับสิ่งนี้ (แม้ข้อมูลข้างต้นนั้นยากที่จะหาได้ฉันหาได้จาก SDK ของบุคคลที่สามสำหรับ node.js เท่านั้น) นี่คือข้อมูลที่ฉันสรุปไว้ด้วยกัน:

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

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

PS4 SDK ยังมาพร้อมกับรูปแบบที่กำหนดไว้ล่วงหน้า ตัวอย่างคือรูปแบบของฟันเลื่อย (เพิ่มขึ้นอย่างต่อเนื่องจาก 255 ถึง 0) คลื่นไซนัสและรูปสามเหลี่ยม (เพิ่มขึ้นเป็น 255 เชิงเส้นจากนั้นกลับลงไปที่ 0 เชิงเส้น)

ฉันไม่สามารถหารายละเอียดเกี่ยวกับตัวควบคุมอื่น ๆ ได้ (โดยเฉพาะอย่างยิ่งเสียงก้อง HD ของ Switch ไม่แม้แต่สิทธิบัตรจะอธิบายวิธีการทำงาน) แต่พวกเขาอาจใช้วิธีที่คล้ายกันกับชุดรัมเบิลที่แม่นยำกว่า

แหล่งที่มา:


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

@DMGregory คุณจะรังเกียจไหมถ้าฉันจะเพิ่มส่วนนั้นลงในส่วนแหล่งข้อมูล
Bálint

กรุณาทำ :) ฉันแบ่งปันมันหวังว่าจะใช้งานได้
DMGregory

4

ไม่มีวิธีมาตรฐาน

อุปกรณ์ต่าง ๆ มีความสามารถและข้อ จำกัด ที่แตกต่างกัน

อุปกรณ์ส่วนใหญ่ไม่รองรับ "กำลังป้อนกลับ" (เช่น: พวงมาลัยที่เมื่อกดปุ่มขอบถนน / หลุมบ่อจะอนุญาตให้โปรแกรมเมอร์ผลักกลับไปยังมุมที่เฉพาะเจาะจง) แต่ก็ดังก้องไปในทิศทางที่ไม่สามารถควบคุมได้

ดังนั้นฟีเจอร์ Force Feedback ที่กล่าวถึงใน MSDN / DirectX และ API อื่น ๆ ไม่เคยปรากฏจริงในตลาดผู้ใช้หรือมีการใช้งานที่ไม่ดีและ / หรือไม่พกพาของตัวควบคุม "สมาร์ท" (ซองจดหมายซ้ำ ฯลฯ ) จะใช้ไม่ได้จนในทางปฏิบัตินักพัฒนามักจะถูกบังคับให้ใช้ตัวควบคุมเปิด / ปิดโดยตรงกับการใช้เอฟเฟกต์ของตนเอง

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

การเพิ่มเทคโนโลยีที่เกิดขึ้นใหม่เช่นถุงมือความรู้สึก VR ลงในส่วนผสมทำให้ API ทั่วไปเหล่านั้นขาดไปมากกว่านี้


การนำไปใช้ที่พบบ่อยที่สุดคือมอเตอร์ DC สองตัวที่มีน้ำหนักไม่สมดุลแต่ละตัวน้ำหนักที่หนักกว่าตัวอื่นและไม่มีการควบคุมความเร็วที่แม่นยำ

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

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

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

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

อุปกรณ์มือถือมักจะมีมอเตอร์สั่นเพียง 1 ตัวและ PWM อาจไม่สามารถทำได้เนื่องจากความเฉื่อยต่ำจากขนาดของน้ำหนักและอัตราการอัปเดตช้า ระบบอาจกรองเพิ่มเติมเพื่อป้องกันการละเมิดหรืออาจเกิดความเสียหาย (ขีด จำกัด ของตัวขับเคลื่อนพลังงานและการเหนี่ยวนำแหลม) หรือเพียงแค่ระบบย่อย GPIO ที่ช้ามาก ๆ

บนมือถือคุณอาจถูก จำกัด หรือต้องการ จำกัด ตัวเองให้ "สั่นสำหรับ X * 50 มิลลิวินาทีโดยประมาณ" โดยไม่ต้องใช้ PWM

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


เพราะความแตกต่างเหล่านี้คุณอาจต้องการนามธรรมระบบสั่นสะเทือนที่จะเล่นในจำนวนที่ จำกัด ระดับสูงมหภาคผลกระทบโดยใช้ชื่อในการยิงและลืมแฟชั่น: PlayVibration(player, "Got Loot");, PlayVibration(player, "Heavy Fall");, StopAllVibrationFor(player);...

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

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

ในขณะที่อุปกรณ์ที่มีก้องขดลวดแม่เหล็กไฟฟ้าเป็นตัวขับเคลื่อนที่เกิดขึ้นจริงสามารถรักษาได้เช่นอุปกรณ์เสียงและใช้ API เสียงเนื่องจากความกังวลแบตเตอรี่นี้อาจวิ่งปะทะกันของกฎระเบียบของระบบถ้าขดลวดแม่เหล็กไฟฟ้าที่มีการขับเคลื่อนอย่างต่อเนื่อง / การใช้งาน "พลังงานระดับ 0" อาจไม่เหมือนกับ "โซลินอยด์ปิด" ดังนั้นแม้ต้องใช้ความระมัดระวังเป็นพิเศษ


3

จากAndré LaMothe ในเคล็ดลับการเขียนโปรแกรมเกม Windows:

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

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

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

ในแง่ของ PS4 สิ่งเดียวที่ฉันเปิดใช้คือเอกสาร Unreal Engine 4ซึ่งระบุ:

(ตัวระบุ) เหล่านี้จะถูกแมปตามการใช้งานเฉพาะแพลตฟอร์ม ตัวอย่างเช่น PS4 จะฟังเฉพาะช่อง XXX_LARGE และไม่สนใจส่วนที่เหลือในขณะที่ XBox One สามารถแมป XXX_LARGE กับที่จับมอเตอร์และ XXX_SMALL กับไกมอเตอร์ และ iOS สามารถแมป LEFT_SMALL กับมอเตอร์เดี่ยวได้

ตามคำตอบของ Stephane Hockenhull แสดงว่าแต่ละแพลตฟอร์มนั้นแตกต่าง และตามที่แนะนำในการแชทของ GDSEอาจเป็นไปได้ว่ารายละเอียดสำหรับ PS4 feedback feedback API นั้นเป็นข้อ จำกัด ของ NDA

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