Pull to refresh
0
@Abigonread⁠-⁠only

UE Developer

Send message

Commandlet в Unreal Engine — что это и зачем?

Level of difficultyMedium
Reading time4 min
Views1.1K

Во время разработки на Unreal Engine могут возникнуть задачи, которые требуют автоматизации, повторяемых действий или пакетной обработки. Эти задачи могут варьироваться от компиляции Blueprint'ов до упаковки игры на удаленном сервере. В таких случаях на помощь приходят Commandlet'ы.

Я на них наткнулся случайно, когда при запаковке проекта было много ошибок и было нужно пройтись по всем Blueprint — классам в проекте чтобы проверить, правильно ли они компилируются после изменений в C++. В данной статье хотелось бы поделиться опытом своего знакомства с ними.

Читать далее

Оптимизация игры на UE. Часть 1. Сбор статистики

Level of difficultyMedium
Reading time9 min
Views5.8K

Привет, Хабр! В этой статье мы хотим рассказать, как столкнувшись с проблемами оптимизации игры, организовали сбор данных по производительности, чтобы наглядно отслеживать влияние изменений. А также автоматизировали процесс сбора статистики, чтобы результаты были сравнимы на разных системах и после правок в проекте.

Читать далее

Дебаг на максимум: секретные настройки Xcode, которые должен знать каждый разработчик

Level of difficultyHard
Reading time11 min
Views3.9K

Проблемы с графикой на iOS? Скрытые дебаг-фишки Xcode спасут вас!

Я прошёл через множество проектов — от стартапов до крупных компаний, и каждый раз графические глюки заставляли меня искать эффективные решения. Теперь я знаю, как пофиксить отрисовку. Вам понадобятся знания основ Swift, CPU, GPU и немного юмора.

Я расскажу, как исправить поехавшие пиксели с мощными дебаг-инструментами, и приведу примеры багов отображения на iPhone 16 Pro. Мой гайд поможет вам оптимизировать графику и сохранить пользователей, которых бесят тормозящие приложения.

Читать далее

Во имя богов Рандома. Настраиваем вероятность исходов в играх

Reading time8 min
Views8.2K

Непредсказуемость всегда вызывает у людей интерес и является популярным инструментом в руках разработчиков игр: процедурная генерация, лутбоксы, шансы крита и ещё множество параметров, на которые игрок может лишь молиться, чтобы они ему благоволили. Однако иногда подобные механики оборачиваются гневом простых людей против создателей. В этой статье рассмотрим реализации рандома для генерации исходов таким образом, чтобы минимизировать недовольство игроков и сохранить их интерес.

Читать далее

Как обойти замедление Youtube в России

Level of difficultyEasy
Reading time9 min
Views151K

Многие пользователи YouTube в России в 2024 столкнулись замедление загрузки видео на ПК, телефонах и телевизорах | Проблема связана с ограничениями скорости со стороны провайдера, но существуют проверенные методы, которые ускоряют загрузку и просмотр видео на YouTube.

Читать далее

Взаимодействие Unreal Insights c Unreal Engine 5 с точки зрения исходного кода

Level of difficultyMedium
Reading time7 min
Views1.8K

Читая исходный код Unreal Engine 5 я частенько стал натыкаться на загадочный макрос UE_TRACE_LOG (например, использование этого макроса можно заметить в коде UE_LOG). В этой статье я хотел бы рассказать, зачем нужен макрос UE_TRACE_LOG и как он связан с Unreal Insights.

Читать далее

Unreal Engine 4. Новая сетевая модель: PushModel

Reading time3 min
Views7K

В стандартной сетевой архитектуре Unreal Engine, сервер проверяет, изменение значения у реплицированной переменной Actor класса, и в случае отличия, значение синхронизируется между сервером и клиентом. Когда объем данных для синхронизации не больших размеров, особых проблем с производительностью нет.

Однако, игра часто может состоять из огромного множества Актеров и переменных, которые необходимо реплицировать одному или нескольким клиентам, и это уже может стать проблемным местом.

UE уже предоставляет такие функции как: NetUpdateFrequency, NetCullDistanceSquared и т.д. Основная задача которых состоит в том, что бы устранить из общей картины репликации, как можно больше актеров не нуждающихся в постоянно синхронизации данных.

PushModel, пока что экспериментальная фича, которая может позволить разработчикам активно отмечать необходимость синхронизации свойства, для этого предоставляется несколько макросов:

Читать далее

Чиним замедление YouTube на уровне роутера

Level of difficultyMedium
Reading time6 min
Views656K

Всех категорический приветствую. Буквально первого августа, прямо в ночь, стал у меня жутко лагать YouTube. Естественно, мне это сильно не понравилось. Ну, что же, давайте разбираться, почему и как это исправить в условиях моей личной сети.

Что случилось?

Хорошо описано произошедшее здесь, на Хабре. Если совсем кратко, своими словами - во время установки SSL соединения в открытом виде домен передается к которому мы подключаемся(так называемое SNI). И если это googlevideo.com то начинают твориться "интересные вещи". Можно проверить это локально коммандами из статьи.

$ curl https://speedtest.selectel.ru/100MB -o/dev/null

Читать далее

И целых 20 ядер мало

Level of difficultyEasy
Reading time27 min
Views20K

Если вы посмотрите на общую раздутость современного софта, загружаемые 100 гигабайтные игры, ежегодную Nvidia X090 дающую +20% год от года, и 20-ядерные процессоры, то со стороны может показаться, что оптимизация производительности неважно чего, будь то игры или другой софт, казалось бы, утратила свою актуальность. В эпоху безнаказанной производительности аппаратной части можно расплескивать хоть половину этой мощи, и пользователь этого даже не заметит. Это все может и верно, если вы не делаете игру. Почему же тогда на этих двадцати ядрах, фризит и тормозит (хорошо что не вылетает часто) игра выпущенная два года назад?

Почему тормозит я вам не скажу: возможно разработчики, которые делали её (на не самом новом движке, надо сказать) просто делали игру и не задумывались о рядовых игроках, которые сидят на пятилетнем железе, хотя даже пятилетнее железо уделывает приставки текущего поколения. Возможно это другая причина - когда твоя рабочая машина с 64 гибайтами оперативки и 4080 на борту тянет редактор, то беспокоиться об игроках можно начинать после патча первого дня.

При том, что все эти 30 — 60 — 120 — 200 фпс в играх, это чисто маркетинговый показатель, это время с которой движок может создавать фреймы для видеокарты, но движок это не только картинка, есть физика — а она как работала на 30 фпсах 10 лет назад, так и работает. Или звуковая подсистема, так она вообще своей отдельной жизнью живет в своих приоритетных тредах, мы просто кидаем туда меседжи с настройками и номером фрейма, чтобы засинхронизировать это с картинкой. Это сложно, но решаемо, но звук не привязан к картинке.

Налево пойдешь проца не хватит...

Occlusion masking: просвечиваем стены в Unreal Engine

Level of difficultyMedium
Reading time14 min
Views3.3K

В этом туториале рассмотрим создание эффекта Occlusion Masking — просвета стен, за которыми находится персонаж. Постарался структурировано изложить свой опыт по этому вопросу, включая разбор существующих решений, реализацию основного и дополнительного функционала, а также решения проблем, с которыми пришлось столкнуться. В общем, это та статья, которой мне очень не хватало, когда я работал над подобным эффектом.

Читать далее

Привычка быть SOLIDным разработчиком

Level of difficultyMedium
Reading time20 min
Views17K

Привет, Хабр! Меня зовут Грант, я уже 5 лет занимаюсь backend-разработкой в SimbirSoft, а с 2021 года возглавляю Backend-отдел компании в Краснодаре. В последние несколько лет неоднократно замечаю, что на входном интервью соискатели часто путают принципы разработки. Поэтому в этой статье решил разобрать, как проще их понимать, какие связи между ними прослеживаются, стоит ли учить все или что-то можно пропустить. А еще попробую раскрыть некоторые особенности, какие секреты скрывают популярные принципы разработки.

Погрузиться 👀

Ищем Арнольда Шварценеггера среди мужчин, женщин и детей с помощью нейросети на С++

Level of difficultyMedium
Reading time24 min
Views9.8K

Привет, Хабр! Меня зовут Кирилл Колодяжный, я ведущий инженер-программист в YADRO. Помимо основных рабочих задач, включающих исследование проблем производительности СХД, я увлекаюсь машинным обучением. Участвовал в коммерческих проектах, связанных с техническим зрением, 3D-сканерами и обработкой фотографий. В задачах часто использовал С++, хотя машинное обучение традиционно ассоциируется с Python. Этот язык программирования буквально захватил сферу, его используют повсюду — от обучающих курсов до серьезных ML-проектов.

Однако Python — не единственный язык, на котором можно решать задачи машинного обучения. Так, альтернативой может стать С++. Если последний вам ближе, вам будет интересен и полезен этот текст.

Под катом разберемся:

как организовать работу с данными и загрузку обучающего датасета, 

как описать структуру нейронной сети, 

как использовать уже готовые алгоритмы машинного обучения из доступных библиотек и фреймворков, 

как организовать конвейер обучения сети, 

как использовать предобученные глубокие сети для решения задач. 

Читать далее

«Цифровое» старение айтишников. Как появляется второй подбородок в 25 лет

Level of difficultyMedium
Reading time8 min
Views9.7K

Можно сколь угодно долго ходить на массажи, к косметологам, использовать дорогие кремы, но без понимания истинной причины появления того же второго подбородка заметных изменений не будет. Именно поэтому многие разочаровываются в «мягких процедурах», подсаживаются на ботокс или обращаются к пластическим хирургам.

Косметические процедуры все-таки больше про работу с верхними слоями кожи, а дело совсем не в лице. И я уверена, что  многие мужчины, читающие Хабр, были хотя бы раз в салоне красоты, а у некоторых в шкафу пылится баночка с бесполезным дорогим кремом.

Читать далее

Что почитать игровому программисту?

Level of difficultyEasy
Reading time6 min
Views32K

Объём специфичных знаний, которые требуются рядовому программисту игр, даже если он только начал свою карьеру, вызывает у меня «лёгкую» тоску. Это одна из причин, почему большая часть людей, которые «горят делать игры», отсеивается на этапе технических собеседований (обычно их больше одного). Это нормально и грустно. Добавьте сюда, что нефундаментальные знания, вроде инструментов, библиотек и движков, приходится обновлять где‑то раз в 5–7 лет. Не вижу тут, что игрострой сильно отличается от других областей разработки. Если бы лет 15 назад «добрый я» скинул на почту список книг, которые придется прочитать и осмыслить, армия собранных граблей не была бы столь большой и разнообразной, и без ручек половинной длины. Осторожно, в конце статьи будет супердлинная картинка (взята с github отсюда, с разрешения автора).

У программиста нет цели, только путь.

Процедурная генерация укрытий в играх

Level of difficultyEasy
Reading time8 min
Views8.4K

В игровых мирах сражения, взаимодействия НПС и стратегические маневры приводят к необходимости поиска точек защиты или точек укрытия (cover). В этой статье я рассмотрю один из аспектов игровой механики – создание такой системы на основе анализа окружения, которая позволяет игрокам и AI эффективно и эффектно использовать геометрию в разных игровых сценариях, и делают игровой опыт более динамичным. Посмотрим на особенности, которые влияют на алгоритм генерации и реализацию в движке 4A Engine.

Читать далее

Разбор PCG в UE5 на примере Electric dreams env

Level of difficultyMedium
Reading time3 min
Views5K

В UE5.2 появилась интересная технология процедурной генерации, которая заинтересовала многих. Я решил погрузится в эту тему и рассказать вам об этом.

При открытии тестовой карты, мне сразу на глаза попался интересный объект, который я ранее не встречал. Он отображался как игровая сцена. Но мы уже находились на сцене. В деталях объекта есть возможность его редактирования и создания. На данный момент напоминает очень удобные группы объектов которые легко редактировать.

Читать далее

Быстрый двоичный поиск без ветвления

Level of difficultyMedium
Reading time15 min
Views16K

Мои читатели — занятые люди, поэтому сразу перейду к делу. Вот она, самая быстрая обобщённая (и простая) реализация двоичного поиска на C++:

template <class ForwardIt, class T, class Compare>
constexpr ForwardIt sb_lower_bound(
      ForwardIt first, ForwardIt last, const T& value, Compare comp) {
   auto length = last - first;
   while (length > 0) {
      auto rem = length % 2;
      length /= 2;
      if (comp(first[length], value)) {
         first += length + rem;
      }
   }
   return first;
}

Тот же интерфейс функции, что и у std::lower_bound, но вдвое быстрее и короче. «Без ветвления», потому что if компилируется в команду условной передачи, а не в ветвление/условный переход. Ближе к концу статьи мы изучим опции компилятора и даже более быстрые версии полностью без ветвления. Для понимания этой статьи не нужны особые знания в C++. Достаточно понимать, что итераторы (first и last) по сути являются указателями на элементы массива, хотя могут указывать на один элемент дальше, чем последний элемент массива. Можете не обращать внимания на template, class, constexpr и &. Вот если бы существовал быстрый и чистый язык, работающий на уровне железа...1 2
Читать дальше →

Инструкция по сборке бинарной версии UE 4.27

Level of difficultyEasy
Reading time6 min
Views3.9K

Это инструкция о том, как настроить окружение и собрать бинарную версию движка Unreal Engine 4.27. В дальнейшем, ее можно доставить другим членам команды, у которых не установлена студия. При этом, сама ветка 4.27 до сих пор поддерживается Эпиками и регулярно получает обновления. Но, в бинарную версию движка из лаунчера эти изменения уже не добавляют и фиксы не выпускают.

Читать далее

Дизайн API в С++

Level of difficultyHard
Reading time26 min
Views24K

В этом году на C++ Russia я рассказывал про API дизайн. Эта статья — пересказ и переосмысление моего доклада.

То, что я здесь расскажу, основано на моем личном опыте — про API дизайн я думаю уже лет 15, с того момента как в 2008м начал читать ревью библиотек на входе в boost (кстати, всем рекомендую).

В первой части я сфокусируюсь на базовых вещах, которые применимы практически к любому императивному языку программирования, не только к C++. Будет также часть 2, более приближенная собственно к C++, в которой я расскажу о некоторых фичах языка и стандартной библиотеки, которые помогут вам сделать ваши API еще лучше.

Читать далее

Метод ветвей и границ. Задача коммивояжера

Reading time27 min
Views83K

Среди методов, привлекаемых к решению задач исследования операций (ИО) особое место занимает метод ветвей и границ (МВГ), который внес оригинальный взгляд в целом на проблемы оптимизации и позволил по другому воспринимать смысл оптимальности решений. Авторы разработанного метода предложили оценивать целевую функцию (ЦФ) задачи нижней границей целевой функции (НГЦФ) всего множества решений конкретной задачи, не получая ни всех решений, ни одного из них. Располагая такой оценкой, можно формировать решения задачи последовательно их улучшая не сильно уклоняясь от НГЦФ. В статье предлагается детальный разбор этого метода решения на числовом примере с подробными комментариями выполняемых действий при поиске оптимального решения.

Читать далее

Information

Rating
Does not participate
Registered
Activity