Проектът lsfg-vk е неофициален порт на утилитата Lossless Scalings Frame Generation (LSFG) за платформата Linux, използвайки DXVK и графичния API Vulkan. Кодът на проекта е написан на C++ и е публикуван под MIT лицензия. Разработката е извършена от независим ентусиаст, който е възпроизвел функционалността на собственическия LSFG чрез обратен инженеринг на Windows библиотеки.
Приложението позволява мащабиране на изхода от игрални приложения, проектирани за изпълнение в отделен прозорец, за да бъдат показвани на цял екран. Утилитата може също да бъде необходима за избягване на размазания изход при мащабиране, използвайки стандартната графична подсистема, или за заобикаляне на ограниченията в игри, зависещи от фиксировани резолюции на екрана. Освен това, има възможност за повишаване на плавността на изхода и увеличаване на кадрите в секунда в игри, които не са предназначени за високи FPS, чрез добавяне на допълнителни междинни кадри, създадени чрез интерполация на съседни кадри.
За възстановяване на липсващите детайли и мащабиране в LSFG могат да се използват както собствени оригинални алгоритми, така и съществуващи технологии на базата на машинно обучение, като AMD FidelityFX Super Resolution и NVIDIA Image Scaling. Изборът на алгоритъм зависи от типа игрални приложения. Например, за съвременни игри се препоръчва да се използва собствения алгоритъм LS1 или технологията за суперсуперсемплинг AMD FSR. За стари игри с пикселна графика са предложени алгоритмите Integer Scaling и xBR, а за игри в стил анимации и аниме е наличен алгоритъмът Anime4K. Освен за самите игри, модификацията на изхода може да бъде приложена и към емулатори за изпълнение на ретро игри и игри за конзоли.
Мащабирането и добавянето на кадри се извършват в реално време и не изискват промени в игрите. В версията за Linux за добавяне на кадри и инжектиране в изхода на играта се използва свързване на обработчик под формата на допълнителен слой Vulkan, чрез който се извършва прихващане, изпълнение и модификация на съществуващи функции на Vulkan. За използването на lsfg-vk е достатъчно да се инсталира библиотеката liblsfg-vk.so и да се конфигурират параметрите й чрез променливи на околната среда.
Оригиналът LSFG представлява компилирано приложение за Windows на базата на API D3D11. За възстановяване на функционалността на LSFG в Linux, реализацията беше трансферирана в представяне, използващо API Vulkan. За прехвърляне на шейдърите беше добавен обработчик, който прихваща извикванията на D3D11 и запазва шейдърите на диска, както и парсер за динамично извличане на шейдъри от изпълняваеми файлове във формат PE (Portable Executable). За прехвърляне на графичния конвейер, управляващ изпълнението на шейдърите, от приложението бяха изолирани компоненти на базата на API D3D11, а с помощта на DXVK беше осигурена тяхната работа в Linux. След получаване на работната версия на базата на D3D11 и DXVK, с помощта на отстранявача на грешки RenderDoc беше получена точна подредба на извикванията на Vulkan, на база на която беше подготвена финалната версия, която директно използва API Vulkan.
Източник: opennet.ru
