D7VK 1.4 разширява съвместимостта на игрите с Direct3D 5, 6 и 7 спрямо Vulkan, като поправя ключови графични грешки, като например прозрачността на цветните ключове.

  • D7VK 1.4 разширява съвместимостта на игрите с Direct3D 5, 6 и 7 спрямо Vulkan, като поправя ключови графични грешки, като например прозрачността на цветните ключове.
  • Слоят се интегрира с DXVK и Wine, наследявайки техните опции за конфигуриране и HUD, но запазвайки минималистичен подход към DDraw и предишните API.
  • DXVK 1.4 укрепва екосистемата с подобрения в D3D11 и DXGI, оптимизации на производителността и по-добро управление на ресурсите в съвременните игри.
  • Комбинацията от D7VK и DXVK на Wine ви позволява да играете огромна гама от класически и съвременни заглавия на Linux с много конкурентна производителност.

D7VK 1.4

Ако играете на 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 разчита на D3D9 backend-а на DXVK и DDraw имплементацията на Wine (или дори нативната за Windows), за да действа като минималистичен прокси между двете.

С опростени думи, бихме могли да кажем, че D7VK действа като "интерпретатор" между старите Direct3D 5/6/7 игри и DXVK.което от своя страна превежда всичко във Vulkan. По този начин много класически заглавия могат да се възползват от предимствата на Vulkan (по-малко натоварване, по-добро използване на процесора, по-добро управление на ресурсите), без разработчиците им да се налага да пишат и един ред код.

Важно е да се разбере това Основната цел на D7VK е да предложи прилична съвместимост с D3D7.Добавяне на „експериментална“ поддръжка за D3D6 и D3D5, именно защото колкото по-назад в историята на DirectX се връщате, толкова по-„прокълнати“ стават API-тата и толкова по-редки са взаимодействията им с DDraw и GDI.

Архитектура и обхват на D7VK

Архитектурата на D7VK е базирана на много прагматичен подход: Разчита на DXVK (особено на бекенда на 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

D7VK версия 1.4 въвежда Серия от ключови подобрения, насочени към съвместимост със специфични игри и подобряване на малки детайли в графичното поведение.Няма радикална промяна в архитектурата, но има набор от подобрения, които, взети заедно, правят доста „проблемни“ заглавия напълно играеми.

Поддръжка на цвят за прозрачност на ключовете

Един от големите акценти на D7VK 1.4 е имплементацията на поддръжка за прозрачност на цветните ключове, техника, широко използвана в ранните дни на Direct3D като евтина алтернатива на алфа тестването. Вместо алфа канали, за маркиране на прозрачни пиксели е използван специфичен цвят, което при непълни транслации в крайна сметка е генерирало непрозрачни цветни блокове там, където би трябвало да има прозрачност.

Благодарение на работата на общността, особено на @CkNoSFeRaTU, сега D7VK може правилно да обработва този тип прозрачност на ключовите цветовеТова поправя артефактите с плътен цвят, които се появяваха в заглавия като 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Тази функция, която може да звучи доста специфична, е ключова за някои игри, за да управляват правилно буфера си за дълбочина и да не показват z-fighting бъгове или лошо нарисувани елементи.

Освен това, той е включен предварителна поддръжка за обратно записване в дълбочина, в момента фокусирана върху формата D16Това подобрение доведе до коригиране на проблемите със закриването на светлинния източник в игри като Star Wars Episode I: Racer, където преди светлините се държаха нереалистично или просто не се скриваха, когато е трябвало.

Списъкът с промени на D7VK 1.4 включва също Поправяне на срив в началото на V-Rally 2 Expert Editionкакто и редица корекции за „ъглови случаи“, които можеха да причинят сривове, замръзване или друго странно поведение в по-стари D3D или DDraw заглавия. Сред игрите, които се възползваха, бяха Revenant, Powerslide и Slave Zero, в допълнение към специфично решение за потенциален срив при връщане в главното меню в GTA 2.

Основна инсталация и употреба на D7VK

Стартирането и стартирането на D7VK в префикс Wine е сравнително лесно: просто копирайте файла ddraw.dll до изпълнимия файл на играта или приложението и след това конфигурирайте съответните презаписвания в Wine, за да използвате тази DLL като основна команда.

По-конкретно, в winecfg трябва да добави пренаписване „native, builtin“ за библиотеката ddraw В раздела „Библиотеки“ се уверете, че сте посочили точния ред. Няма нужда да се притеснявате за архитектурата, тъй като DDraw и по-старите му D3D аналози винаги са били изключително 32-битови.

Има и а За определени специални игри, като GTA 2, StarLancer или Midtown Madness 2, е необходим алтернативен път на внедряване.В такъв случай името трябва да бъде променено. ddraw.dll от системата Wine до ddraw_.dll и копирайте ddraw.dll от D7VK до директорията system32 o syswow64 в рамките на префикса, според неговата битност. 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.

The DXGI интерфейс до версия 1.5, включително възможност за проверка на поддръжката на HDR (въпреки че все още няма вграден HDR изход). Освен това бяха добавени методи за взаимодействие DXGI-GDI, които, наред с други неща, улесниха стартирането на клиенти като Rockstar Game Launcher, при условие че са придружени от специфични Direct2D корекции в Wine.

Производителност и вътрешни подобрения на DXVK 1.4

По отношение на производителността, DXVK 1.4 донесе няколко интересни оптимизации, които Те засягат много Direct3D 11 игри, подобрявайки плавността и намалявайки натоварването на процесора.Едно от най-забележителните е активирането на опцията по подразбиране. d3d11.allowMapFlagNoWait, което повишава производителността в определени заглавия, като позволява по-ефективно управление на определени картографирани ресурси.

Те също бяха решени проблемите, които попречиха на The Witcher 3 да се стартира правилноПоведението при синхронизация беше коригирано, за да наподобява повече това на оригиналния контролер D3D11. Освен това бяха отстранени потенциални пречки в игри, които използват интензивно отложени контексти, като например Dark Souls III и Sekiro: Shadows Die Twice.

DXVK 1.4 значително подобри проследяване на вътрешни ресурси, леко намалявайки консумацията на процесор чрез управление на буфери, текстури и други графични елементи. Цялата тази вътрешна работа, макар и не винаги видима за потребителя, полага основите за още по-чиста интеграция със слоеве като D7VK, които се нуждаят от възможно най-стабилния 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, така и на модерни D3D 10/11 заглавия.Предлагайки производителност, която често е изненадващо близка до тази на Windows и най-вече все по-широка съвместимост с исторически API, които сякаш са били обречени на забрава.