ในการสาธิตที่น่าทึ่ง นักพัฒนาได้สร้างเอนจินเกม 3D แบบ raycaster ที่ทำงานได้อย่างสมบูรณ์โดยใช้การเขียนสคริปต์ Bash เกือบทั้งหมด ความสำเร็จทางเทคนิคนี้ท้าทายข้อจำกัดทั่วไปของการเขียนสคริปต์เชลล์ และแสดงให้เห็นถึงการแก้ปัญหาอย่างสร้างสรรค์ในการแสดงผลกราฟิกบนเทอร์มินัล
นวัตกรรมทางเทคนิคในกราฟิกบนเทอร์มินัล
โปรเจกต์นี้ใช้เทคโนโลยี raycasting คล้ายกับที่ใช้ในเกมคลาสสิกอย่าง Wolfenstein 3D แต่ทำงานภายใต้ข้อจำกัดของสภาพแวดล้อมเชลล์ สิ่งที่น่าสนใจเป็นพิเศษคือวิธีการสร้างสรรค์ของนักพัฒนาในการเอาชนะข้อจำกัดของ Bash เอนจินนี้ใช้บล็อกครึ่งอักขระ Unicode ที่มีสีพื้นหน้าและพื้นหลังต่างกัน เพื่อเพิ่มความละเอียดในแนวตั้งเป็นสองเท่า สร้างประสบการณ์การมองเห็นที่ละเอียดกว่า ASCII art แบบดั้งเดิม
การพัฒนาประสิทธิภาพ
หนึ่งในความท้าทายที่สำคัญที่สุดคือการจัดการกับข้อจำกัดด้านประสิทธิภาพที่เป็นที่รู้จักกันดีของ Bash นักพัฒนาได้ใช้การเพิ่มประสิทธิภาพที่ชาญฉลาดหลายวิธีเพื่อให้ได้เฟรมเรตที่ยอมรับได้ รวมถึงการหลีกเลี่ยงการทำงานกับอาร์เรย์ (ซึ่งมีความซับซ้อนแบบเชิงเส้นใน Bash) และลดการเรียกใช้ระบบให้น้อยที่สุด โซลูชันนี้จัดการการอัปเดตเทอร์มินัลได้อย่างมีประสิทธิภาพ แม้ว่าผู้ใช้ที่มีฮาร์ดแวร์เก่าสามารถปรับเฟรมเรตผ่านตัวแปรสภาพแวดล้อมเพื่อประสิทธิภาพที่ดีขึ้นได้
ผมไม่เคยรู้มาก่อนว่าสิ่งนี้สามารถทำได้ด้วย Bash ผมเคยคิดว่าตัวเองเชี่ยวชาญ Bash ในระดับสูงมาก่อน แต่สิ่งนี้ทำให้ผมทึ่งมาก
การใช้คณิตศาสตร์
แม้ว่า Bash จะไม่รองรับการคำนวณทศนิยมโดยตรง นักพัฒนาได้ใช้การคำนวณทางคณิตศาสตร์ที่ซับซ้อนของ raycasting โดยใช้การคำนวณจำนวนเต็มที่คูณด้วย 100,000 วิธีแก้ปัญหานี้ช่วยให้สามารถคำนวณมุมมอง 3D ที่จำเป็นได้ในขณะที่ยังรักษาประสิทธิภาพที่เหมาะสม การพัฒนาทั้งหมดมีความกระชับอย่างน่าทึ่ง โดยมีโค้ดเพียงประมาณ 300 บรรทัดเท่านั้น
คุณสมบัติทางเทคนิคที่สำคัญ:
- การพัฒนา: ใช้ Pure Bash (ยกเว้นการเรียกใช้ stty)
- ขนาดโค้ด: ประมาณ 300 บรรทัด
- ความละเอียด: เพิ่มประสิทธิภาพด้วยบล็อกครึ่งของ Unicode
- การคำนวณทางคณิตศาสตร์: ใช้ระบบจำนวนเต็ม (ขยายด้วยตัวคูณ 100000)
- การควบคุม: ปุ่มลูกศรสำหรับการเคลื่อนที่, กด 'q' เพื่อออก
- การเพิ่มประสิทธิภาพ: สามารถปรับค่า FPS ผ่านตัวแปรสภาพแวดล้อม
การพัฒนาในอนาคต
การสนทนาในชุมชนแสดงให้เห็นถึงความสนใจอย่างต่อเนื่องในการขยายความสามารถของเอนจิน โดยกำลังมีการศึกษาการทำ texture mapping อย่างจริงจัง แม้ว่าการพัฒนาในปัจจุบันจะผลักดันขีดจำกัดของสิ่งที่เป็นไปได้ใน Bash แล้ว นักพัฒนากำลังระดมความคิดหาวิธีเพิ่มฟีเจอร์เพิ่มเติมภายใต้ข้อจำกัดด้านประสิทธิภาพของเชลล์
โปรเจกต์นี้แสดงให้เห็นถึงจุดตัดที่น่าสนใจระหว่างข้อจำกัดทางเทคนิคและการแก้ปัญหาอย่างสร้างสรรค์ แสดงให้เห็นว่าแม้แต่เครื่องมือที่ดูเหมือนจะมีข้อจำกัดอย่าง Bash ก็สามารถใช้สร้างประสบการณ์แบบโต้ตอบที่น่าสนใจได้เมื่อเข้าถึงด้วยนวัตกรรมและความมุ่งมั่น
อ้างอิง: a raycaster in bash