โปรแกรมจำลอง RISC-V ในรูปแบบของ Pixel Shader ที่ให้คุณเรียกใช้ Linux ใน VRChat

ผลการทดลองในการจัดการเปิดตัว Linux ภายในพื้นที่ 3 มิติเสมือนจริงของเกมออนไลน์ที่มีผู้เล่นหลายคน VRChat ซึ่งช่วยให้โหลดโมเดล 3 มิติด้วยเชเดอร์ของตัวเองได้รับการเผยแพร่แล้ว ในการใช้แนวคิดที่คิดไว้นี้จึงมีการสร้างโปรแกรมจำลองสถาปัตยกรรม RISC-V ซึ่งดำเนินการบนฝั่ง GPU ในรูปแบบของพิกเซล (แฟรกเมนต์) เชเดอร์ (VRChat ไม่รองรับเชเดอร์การคำนวณและ UAV) รหัสโปรแกรมจำลองเผยแพร่ภายใต้ใบอนุญาต MIT

โปรแกรมจำลองนั้นมีพื้นฐานมาจากการใช้งานในภาษา C ซึ่งในทางกลับกันก็ใช้การพัฒนาของโปรแกรมจำลองที่เรียบง่าย riscv-rust ซึ่งพัฒนาในภาษา Rust รหัส C ที่เตรียมไว้จะถูกแปลเป็น Pixel Shader ใน HLSL ซึ่งเหมาะสำหรับการโหลดเข้าสู่ VRChat โปรแกรมจำลองให้การสนับสนุนอย่างเต็มที่สำหรับสถาปัตยกรรมชุดคำสั่ง rv32imasu หน่วยการจัดการหน่วยความจำ SV32 และชุดอุปกรณ์ต่อพ่วงขั้นต่ำ (UART และตัวจับเวลา) ความสามารถที่เตรียมไว้นั้นเพียงพอที่จะโหลดเคอร์เนล Linux 5.13.5 และสภาพแวดล้อมบรรทัดคำสั่ง BusyBox พื้นฐาน ซึ่งคุณสามารถโต้ตอบได้โดยตรงจากโลกเสมือนจริง VRChat

โปรแกรมจำลอง RISC-V ในรูปแบบของ Pixel Shader ที่ให้คุณเรียกใช้ Linux ใน VRChat
โปรแกรมจำลอง RISC-V ในรูปแบบของ Pixel Shader ที่ให้คุณเรียกใช้ Linux ใน VRChat

โปรแกรมจำลองถูกนำไปใช้ในเชเดอร์ในรูปแบบของพื้นผิวไดนามิกของตัวเอง (Unity Custom Render Texture) เสริมด้วยสคริปต์ Udon ที่จัดทำขึ้นสำหรับ VRChat ซึ่งใช้ในการควบคุมโปรแกรมจำลองระหว่างการดำเนินการ เนื้อหาของ RAM และสถานะโปรเซสเซอร์ของระบบจำลองจะถูกจัดเก็บในรูปแบบของพื้นผิวขนาด 2048x2048 พิกเซล โปรเซสเซอร์จำลองทำงานที่ความถี่ 250 kHz นอกจาก Linux แล้ว อีมูเลเตอร์ยังสามารถรัน Micropython ได้อีกด้วย

โปรแกรมจำลอง RISC-V ในรูปแบบของ Pixel Shader ที่ให้คุณเรียกใช้ Linux ใน VRChat

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

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



ที่มา: opennet.ru

เพิ่มความคิดเห็น