RISC-V emulaator pikslivarjutajana, mis võimaldab teil VRChatis Linuxit käitada

Avaldatud on katse tulemused Linuxi käivitamise korraldamiseks mitme mängijaga võrgumängu VRChat virtuaalses 3D-ruumis, mis võimaldab laadida 3D-mudeleid oma varjunditega. Mõeldud idee elluviimiseks loodi RISC-V arhitektuuri emulaator, mis täideti GPU poolel piksli (fragmendi) varjundi kujul (VRChat ei toeta arvutuslikke varjutajaid ja UAV-d). Emulaatori kood on avaldatud MIT-i litsentsi all.

Emulaator põhineb C-keeles realisatsioonil, mille loomisel on kasutatud omakorda Rust-keeles arendatud minimalistliku emulaatori riscv-rust arendusi. Valmistatud C-kood tõlgitakse HLSL-is pikslivarjutajaks, mis sobib VRChati laadimiseks. Emulaator pakub täielikku tuge rv32imasu käsukomplekti arhitektuurile, SV32 mäluhaldusüksusele ja minimaalsele välisseadmete komplektile (UART ja taimer). Ettevalmistatud võimalustest piisab Linuxi kerneli 5.13.5 ja põhilise BusyBox käsureakeskkonna laadimiseks, millega saab suhelda otse VRChati virtuaalmaailmast.

RISC-V emulaator pikslivarjutajana, mis võimaldab teil VRChatis Linuxit käitada
RISC-V emulaator pikslivarjutajana, mis võimaldab teil VRChatis Linuxit käitada

Emulaator on varjundis rakendatud oma dünaamilise tekstuuri kujul (Unity Custom Render Texture), mida täiendavad VRChati jaoks ette nähtud Udoni skriptid, mida kasutatakse emulaatori juhtimiseks selle täitmise ajal. RAM-i sisu ja emuleeritud süsteemi protsessori olek salvestatakse tekstuuri kujul, suurusega 2048x2048 pikslit. Emuleeritud protsessor töötab sagedusel 250 kHz. Lisaks Linuxile saab emulaator käivitada ka Micropythoni.

RISC-V emulaator pikslivarjutajana, mis võimaldab teil VRChatis Linuxit käitada

Lugemist ja kirjutamist toetava püsiva andmesalvestuse loomiseks on nipp kasutada varjundi genereeritud ristkülikukujulise alaga seotud kaameraobjekti ja suunata renderdatud tekstuuri väljund varjundi sisendisse. Nii saab järgmise kaadri töötlemisel lugeda mis tahes pikslit, mis on kirjutatud pikslivarjutaja käivitamise ajal.

Pikslivarjutajate rakendamisel käivitatakse iga tekstuuripiksli jaoks paralleelselt eraldi varjundi eksemplar. See funktsioon raskendab oluliselt juurutamist ja nõuab kogu emuleeritud süsteemi oleku eraldi koordineerimist ja töödeldud piksli asukoha võrdlemist selles kodeeritud protsessori olekuga või emuleeritava süsteemi RAM-i sisuga (iga piksel saab kodeerida 128 killud teavet). Shaderi kood nõuab tohutu hulga kontrollide kaasamist, mille rakendamise lihtsustamiseks kasutati perli eelprotsessorit perlpp.



Allikas: opennet.ru

Lisa kommentaar