Обзор Better FPS - теория и практика

DPAKOLLIA

Новичок
Итак, имея мод BetterFPS можно изменить алгоритмы вычисления sin() и cos(), которые используются постоянно и вычисляются в больших количествах.
Начну с теории:
Ухудшают производительность в первую очередь:
  • Частицы - дым от огня, частички травы от бега, капающая лава и многое другое.

  • Маяк - использует неэффективный код как для отображения луча, так и для наложения эффектов на рядом находящихся игроков. Также луч маяка прозрачный, но возможности сделать луч непрозрачным, как с листвой деревьев, нет.

  • Дроп - каждый такт происходит проверка на наличие рядом таких же выброшенных предметов для соединения в одну кучу

  • Механизмы - можно до бесконечности вести список всего, что взаимодействует с соседними блоками, как например, почти любой механизм. Насколько эффективно они это делают - зависит от разработчика.

  • Бессмысленные заводы - интересно, почему же лагает рядом с заводом булыжника длиной в 100 блоков?
Модификация BetterFPS предлагает несколько вариантов алгоритмов нахождения функций, которые могут быть продуктивнее для вашего компьютера.
Всего их 7:
  • Алгоритмы Riven’s - их 3 штуки

    Алгоритм Riven'a
    Алгоритм Riven'a использует таблицы поиска, которые позволяют не вычислять функции, а просто их найти, что намного эффективнее, чем функция Math.sin() в Java. Но в некоторых моментах обращение к таблице поиска может быть даже более «дорогим» из-за обязательной проверки границ, включающей в себя дополнительные сравнения и ветвления для каждой операции поиска.

    Частичный Алгоритм Riven'a
    промежуточное решение, когда используют таблицу поиска в сочетании с простыми вычислениями — интерполяцией.

    Полный Алгоритм Riven'a
    Не знаю, что использует этот алгоритм, но он отличается от вышеперечисленных.


  • Алгоритм Taylor’s использует ряд Тэйлора, который, между прочим, наряду с CORDIC (алгоритм Волдера), используется в калькуляторах для вычисления синуса и косинуса. Идея CORDIC заключается в сведении вычисления значений сложных (например, гиперболических) функций к набору простых шагов — сложению и сдвигу.

  • Алгоритм Java-вычисления использует стандартные функции для вычисления синуса и косинуса, доступные в Java - Math.cos() и Math.sin()

  • Алгоритм libGDX'a - вообще, libGDX это фреймворк для создания игр и приложений, написанный на Java с использованием C и C++. Как он находит синус и косинус я, к сожалению, не знаю

  • Ну и стандартный алгоритм - использует стандартную реализацию вычисления синуса и косинуса, используемую в Minecraft
Как же проверить, какой алгоритм быстрее?
Для этого нужно нажать Пуск -> набрать %appdata% -> перейти в папку hil.su -> затем выбрать папку с сервером, на котором вы играете (у меня это HiPower) -> зайти в папку Mods -> кликнуть правой кнопкой мыши на BetterFPS.jar -> открыть с помощью -> Java(TM)Platform SE binary

Какая папка за какой сервер отвечает:
image.png


hipower - я думаю, и так понятно
n_magick - сервер Magick
n_tmagick - сервер TechnoMagick
sandbox - удивлю, это Sandbox
tfcraft - сервер TFC

После этого откроется такое окно:
Better-FPS.png


В нем нужно нажать кнопку Протестировать алгоритмы
После этого внизу появится кнопка "Изменить алгоритм на ...", запишите алгоритм, который вам предложен. Протестируйте еще 7-8 раз, нажав на "Снова сравнить", постоянно записывая алгоритм, который вам предлагают. По окончанию вы получите некоторое количество сравнений алгоритмов, которые вы записали. Выберите самый часто повторяющийся алгоритм В САМОЙ ИГРЕ.

Поздравляю, вы только что оптимизировали расчёты синуса и косинуса!
 
  • Like
Реакции: harati, Noril и SSKirillSS