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

Моды

  1. NeoSanFox

    NeoSanFox Новичок

    Сообщения:
    3
    Симпатии:
    7
    Итак, имея мод 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

    Какая папка за какой сервер отвечает:
    [​IMG]

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

    После этого откроется такое окно:
    [​IMG]

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

    Поздравляю, вы только что оптимизировали расчёты синуса и косинуса!