Godot 4. SceneTree root access speed test
Какой самый быстрый способ доступа к общему корню дерева сцен? Давайте потестируем...
Не самое популярное место для тем по Godot, но видос снимать лень, а поделиться инфой хочется. Тем более это такой олдскул, встречающийся, например, на офф. сайте php или на разных форумах, где в сообщениях десятилетней+ давности люди тестили скорость тех или иных команд и именно так определялось, чем лучше пользоваться.
В общем, задался я вопросом доступа к глобальному корню, начал тестить 4 известных мне способа это сделать и получил неожиданный результат. Выполним сначала прогон с вызовами всех четырёх вариантов, закончим одиночными. Для теста использовалась пустая 2D сцена с кнопкой и скриптом на корне сцены, выглядит вот так.
Структура сцены, показан сигнал на кнопке
Конечно, такой цикл следует оборачивать в функцию и вызывать её, а не тупо копипастить весь цикл, но... Я так и сделал и это замедлило общую скорость в 2 раза! Хотя соотношение результатов не изменилось, поэтому вот финальный вариант нашего тестового скрипта.
Как бы вы написали такой код?
Строка №12 написана с нарушение стайлгайда, там не рекомендуется использовать однострочную запись, но оказалось, что так цикл работает незначительно быстрее...
После первых прогонов выяснилось, что фукция, вызываемая первой, почти всегда работает медленнее, хотя изредка бывает так, что замедления не происходит. Поэтому пришлось прогнать в разных вариантах порядка. Тут как раз помогла обёртка в лямбду.
Не знаю, как бы я выкручивался без функций первого класса, добавленных в Godot 4.
Количество шагов цикла выбрано в 100 000, т.к. это достаточно, чтобы результаты были заметными, с учётом замедления от лямбда функций. При большем шаге разлёт в скорости каждого из вариантов сглаживается, эффект замедления первого test становится незаметен, а это нам не нужно. В самом конце (на скриншоте не видно) я повторил порядок 1,2,3,4, чтобы сравнить его с самой первой группой. Прогнав несколько раз, стало понятно, что во всех вызовах, кроме самого первого, порядок вызовов не влияет на результат. Отсюда, достаточно вызвать 3 одинаковых группы и отбросить результаты в первой четвёрке.
Финальный вариант группового теста
Результаты:
1 место - f1 = 0.032 - 0.037
2 место = 3 место - f3 и f4 = 0.033 - 0.050
4 место - f2 = 0.038 - 0.063
Стабильно хуже всех работает get_tree().root. Это прямой доступ к полю root объекта SceneTree, возвращаемого методом get_tree(). Видимо из-за итерации по объекту, которой, видимо, не происходит в таком объёме при других вариантах. Между остальными тремя различие ситуативно, поэтому я бы просто везде использовал $/root.
Одиночный тест я решил не проводить из-за всё того же замедления первого вызова. Провёл сдвоенный как на скриншоте и так для каждого из четырёх.
f1 = 0.034
f2 = 0.040
f3 = 0.035
f4 = 0.035
В среднем, f1 и здесь оказался быстрее. Спорный результат у f3 и f4. Понятно, что одно является сокращённой записью (не люблю слово синтаксический сахар) другого. Повторение в строенном варианте тоже ничего не дело. Вроде как действительно различия нет. Но, есть ещё один вариант тестирования, приближенный к реальным кейсам, т.к. связан он с записью результата любого из четырёх методов в переменную и доступа к этой переменной.
Изменён код на строке 13, и в функции, принимающей сигнал кнопки.
Результат ожидаемо одинаковый в пределах погрешности измерений и случайного разброса: от 0.004 до 0.011, что кратно быстрее доступа к корню через любой из четырёх методов. Отсюда можно сделать вывод, что в скриптах Godot 4, где нужен доступ к глобальному корню, стоит создать переменную с помощью синтаксиса вроде "@onready var root = get_tree().get_root()", т.к. такой код будет наиболее быстрым, и использовать уже её. Применение $/root по месту удобно и хорошо читаемо, но работать будет незначительно медленнее. Насколько это будет заметно в проекте? Зависит от частоты вызовов, но скорее всего незаметно. Однако, задача этой статьи - найти наиболее быстрый способ доступа и она выполнена, это вариант f1 записанный в переменную.
Моя новая игра: Elemental Empire
Сделано на Godot
4-х экономическая стратегия о волшебниках в космосе
В игре вам предстоит управлять колониями людей (волшебников) которые прибыли в новый для них мир
В игре представлены планеты разбросанные по системе, каждая из планет принадлежит одной из стихий (вода, огонь, земля, воздух), от стихии зависят различные бонусы доступные на этой планете
Стройте здания в доступных клетках, но помните что пространство ограничено. Производите еду для людей, добывайте минералы, производите из них другие предметы
Стройте порталы что бы отправить туда своих людей и развивать другое поселение
Пересылайте необходимые ресурсы между планетами
Призывайте духов для совершения нападения на других игроков (или для защиты)
Тратьте очки исследований что бы открыть новые здания и бонусы
Управляйте активными бонусами планеты - свободных слота 3, но вы можете менять их в любое время
В Питере шаверма и мосты, в Казани эчпочмаки и казан. А что в других городах?
Мы постарались сделать каждый город, с которого начинается еженедельный заед в нашей новой игре, по-настоящему уникальным. Оценить можно на странице совместной игры Torero и Пикабу.
Реклама АО «Кордиант», ИНН 7601001509
GameDev одним человеком. Проект "Бункер 23" ушёл в релиз!
Долой рабочие названия и ранний доступ!
Игра уходит в релиз, а я - в заслуженный отпуск. Правда заслужил!
Последние полтора года я пахал за целую команду...
Пост без рейтинга, просто я осознаю, что очередной рубеж пройден, и... шампанское не открываю, а вот выпить кофейку под шум поезда - очень даже отличная идея.
Отправляюсь в места, где родился и вырос, в старый родительский дом в деревне очень далеко от места, где живу.
В следующей игре хочу испытать себя на совершенно новом качественном уровне разработки мобильных игр.
Спасибо всем, кто верил! Тем, кто не верил - тоже спасибо! Все вы, независимо от позиции, классные и живые, я старался общаться со всеми в комментариях, в отзывах к играм, но не всегда успевал сказать каждому самое главное - вы прекрасны в своей уникальности!
Всех обнимаю!
Godot. Градиентные переливы)
Всем привет, давно ничего не постил, вечно некогда)
Странное название, но я хз как это назвать ещё, но вот пример, это по работе делал анимашку пока идет поиск противника, про партиклы тут вроде особо нечего рассказывать, уже и так эти моменты пояснял, а вот фон на заднем плане, раньше не знал как сделать подобное, долго голову ломал)) Но нашел решение)
Ну в целом, мне кажется можно проще решение найти, но не хочется покадровую анимацию, не знаю, думаю ещё пока, но в целом этот задник сделан шейдером. И кому интересно я записал видос, как подобного плана делать эффекты, можно и лучше сделать конечно, я ещё только учусь, но базовой концепцией поделюсь) Может пригодится кому)
Может не все хорошо получилось, вернусь ещё к этой теме, можно и партиклами добиться примерно такого-же эффекта. Посмотрим ещё.
Спасибо, за внимание.
Сравнение Godot и Pocket Code
: Для начинающих разработчиков которые совсем не разбираются в программировании мы бы посоветовал Pocket Code, а для тех кто уже знаком с каким либо языком можно использовать и Godot. Основными плюсами Godot является плавность и возможность создавать 3d игры, а плюсы Pocket Code это простота в использовании. В итоге Godot лучше Pocket Code.
Почему плохо работать в геймдеве!
Всем привет, возник спор за работу курьером и почему геймдев лучше, а мне тут есть что сказать и потому напишу свое мнение. Заголовок не бейт, это реально так и есть, щас попробую кратенько объяснить почему.
@LeonIlich, беседа с тобой надоумила написать пост, продолжу тут если ты не против)
За Геймдев:
Плюсы: Неплохо платят, учишься новому, в целом интересно.
Минусы: Забудь, что есть что-то остальное, ты всецело на одном проекте, особенно в предрелизе. Даже играть уже некогда будет. Кранчи, Кранчи, Кранчи!!!
Я два года даже не загорал, на рыбалке не был ещё больше)
За Курьера:
Голова всегда свободна!
Много чего хочется написать, но когда я работал продавцом и курьером, я делал игру своей мечты. Мой странный микс MOO2, космических рейнджеров и моей любимой Eve Online, тут и суть астероиды копать. Это примерно месяц разработки фултайм в одно лицо.
Сейчас я на работе пытаюсь сделать стилизованные трейлы и они суммарно у меня съели больше времени, чем предыдущая разработка, хотя опытные юнитисты, скажут, что тут делов-то на две копейки, в целом так, но мне надо на Godot) И у меня мало ещё опыта в VFX)
Вот как думаете интересно мне это делать вместо своих космических корабликов?
В целом мне тоже нравится, интересно.
Вот GameArtTeaser c работы,
на 50 секунде два моих эффекта попали в ролик даже)
Это прикольно, занятный проект, играется интересно, скоро будет альфатест, что интереснее всего для моих подписчиков и этой группы, это проект на Godot версия 4.1.1, много было сложностей, но много интересных решений, Godot походу годен не только для индиков на коленке собранных.
Все офигенно, но есть один минус! Последний коммит в своей разработке, я сделал в июне, аккурат перед тем, как перейти на фултайм в студию, да я работаю удаленно, но у меня нету сил и энергии сидеть на двух стульях, я или там или там, потому мне любопытен был вариант подработки курьером, но подработкой, там и 20к не заработаешь, там потеть и пыхтеть надо.
Лучше сосредоточится на чем-то одном, я на пятом десятке решил начать специализироваться на VFX, не успеваю я за программистами, но мне хватает бекграунда, чтобы с ними нормально сотрудничать) Собаки лают, караван идет, со временем все лучше и лучше получается уже.
Вот вам и путь из продавца, три года назад кажись я писал первый пост про шейдеры, и на пятом десятке обрел новую профессию с шестизначным окладом в не самом популярном пока движке)
Ругайте, критикуйте, ну я старался делиться всем чем мог и писал о чуть ли не каждом шаге, иногда срывало и бухал и дичал, но ровная дорога редко бывает. Может мне чаще надо было писать, о том, как не получалось то или другое, может действительно чаще буду писать теперь, не о конкретных реализациях, а больше о концепциях, чтобы на мысль верную навести, мои реализации далеки от идеала, меня тут много хейтили за них, но концепции были верные, а реализации, это дело наживное) Вопрос опыта, всего-лишь)
Спасибо за внимание, всем удачи!! Осилит дорогу идущий!