Грязная игра: Как фанатам Intel занизить FPS, и почему игры с закрытым кодом могут быть предвзяты
Начну пожалуй прямо в лоб, есть ПК с конкретными комплектующими, на этом ПК установлена Microsoft Windows, просто потому что нет более адекватной операционной системы для нормального использования...
реклама
У пользователя есть игра (программа), как правило, с закрытым исходным кодом, и только леший чёрт знает что эта игра (программа) делает своим закрытым от пользователя кодом.
Эта игра становится популярной, её копируют дисками и прочими способами, потом эту игру берут в тесты разнообразные блогеры, и вокруг этих тестов начинают плясать фанаты AMD/Intel/NVIDIA, да и сами производители видеокарт/процессоров используют в рекламных кампаниях некоторые игры.
Станут ли AMD/NVIDIA представлять свои новшества на примере игр, которые лучше работают у конкурентов? Конечно же нет, возможно AMD/NVIDIA и заносят "чемоданы" разработчиками, чтобы те подкрутили в их пользу игру, но я лично не видел такого факта, ибо я не работаю тем самым человеком, который подобным мог бы промышлять.
реклама
Потому от размышлений перейдем к реальности, я набросал небольшую игру с помощью игрового движка Godot, и что же мы видим? Правильно, когда я подменяю строку PROCESSOR_IDENTIFIER в переменных Windows, игра начинает выдавать совершенно разный FPS.
Так как у меня сейчас есть в доступе только система на основе Ryzen 7 2700X, чтобы обмануть игру я меняю идентификатор процессора в переменных Windows, ведь смотря на идентификатор ЦП игра понимает, AMD или Intel у меня сейчас установлен, и в зависимости от этого занижает FPS.
В случае если игра видит что процессор от Intel, начинает работать бесполезный цикл создающий лишнюю нагрузку на процессор, от чего основному циклу игры меньше вычислительных ресурсов ЦП досталось, и FPS вместо нормальных 567 упал до 486, и то и другое вполне позволяет играть, но разница в пользу AMD вышла, хотя процессор физически никак не изменился.
реклама
И такой метод занижения сложно отловить, ведь логично же, если процессор слабее то и нагрузка на него будет выше, только в моем случае нагрузка выше не потому что процессор вдруг стал слабее, а потому что в игре есть "закладка" которая забирает на себя часть вычислительных ресурсов процессора мешая игре.
Что же такого я "нахимичил" в исходном коде игры? Есть множество способов занизить FPS в игре на "неправильной" конфигурации ПК, насколько хватит фантазии программиста, но я покажу на своём примере.
Первым делом нужно определиться с методом, просто ограничить FPS не вариант, слишком заметно будет, можно для AMD сделать оптимизированный код, а для Intel набросать как попало, но это довольно сложно, нужно две версии кода поддерживать, я же пошел по самой простой дороге, просто создал цикл который грузит процессор отбирая ресурсы у самой игры, бесполезный такой вредитель работающий только если видит процессор от Intel.
В итоге я создал несколько переменных, переменная Active просто хранит 1 или 0, переменная ActiveG будет массивом строк, именно в этом массиве будет видно, от AMD процессор или от Intel, а в переменную CPU_ID я просто копирую идентификатор процессора, который лежит в переменных средах в свойствах системы Windows.
реклама
Далее функция _ready(), она отрабатывает один раз при запуске игры, и в этой функции я разделяю строку идентификатора процессора на составляющие, и заношу в массив activeG, в нулевой ячейке массива как раз после этого и будет нужное нам AMD64 в случае процессора AMD, или Intel64 в случае процессора Intel.
В этой же зоне я выставляю 1 или 0 переменной active в зависимости от AMD/Intel.
Это не нужно делать постоянно, достаточно один раз сделать и сохранить в переменных, ведь процессор во время игры никто не сменит физически, а значит нет смысла постоянно перепроверять, а "правильный" ли процессор у игрока стоит...
Далее переходим к функции _process(delta), все что внутри постоянно исполняется по циклу, это по сути и есть работа игры, здесь уже нужно осторожно работать и лишнего ничего не определять, например переменные.
Именно здесь я ставлю условие (if), если переменная active равна 1, то запускаем цикл на 30000 повторений, в котором переменная aa с каждым циклом получает единицу, когда переменная aa набирает 30000, цикл завершается и переменная aa обнуляется (aa = 0), после этого небольшая задержка и игра продолжает свою работу как положено.
Если переменная active содержит в себе ноль, то это условие с циклом будет проигнорировано и никакого влияния на FPS не будет.
Чуть дальше я добавил еще одно условие, оно отслеживает нажатие кнопки Delete (ui_delete), нажимая кнопку я могу включать и отключать "костыль" для занижения FPS.
На этом собственно и всё, изменяя цикл работающий только при наличии процессора от Intel можно изменять и уровень падения FPS, кроме того, у меня есть переменная которая отражает производителя ЦП, я могу в любом месте игры получить эту информацию и в зависимости от установленного у игрока процессора исполнять разный код через условие.
Зная какой у игрока ЦП или видеокарта, игру можно изменить как угодно, вплоть до того, что с процессорами от Intel игра будет одна, а с AMD совсем другая, хотя исполняемый файл один и тот же.
Конечно, я показал пример довольно грубый и не очень надежный, надежнее будет смотреть не то что Windows пишет в переменных средах, а реальные идентификаторы оборудования у пользователя, тогда простой подменой переменных в Windows не выйдет обмануть игру...
Когда игра с закрытым исходным кодом, она может делать абсолютно все что угодно втихаря от пользователя, и "подкрутить" FPS одному из лагерей AMD/Intel/NVIDIA не составит никакого труда, ведь исходный код закрыт, а игра это программа, не следует этого забывать.
Я не говорю что разработчики обязательно подкручивают игры, нет, я говорю про возможность, тем более многие скрывают исходный код и его невозможно проверить на вшивость... Есть там подкрутки в сторону AMD/Intel/NVIDIA, или нет, одному только лешему чёрту известно, что на самом деле игра делает в системе пользователя.
И здесь проблема "доверия" всплывает, ведь разработчик игры может делать все что угодно в системе пользователя, в том числе воровать его личную информацию и получать информацию о конфигурации системы, даже больше, может вмешиваться в работу операционной системы пользователя...
А что может пользователь сделать с игрой? С игрой ресурсы и исходный код которой максимально закрыт и зашифрован от пользователя? Не кажется что здесь попахивает своеобразным рабством? Когда разработчик (господин) может делать все что угодно, а пользователь (раб) даже глаза открывать не имеет права.
Приверженцы DRM и всевозможных "Trusted Computing" только усугубляют эту ситуацию, ведь эти технологии не просто могут закрыть от пользователя исходный код, но и ограничить свободу самого пользователя вплоть до того, что у пользователя могут отобрать возможность запустить "неправильную" операционную систему, Microsoft Pluton в самых современных процессорах уже мешает запускать "неправильные" ОС, например дистрибутивы Linux.
Осталось только отобрать у пользователя парочку настроек в биосе, и все, ничего кроме Windows 11 пользователь не сможет запустить на своем "крутом" ноутбуке.
Пожалуй на этом закончу... Понятное дело что когда все закрыто от пользователя, разработчики и производители могут творить все что захотят с системой пользователя, это очень плохо.
Как с этим бороться? Достаточно перестать "потреблять" все что суют в рот корпорации и производители, чем дольше "стадо" будет необдуманно потреблять и спонсировать свое же порабощение, тем тяжелее будет в конце обрести свободу.
Меня совсем не радует тот факт, что Microsoft может диктовать абсолютно все что угодно системе со встроенным чипом Pluton, особенно когда за эту систему платить приходится пользователю.
Еще не радует то, что я не могу чип Microsoft Pluton выбросить в мусорку, где ему самое место, ведь этот чип принудительно "зашит" в каждый современный процессор, и пользователь не имеет к нему доступа, что очередной плевок потребителям в лицо.
Благодарю за внимание, больше интересных статей в блоге Hard-Workshop.
Лента материалов
Соблюдение Правил конференции строго обязательно!
Флуд, флейм и оффтоп преследуются по всей строгости закона!
Комментарии, содержащие оскорбления, нецензурные выражения (в т.ч. замаскированный мат), экстремистские высказывания, рекламу и спам, удаляются независимо от содержимого, а к их авторам могут применяться меры вплоть до запрета написания комментариев и, в случае написания комментария через социальные сети, жалобы в администрацию данной сети.
Комментарии Правила