การคำนวณวิถีกระสุนฟังดูเรียบง่าย แต่พอได้ทำจริงมันไม่ใช่ และซับซ้อนกว่าที่คิด
การพัฒนาเกมในบางส่วน บางทีเราอาจจะคิดว่าเป็นเรื่องเข้าใจง่าย ๆ แค่เข้าใจภาษาคอมพิวเตอร์ก็พอแล้ว แต่ถ้ามาลองได้ศึกษาจริง ๆ มันก็ไม่ต่างจากการเรียนวิชาวิทยาศาสตร์ เมื่อคุณเข้าใจถึงแก่นแท้ที่แม้จุดเล็ก ๆ ก็สามารถแตกย่อยเหมือนกับรากต้นไม้ วิถีกระสุนก็ไม่ต่างกัน มันมีทั้งวิธีที่ง่าย/ยาก ผลลัพธ์แตกต่างออกกันไป และมันซับซ้อนกว่าที่คิด
นี่จะเป็นบทความ “วิถีกระสุนในวีดีโอเกม มีวิธีการสร้างอย่างไร” จะเป็นพูดถึงวิธีการคำนวณฟิสิกส์ของปืนมันไม่ได้จบอยู่เพียงสคริปสั้น ๆ 4 ประโยคก็จบแล้ว
*บทความนี้จะเป็นการอธิบายให้เห็นภาพเท่านั้น มิได้เป็นข้อมูลลึกเพื่อการศึกษาแล้วนำไปพัฒนาทักษะการทำเกมคอมพิวเตอร์แต่อย่างใด
Hitscan
ในช่วงยุคเริ่มต้นของวีดีโอเกม ไม่ว่าจะเป็นปี ’80, ’90 หรือยุค ’00 เทคโนโลยียังไม่ก้าวไกลเท่ากับปัจจุบัน ตอนนั้นทีมผู้พัฒนาเกมจะใช้ระบบที่เรียกว่า Raycasting เพื่อที่จะประมวลผลสภาพแวดล้อมจากรูปแบบ 3 มิติ มาแปลรูปเป็นรูปภาพ 2 มิติในภาพหน้าจอมอนิเตอร์ (ง่าย ๆ คือ ยังคงเป็น 3 มิติ แต่แสดงผลเป็น 2 มิติ)
ซึ่งระบบ Raycasting สามารถตรวจจับวัตถุตัวแรกด้วยการตัดวัตถุด้วยรังสีได้ จากนั้นผู้พัฒนาก็ได้ปิ๊งไอเดียว่า “ถ้าเกิดพวกเราใช้รังสีตัวนี้มาไว้วางหน้าปากกระบอกปืน แล้วนำมาเป็นกระสุนปืนจะดีไหม ?” และนั้นก็คือจุดเริ่มต้นการยิงแบบ Hitscan ที่เป็นมาตราฐานเกมยิงที่มีให้เห็นอยู่ปัจจุบัน
โดยระบบการยิงแบบ Hitscan เมื่อผู้เล่นยิงกระสุนออกไป ระบบฟิสิกส์จะมีการทำงาน คือ ตรวจทิศทางปืนที่คุณเล็งไว้ แล้วเปิดรังสีจากปากกระบอกปืนเพื่อไปจนหว่าจะถึงวัตถุที่กำหนด แล้วใช้ Raycasting เพื่อตรวจจับว่ารังสีโดนวัตถุหรือไม่
ฟังดูเรียบง่าย แต่สามารถปรับแต่งได้หลากหลายสารพัดเช่นกัน ไม่ว่าจะเป็น รังสีสามารถทะลุวัตถุมากกว่าหนึ่งชั้น ดัดแปลงระยะทางรังสีได้ไปถึงเป้าได้อย่างอิสระ หรือจะให้แสงรังสีจากปากกระบอกปืนกระจายไปทั่ว ไม่ได้เป็นเส้นตรงอย่างเดียว เป็นต้น
ถ้าแสงรังสีสามารถตรวจจับวัตถุได้ เกมจะแสดงผลออกด้วยข้อความที่จะบอกผู้เล่นว่า “โดน” ไม่ว่าจะเป็นเสียง หรือ ข้อความ หรืออื่น ๆ
โดยระบบนี้มีข้อดีตรงที่ มันช่างเรียบง่าย ไม่ต้องผ่านการประมวลผลคณิตศาสตร์ หรือให้คอมพิวเตอร์ทำงานหนักกว่าเดิมด้วยการคำนวญระบบฟิสิกส์ ใช้แสงรังสีตรวจจับวัตถุก็สนุกได้ ซึ่งยังมีอีกหลายเกมในปัจจุบันที่ปืนยังระบบการยิงแบบนี้อยู่ อย่างเช่น Call of Duty, Doom, Overwatch (ถ้าไม่นับอาวุธพวก Projectile อย่างปืนยิงจรวด หรือปืนยิงระเบิด)
สรุปแบบสั้น ๆ ก็คือ ระบบการยิงปืนก็เหมือนกับยิงปืนเลเซอร์ล่องหน ที่ปลอมตัวมาในรูปแบบกระสุนปืน แล้วจัดการตั้งค่าลด/เพิ่มระยะ การกระจายของเลเซอร์ตามความเหมาะสมแต่ละชนิดปืน
Projectile Ballistics
บ้านเราจะเรียกว่า ระบบกระสุนย้อย หรือ กระสุนตก ซึ่งการยิงแบบ Projectile จะเห็นได้ตามเกมชู้ตติ้งที่จะมีความสมจริงเข้ามาผสมด้วย เพราะในเมื่อเกมสามารถทำให้วัตถุมีระบบฟิสิกส์ของมันเอง แล้วทำไมถึงไม่ทำระบบฟิสิกส์ให้กับกระสุนปืนในเกมบ้างล่ะ ? เพียงเท่านี้คุณก็รับรู้สึกการยิงปืนคล้ายในโลกความเป็นจริง ที่ไม่ได้รู้สึกง่ายดายเหมือนในเกม หรือยิงแบบระบบ Hitscan ที่เล็งเป้ายิงปุ๊ปโดนเป้าหมายปั๊ป
โดยระบบการยิงแบบ Projectile จะแตกต่างจากระบบ Hitscan อย่างสิ้นเชิง ทีมงานจะต้องใช้เวลากับการคำนวณระบบฟิสิกส์ของเกมให้ละเอียดมากยิ่งขึ้น แล้วจะต้องคำนวญว่าทำอย่างไรไม่ให้คอมพิวเตอร์ทำงานหนักเกินไป และจะควบคุมเซิร์ฟเวอร์เกมในส่วน Multiplayer ยังไงให้เที่ยงตรงทุกคน
แต่โชคยังดีที่ระบบการคำนวณมีความหลากหลายวิธีให้เลือก ซึ่งวิธีที่มักถูกเรียกใช้คือการใช้หน่วยวัดระยะเวลาที่เรียกว่า “Tick” หรือการ “วัดช่วงระยะเวลาในห้วงหนึ่ง”
- ระบบ Tick จะคำนวณแยกการคำนวณฟิสิกส์ออกจากการประมวณผลในเกม นั้นก็หมายความว่าจะทำให้เกมมีระบบฟิสิกส์ที่สมจริงมากขึ้น ทั้งในส่วนของกระสุนปืน และวัตถุในเกม ถึงแม้ว่าจะมีการข้ามเฟรมก็ตาม ยิ่งต้องการระบบฟิสิกส์สมจริงเท่าไหร่ก็ยิ่งใช้เวลานานขึ้นเท่านั้น
- ถ้าคำนวณระบบ Tick ทุกเฟรม และผสมระบบฟิสิกส์รวมกับเฟรมเรท ถ้าเกมมีเฟรมเรทตก คุณอาจจะได้เห็นภาพเอฟเฟกต์ของกระสุนผิดเพี้ยนและบัคในเกมได้ (แต่ไม่ส่งผลกระทบต่อการเล่นอย่างใด)
ทั้งหมดฟังดูอาจจะเป็นเรื่องที่ใหม่ แต่ความจริงแล้วเกมที่มีระบบการยิงแบบ Projectile มีมาตั้งแต่ยุค ’70 แล้ว ก่อนที่จะมีเกม FPS ซะอีก ! ไม่ว่าจะเป็นเกมคลาสสิกอย่าง Asteroid, Space Invaders, Contra และอื่น ๆ อีกมากมาย
Hybrid System
2 ระบบในหนึ่งเกม ในปัจจุบันทีมผู้พัฒนาในเพิ่มระบบการยิงทั้ง Hitscan และ Projectile Ballistics นำมาใช้ในเกมเดียวกัน เพื่อปกปิดจุดอ่อนของเกมในแต่ละระบบให้ได้ประสบการณ์ในการเล่นที่สมจริงมากยิ่งขึ้น
ยกตัวอย่างชัดเจนที่สุดก็คือ Sniper Elite ที่เมื่อผู้เล่นได้เหนี่ยวไก ตัวเกมจะใช้ระบบ Hitscan เพื่อตรวจสอบว่าเป้าที่เรายิงออกไปจะโดนเป้าหมายหรือเปล่า ถ้าผู้เล่นเหนี่ยวไกแล้วจะต้องโดนเป้าหมายแน่ ๆ การแสดงผลจะเปลี่ยนแปลงเป็นระบบ Projectile ballistics ในรูปแบบ Bullet-Time โชว์ฉากทักษะการยิงสุดเทพที่เพียงแค่เหนี่ยวไกก็สามารถปลิดชีพได้