
Αν παίζετε σε Linux και σας ενδιαφέρει η αρχαιολογία των βιντεοπαιχνιδιών, το όνομα Το D7VK 1.4 πιθανότατα θα αρχίσει να σας ακούγεται όλο και πιο οικείο.Αυτό το μικρό αλλά ισχυρό επίπεδο μετάφρασης έχει γίνει βασικό στοιχείο για την απόλαυση κλασικών τίτλων Direct3D 5, 6 και 7 μέσω του Vulkan, συνήθως χρησιμοποιώντας Wine ή Proton ως βάση. Επιπλέον, έρχεται σε ένα πλαίσιο όπου το DXVK έχει επίσης εξελιχθεί στη δική του έκδοση 1.4, ενισχύοντας ολόκληρο το οικοσύστημα μετάφρασης DirectX → Vulkan.
Στις επόμενες γραμμές θα εξετάσουμε Τα πιο σημαντικά νέα χαρακτηριστικά του D7VK 1.4, πώς εντάσσεται στο οικοσύστημα DXVK/WineΘα καλύψουμε τι προσφέρει όσον αφορά τη συμβατότητα και την απόδοση με παλαιότερα παιχνίδια, τους περιορισμούς του και πώς μπορείτε να ξεκινήσετε να το χρησιμοποιείτε στο σύστημα Linux (ακόμα και σε Windows, αν και για δευτερεύουσα χρήση). Θα αναφερθούμε επίσης σύντομα στα βασικά χαρακτηριστικά του DXVK 1.4, καθώς πολλές από τις ιδέες και τις έννοιές του είναι κοινές και συμπληρωματικές.
Τι ακριβώς είναι το D7VK και ποιο πρόβλημα λύνει;
Το D7VK είναι ένα Επίπεδο μετάφρασης βασισμένο στο Vulkan σχεδιασμένο για την εκτέλεση παλαιών εφαρμογών και παιχνιδιών 3D που χρησιμοποιούν Direct3D 7, 6 και 5 σε Linux μέσω Wine. Αντί να υλοποιήσει ολόκληρη τη στοίβα Direct3D και DirectDraw από την αρχή, το D7VK βασίζεται στο backend D3D9 του DXVK και στην υλοποίηση DDraw του Wine (ή ακόμα και στην εγγενή υλοποίηση των Windows) για να λειτουργήσει ως μινιμαλιστικός ενδιάμεσος μεταξύ των δύο.
Με απλούστερους όρους, θα μπορούσαμε να πούμε ότι Το D7VK λειτουργεί ως "διερμηνέας" μεταξύ των παλιών παιχνιδιών Direct3D 5/6/7 και του DXVK.το οποίο με τη σειρά του μεταφράζει τα πάντα σε Vulkan. Με αυτόν τον τρόπο, πολλοί κλασικοί τίτλοι μπορούν να επωφεληθούν από τα πλεονεκτήματα του Vulkan (λιγότερη επιβάρυνση, καλύτερη χρήση CPU, καλύτερη διαχείριση πόρων) χωρίς οι προγραμματιστές τους να χρειάζεται να αγγίξουν ούτε μια γραμμή κώδικα.
Είναι σημαντικό να το καταλάβετε Ο κύριος στόχος του D7VK είναι να προσφέρει αξιοπρεπή συμβατότητα με το D3D7.Προσθέτοντας «πειραματική» υποστήριξη για τα D3D6 και D3D5, ακριβώς επειδή όσο πιο πίσω πηγαίνει κανείς στην ιστορία του DirectX, τόσο πιο «καταραμένα» γίνονται τα API και τόσο πιο σπάνιες είναι οι αλληλεπιδράσεις τους με το DDraw και το GDI.
Αρχιτεκτονική και Πεδίο Εφαρμογής D7VK
Η αρχιτεκτονική του D7VK βασίζεται σε μια πολύ ρεαλιστική προσέγγιση: Βασίζεται στο DXVK (ειδικά στο backend του D3D9) και στο DDraw του Wine. για να δημιουργηθεί ένα λεπτό επίπεδο που να υλοποιεί ακριβώς ό,τι είναι απαραίτητο από τα D3D7/6/5. Αντί να ξαναγράψει το DirectDraw και όλα τα API πριν από το D3D8, ενσωματώνει τα απολύτως απαραίτητα, ώστε τα παιχνίδια να μπορούν να επικοινωνούν σωστά με το DXVK.
Αυτό σημαίνει ότι Δεν προορίζεται να καλύψει όλες τις πιο σκοτεινές γωνίες του DDrawΑυτό ισχύει ιδιαίτερα για εφαρμογές που αναμειγνύουν χωρίς ντροπή το D3D με GDI ή διαφορετικές εκδόσεις του DirectX. Σε τέτοιες περιπτώσεις, ο ίδιος ο συγγραφέας του D7VK συνιστά ανεπιφύλακτα τη χρήση του WineD3D, το οποίο, αν και ελαφρώς λιγότερο αποτελεσματικό από άποψη απόδοσης, υλοποιεί σχεδόν τα πάντα και χειρίζεται αυτές τις "καταραμένες" αλληλεπιδράσεις πολύ καλύτερα.
Βασιζόμενοι στο DXVK για το D3D9, Όλες οι επιλογές διαμόρφωσης DXVK για το D3D9 ισχύουν για το D7VKσυμπεριλαμβανομένων παραμέτρων όπως τα όρια FPS, ο έλεγχος VSync, ένα HUD με στατιστικά απόδοσης και εσωτερικές προσαρμογές συμπεριφοράς. Έτσι, το D7VK κληρονομεί μεγάλο μέρος της ωριμότητας και της απόδοσης που έχει αποκτήσει το DXVK με την πάροδο των ετών.
Βασικά νέα χαρακτηριστικά του D7VK 1.4
Παρουσιάζει την έκδοση 1.4 του D7VK Μια σειρά από βασικές βελτιώσεις που στοχεύουν στη συμβατότητα με συγκεκριμένα παιχνίδια και στη βελτίωση μικρών λεπτομερειών στη συμπεριφορά των γραφικών.Δεν υπάρχει ριζική αλλαγή στην αρχιτεκτονική, αλλά υπάρχει μια σειρά από βελτιώσεις που, αθροιζόμενες, καθιστούν αρκετούς "προβληματικούς" τίτλους πλήρως παικτούς.
Υποστήριξη χρώματος διαφάνειας κλειδιού
Ένα από τα σημαντικότερα χαρακτηριστικά του D7VK 1.4 είναι η υλοποίηση του υποστήριξη για διαφάνεια πλήκτρων χρώματος, μια τεχνική που χρησιμοποιήθηκε ευρέως στις πρώτες ημέρες του Direct3D ως μια φθηνή εναλλακτική λύση στις δοκιμές άλφα. Αντί για κανάλια άλφα, χρησιμοποιήθηκε ένα συγκεκριμένο χρώμα για την επισήμανση διαφανών pixel, τα οποία με ατελείς μεταφράσεις κατέληξαν να δημιουργούν αδιαφανή μπλοκ χρωμάτων όπου θα έπρεπε να υπάρχει διαφάνεια.
Χάρη στο έργο της κοινότητας, και ιδιαίτερα της @CkNoSFeRaTU, τώρα το D7VK μπορεί να χειριστεί σωστά αυτόν τον τύπο διαφάνειας χρώματος κλειδιούΑυτό διορθώνει τα μονόχρωμα artifacts που εμφανίζονταν σε τίτλους όπως τα Arx Fatalis, Messiah, Darkstone, Divine Divinity, Mortal Kombat 4 και έναν καλό αριθμό άλλων παιχνιδιών που χρησιμοποιούσαν αυτό το γραφικό κόλπο εκείνη την εποχή.
Βελτιωμένη διαλειτουργικότητα με DDraw και παιχνίδια "μεγάλων"
Ένας άλλος τομέας όπου έχει σημειωθεί σημαντική πρόοδος είναι η Ενοποίηση της διαλειτουργικότητας μεταξύ του DDraw και των διαφόρων υποστηριζόμενων εκδόσεων του D3DΤα παλιά API του DirectDraw και του Direct3D αναμειγνύονταν με πολύ ανορθόδοξους τρόπους και συχνά τα παιχνίδια έκαναν πράγματα που, από τη σημερινή οπτική γωνία, δεν έχουν νόημα.
Στο D7VK 1.4, έχει αφιερωθεί σημαντικός όγκος εργασίας ενοποίηση και ενίσχυση του τρόπου διαχείρισης αυτών των αλληλεπιδράσεων μεταξύ του DDraw και του D3D7/6/5Αυτό σημαίνει ότι παιχνίδια όπως το Plants vs Zombies και άλλοι τίτλοι PopCap της ίδιας εποχής έχουν περάσει από ασταθή ή μη παικτά σε σωστά λειτουργικά.
Χάρη στις συνεισφορές της κοινότητας, αυτά τα προβλήματα έχουν επίσης διορθωθεί. σφάλματα που σχετίζονται με την δημιουργία στιγμιότυπων DDraw μέσω του IClassFactoryΑυτό το ελάττωμα εμπόδισε παιχνίδια όπως το Re-Volt και το Sea Dogs να λειτουργήσουν. Τώρα, αυτοί οι τίτλοι είναι διαθέσιμοι για παιχνίδι, επεκτείνοντας περαιτέρω τη βιβλιοθήκη κλασικών παιχνιδιών που μπορούν να εκτελεστούν στο D7VK χωρίς προβλήματα.
Βελτιώσεις βάθους, καθαρισμός και διορθώσεις για συγκεκριμένα παιχνίδια
Αξιοποιώντας στοιχεία που παρέχονται από συνεργάτες όπως @Trass3r, στο D7VK 1.4 έχει προστεθεί υποστήριξη για εκκαθαρίσεις βάθους που ξεκινούν από το DDrawΑυτή η λειτουργία, η οποία μπορεί να ακούγεται αρκετά συγκεκριμένη, είναι το κλειδί για ορισμένα παιχνίδια ώστε να διαχειρίζονται σωστά το depth buffer τους και να μην εμφανίζουν glitches με z-fighting ή στοιχεία με κακό σχεδιασμό.
Επιπλέον, έχει ενσωματωθεί προκαταρκτική υποστήριξη για depth write-back, η οποία επικεντρώνεται επί του παρόντος στη μορφή D16Αυτή η βελτίωση είχε ως αποτέλεσμα τη διόρθωση προβλημάτων απόφραξης της πηγής φωτός σε παιχνίδια όπως το Star Wars Episode I: Racer, όπου προηγουμένως τα φώτα συμπεριφέρονταν μη ρεαλιστικά ή απλώς δεν κρυβόντουσαν όταν έπρεπε.
Το αρχείο αλλαγών του D7VK 1.4 περιλαμβάνει επίσης Διόρθωση σφάλματος στην αρχή του V-Rally 2 Expert Editionκαθώς και μια σειρά από διορθώσεις για "corner cases" που θα μπορούσαν να προκαλέσουν κολλήματα, παγώματα ή άλλη παράξενη συμπεριφορά σε παλαιότερους τίτλους D3D ή DDraw. Μεταξύ των παιχνιδιών που ωφελήθηκαν ήταν τα Revenant, Powerslide και Slave Zero, εκτός από μια συγκεκριμένη λύση για ένα πιθανό κολλάρισμα κατά την επιστροφή στο κύριο μενού στο GTA 2.
Βασική εγκατάσταση και χρήση του D7VK
Η έναρξη λειτουργίας του D7VK με πρόθεμα Wine είναι σχετικά απλή: απλώς αντιγράψτε το αρχείο ddraw.dll δίπλα στο εκτελέσιμο αρχείο παιχνιδιού ή εφαρμογής και, στη συνέχεια, ρυθμίστε τις κατάλληλες παρακάμψεις στο Wine για να χρησιμοποιήσετε αυτό το DLL ως κύρια εντολή.
Συγκεκριμένα, σε Το winecfg πρέπει να προσθέσει μια παράκαμψη "native, builtin" για τη βιβλιοθήκη. ddraw Στην καρτέλα Βιβλιοθήκες, βεβαιωθείτε ότι έχετε καθορίσει την ακριβή σειρά. Δεν χρειάζεται να ανησυχείτε για την αρχιτεκτονική, καθώς το DDraw και τα παλαιότερα αντίστοιχα D3D ήταν πάντα αποκλειστικά 32-bit.
Υπάρχει επίσης ένα Απαιτείται εναλλακτική διαδρομή ανάπτυξης για ορισμένα ειδικά παιχνίδια όπως το GTA 2, το StarLancer ή το Midtown Madness 2Σε αυτή την περίπτωση, το όνομα πρέπει να αλλάξει. ddraw.dll από το σύστημα κρασιού στο ddraw_.dll και αντιγράψτε το ddraw.dll από το D7VK στον κατάλογο system32 o syswow64 εντός του προθέματος, ανάλογα με το bit του. Το D7VK θα επιχειρήσει πρώτα να φορτώσει ddraw_.dll από την τρέχουσα διαδρομή πριν καταφύγετε σε ddraw.dll του συστήματος, επιτρέποντας έτσι τη συνύπαρξη και των δύο μερών.
Το D7VK μπορεί επίσης να χρησιμοποιηθεί στα Windows, αν και Δεν είναι η κύρια πλατφόρμα για την οποία έχει αναπτυχθεί ή δοκιμαστείΣε αυτή την περίπτωση, απλώς αντιγράψτε ddraw.dll μαζί με το εκτελέσιμο αρχείο του παιχνιδιού, αλλά δεν συνιστάται ιδιαίτερα η τοποθέτησή του σε καταλόγους συστήματος των Windows, καθώς απαιτείται μια πραγματική υλοποίηση του DDraw και ενδέχεται να προκληθεί σοβαρή ζημιά στην εγκατάσταση.
DXVK 1.4: πλαίσιο και συνέργειες με το D7VK
Η ιστορία του D7VK είναι άρρηκτα συνδεδεμένη με η εξέλιξη του ίδιου του έργου DXVK, το οποίο αποτελεί τη βασική ραχοκοκαλιά της μετάφρασης Direct3D → Vulkan για πιο σύγχρονα παιχνίδια (ειδικά τα Direct3D 10 και 11). Η έκδοση 1.4 του DXVK αντιπροσώπευε ένα σημαντικό άλμα που επηρέασε επίσης τον τρόπο ενσωμάτωσης επιπέδων όπως το D7VK ή το D8VK.
Ενημερώθηκε το DXVK 1.4 η διεπαφή Direct3D 11 έως την έκδοση 11.4 που περιλαμβάνεται στα Windows 10 (δομή 1903)Αυτό επέτρεψε την επίλυση συγκεκριμένων προβλημάτων με παιχνίδια όπως το Plants vs. Zombies: Battle for Neighborville. Τα νέα API που εισήχθησαν στο D3D11.4 έχουν υλοποιηθεί μόνο εν μέρει, εστιάζοντας σε χαρακτηριστικά που έχουν νόημα εντός της υπάρχουσας λειτουργικότητας του Vulkan.
Ο Διεπαφή DXGI στην έκδοση 1.5, συμπεριλαμβανομένης της δυνατότητας ελέγχου υποστήριξης HDR (αν και ακόμα χωρίς εγγενή έξοδο HDR). Επιπλέον, προστέθηκαν μέθοδοι αλληλεπίδρασης DXGI-GDI οι οποίες, μεταξύ άλλων, διευκόλυναν την εκκίνηση προγραμμάτων-πελατών όπως το Rockstar Game Launcher, υπό την προϋπόθεση ότι συνοδεύονται από συγκεκριμένες διορθώσεις Direct2D εντός του Wine.
Απόδοση και εσωτερικές βελτιώσεις του DXVK 1.4
Όσον αφορά την απόδοση, το DXVK 1.4 έφερε αρκετές ενδιαφέρουσες βελτιστοποιήσεις που Επηρεάζουν πολλά παιχνίδια Direct3D 11, βελτιώνοντας τη ρευστότητα και μειώνοντας το φόρτο της CPU.Ένα από τα πιο αξιοσημείωτα είναι η προεπιλεγμένη ενεργοποίηση της επιλογής d3d11.allowMapFlagNoWait, το οποίο αυξάνει την απόδοση σε ορισμένους τίτλους επιτρέποντας την πιο αποτελεσματική διαχείριση ορισμένων αντιστοιχισμένων πόρων.
Λύθηκαν επίσης τα προβλήματα που εμπόδισαν το The Witcher 3 να ξεκινήσει σωστάΗ συμπεριφορά συγχρονισμού προσαρμόστηκε ώστε να μοιάζει περισσότερο με αυτή του αρχικού χειριστηρίου D3D11. Επιπλέον, αντιμετωπίστηκαν πιθανά σημεία συμφόρησης σε παιχνίδια που κάνουν εκτεταμένη χρήση αναβαλλόμενων πλαισίων, όπως τα Dark Souls III και Sekiro: Shadows Die Twice.
Το DXVK 1.4 βελτίωσε σημαντικά το παρακολούθηση εσωτερικών πόρων, μειώνοντας ελαφρώς την κατανάλωση CPU διαχειριζόμενοι buffers, υφές και άλλα γραφικά στοιχεία. Όλη αυτή η εσωτερική εργασία, αν και δεν είναι πάντα ορατή στον χρήστη, θέτει τις βάσεις για ακόμη πιο καθαρή ενσωμάτωση με επίπεδα όπως το D7VK, τα οποία χρειάζονται το πιο ισχυρό δυνατό backend D3D9/D3D11.
Πρακτική εγκατάσταση του DXVK 1.4 στο Wine
Για όσους θέλουν να χρησιμοποιήσουν το DXVK απευθείας στο Wine, η τυπική ροή εργασίας αποτελείται από: Κατεβάστε το σταθερό πακέτο DXVK, εξαγάγετε το και εκτελέστε το σενάριο εγκατάστασης πάνω από το επιθυμητό πρόθεμα Wine.Για παράδειγμα, με την έκδοση 1.4 μπορείτε να κάνετε κάτι σαν αυτό:
Αρχικά, το αρχείο κατεβάζεται χρησιμοποιώντας ένα εργαλείο όπως wget από τον επίσημο σύνδεσμο GitHub:
wget https://github.com/doitsujin/dxvk/releases/download/v1.4/dxvk-1.4.tar.gz
Στη συνέχεια, το πακέτο αποσυμπιέζεται με tar και αποκτήστε πρόσβαση στον μη συμπιεσμένο φάκελο:
tar -xzvf dxvk-1.4.tar.gz
cd dxvk-1.4
Τέλος, το σενάριο εγκατάστασης εκτελείται με το ενεργό πρόθεμα Wine χρησιμοποιώντας Ενα απλό sh setup-dxvk.sh install με τα κατάλληλα προνόμια:
sudo sh setup-dxvk.sh install
Το σενάριο επιτρέπει επίσης Χρησιμοποιήστε την υλοποίηση DXGI του Wine αντί για αυτήν του DXVK. Αν θέλετε να χρησιμοποιήσετε το vkd3d για παιχνίδια Direct3D 12 και το DXVK για Direct3D 11, μπορείτε να το κάνετε εκτελώντας:
setup-dxvk.sh install --without-dxgi
Μια άλλη πρακτική επιλογή που προσφέρει το σενάριο είναι εγκαταστήστε τα DLL ως συμβολικούς συνδέσμους (χρησιμοποιώντας την επιλογή --symlink), το οποίο απλοποιεί σημαντικά την ταυτόχρονη ενημέρωση πολλαπλών προθεμάτων Wine: αρκεί να ενημερωθεί ένα μόνο κεντρικό αντίγραφο του DXVK.
Κοιτάζοντας συνολικά, D7VK 1.4 και DXVK 1.4 Ενισχύουν ένα οικοσύστημα στο οποίο Το Linux και το Wine καθιερώνονται ως μια πολύ σοβαρή πλατφόρμα για την αναπαραγωγή τόσο των κλασικών Direct3D 5/6/7 όσο και των σύγχρονων τίτλων D3D10/11.Προσφέροντας απόδοση που συχνά είναι εκπληκτικά κοντά στα Windows και, πάνω απ' όλα, ολοένα και ευρύτερη συμβατότητα με ιστορικά API που φαινόταν καταδικασμένα να ξεχαστούν.