Где хранится кэш unreal engine 4

Обновлено: 05.07.2024

Эта страница Вики посвящена снижению порога вхождения для новых программистов на C++ .

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

Я и, надеюсь, другие смогут ответить на эти вопросы.

С чего лучше начать изучение UE4 C++ ?

Лично я рекомендую начать с расширения класса PlayerController, а затем сделать Blueprint из него.

Потом Вы сможете указать свой пользовательский PlayerController в вашем Game Mode Class.

У меня есть урок на эту тему:

ClientMessage

Когда Вы изучаете C ++, Вы должны быть в состоянии дать себе обратную связь, о том, что функции работают, алгоритмы получают информацию, и о том что разные части кода на самом деле отрабатываются.


Вы можете использовать логирование для этого, но также можно использовать ClientMessage!

Мне нравится ClientMessage, потому что 'всё, что Вы должны сделать, это нажать

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

Когда только Вы начинаете, важно иметь обратную связь, чтобы знать, что сделали всё правильно и где части кода работают неправильно, или просто не работают вовсе!

PlayerController встречается повсюду

Фактически в любой игре будет PlayerController, так что это хорошая точка входа в мир UE4 C++ :)

Что такое (->), ( ), (::) ?

Я видел, что в C++ мы используем дефис со стрелкой (->), а не точку, как в других языках (.). Но я также видел использование двойных двоеточий (::) которые я не понимаю. Вы можете, пожалуйста, объяснить- что делают с помощью этих символов в C++? Какая разница между (->) и (::) ?

Например, UnrealEdEngine.cpp (\UnrealEngine\Engine\Source\Editor\UnrealEd\Private), Вы можете увидеть функции UUnrealEdEngine ::Init в строке 26. Почему эта функция использует двойное двоеточие? И внутри этой функции я вижу Super::Init(InEngineLoop).

Я ожидал увидеть Super->Init(InEngineLoop), но вместо него двойное двоеточие. И внутри этой функции большинство вызовов с помощью двойного двоеточия. Поэтому пожалуйста: объясните разницу между (::) и (->) и (.) .

(->) означает, что это переменная, указывающая на данные. То есть переменная является ссылкой на контейнер, хранящий данные.

Это означает, что(.) это прямой доступ к реальным данным, в то время как (->) это косвенная ссылка на данные, которые могут и не существовать на самом деле.

То есть (->), может указывать на хранилище (контейнер) данных, которого на самом деле не существует.

Таким образом, Вы всегда должны проверять такие переменные!

Пример

После создания LocationPtr не указывает на хранилище данных, её необходимо связать с фактическими данными.

Переменная Location, напротив, сама является данными и может быть доступна сразу, используя точку (.)

Теперь, когда мы связали LocationPtr, мы можем получить доступ к переменной X с помощью косвенной ссылки (->)

Если у Вас есть нормальная переменная нужно использовать (.), Потому что переменная сама по себе- контейнер данных, так что Вы можете получить к нему доступ в любое время.

Когда Вы используете указатель, который является косвенной ссылкой, Вы не можете быть уверены, что указываете на существующие данные, поэтому Вы должны это проверить:


Если указатель ссылается на фактическую переменную, Вы можете получить к ней доступ, воспользовавшись стрелкой (->).

Использование (::)

(::) говорит о пространстве имён (namespace) / или области видимости функции или переменой.

Это означает, что функция объявлена в классе UUnrealEdEngine.

Так как функция инициализации является виртуальной, Вы можете вызвать версию функции из родительского класса (и Вы должны это сделать!)

Super означает родительский класс UUnrealEdEngine.

Для чего это?

У Вас есть огромная власть и свобода в C++!

Это, возможно, то, что делает его немного более сложным, для изучения :)

Вы можете объявить функции и переменные в любом месте в C++, поэтому используются (::) чтобы разграничить области: различные классы могут иметь переменные и функции с тем же именем, но при этом компилятор их будет различать.

Пример

Например, у Вас есть классы AMyTree и AMyFlower.

AMyTree хочется иметь функцию GetLocation (), так же как и в AMyFlower.

Однако в C ++, Вы работаете на очень низком уровне, что означает, что Вы можете объявить функции и переменные в глобальном пространстве имён.

Если Вы просто объявите переменную или функцию вне класса(class) или структуры(struct) или пространства имен(namespace),

то тогда эти функции и переменные будут объявлены в глобальном пространстве имён и будут вызываться везде, где бы они не использовались.

Это на самом деле очень полезно для ! Однако, это вызывает проблемы для AMyTree и AMyFlower, где в обоих классах требуется функция GetLocation ()! Если Вы не будете использовать (::), то компилятор не сможет различить GetLocation () для AMyTree и для AMyFlower при компиляции! Используя (::) Вы говорите компилятору: какая версия функции для какого класса.

Если бы не (::)

Если у нас не было (::) что бы объявлять области видимости переменных и функций, то каждое название в коде всего проекта должно было бы быть уникальным. Вы не могли бы использовать функции с одинаковыми именами.

Что значит, Т? В таких случаях как TSharedRef, TWeakPtr, TArray и т.д. "

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

..и просто читать следующим образом:

Буква Т нужна, но это скорее заявление о типе класса- Array. Представьте себе: имена классов могут быть разных цветов, Т просто один цвет, или вкус класса в UE4. Но, если Вы пытаетесь прочитать код и если Вы не игнорировали ее, то буква Т может помешать пониманию- что делает сам класс.

Общая Ссылка

Еще один пример:

Читая без T, мы видим "Общая Ссылка" (SharedRef). Игнорируя T, Вы можете читать основной код значительно легче, чтобы получить четкое представление о значениях каждого класса. Просто убедитесь, что использовали T, когда Вы попытаетесь работать с классом :)

Префиксы

Зачем нужны дополнительные префиксы. Например

  • зачем F в FVector и FSourceControlStatePtr
  • зачем T в TSharedRef, TWeakPtr, TArray
  • зачем U в (я думаю это Unreal) UObject, UUnrealEdEngine
  • зачем G в GIsEditor, GSlowTaskOccurred
  • и так далее.

За исключением G, это как цвета или вкусы классов в UE4. Каждая буква указывает на то, от какого класса унаследована та или иная сущность.

EPIC, Официальная документация по классам

Epic подробно рассказывает что означают данные префиксы:

G означает «глобальный», и это метка показывает Вам, что Вы можете получить доступ к этим переменным в любом месте.

Хорошо, так что в действительности означает T ?

В исходных кодах UE4, все типы данных имеют префикс указывающий на его категорию, например: Т используется для обозначения класса шаблона: TSharedRef, TWeakPtr, TArray и т.д.,- это всё шаблонные классы. Префиксы позволяют легко отличать имена классов от имён переменных, поскольку имена переменных обычно не объявляются с префиксами в исходных кодах UE4 (одно исключение к этому правилу- имена логических переменных (bool), они начинаются с 'B').

В общем T даёт Вам понять две вещи:

  1. Вы смотрите на название типа (не имя переменной).
    1. Этот тип данных является шаблоном класса.

    Так же есть и другие префиксы, которые можно найти в исходниках, например, U, A, S, I и F. Вы можете прочитать об их значениях здесь:

    Да, префикс перед именем типа выглядит несколько некрасиво. [1] ,но может быть гораздо хуже (Посмотрите 36-строчный фрагмент кода ближе к концу статьи).

    В качестве объяснения, шаблонные классы это такие классы, которым можно определить "подтип" к "основному типу". Для TArray, подтип может быть типом данных, которые буду хранится в нём, например:

    Это получился контейнер для ряда значений типа FString. Без шаблонных классов, Вам бы пришлось,"просто знать", что на самом деле массив "MyBadVariableName" содержит переменные типа "FStrings", но благодаря шаблонным классам это знает и компилятор, и это хорошо, так что Вам не придется держать столько вещей в свое голове во время чтения магически-запутанного вуду кода вашего друга.

    Вы можете больше прочитать о шаблонных классах здесь:

    Указатели

    Указатели (*) и ссылки (&). Я с трудом понимаю как их использовать. Что они такое? Вы можете показать несколько примеров того, как использовать и где использовать и какие преимущества их использования ?

    Это, пожалуй, самое главное что надо понять новичкам, чтобы действительно достичь прогресса в C++. Если у Вас есть четкое представление об указателях, то Вы должны быть счастливы от программирования в UE4 C++! Указатели чрезвычайно-мощные и немного опасные, потому что дают Вам силу, которая у них есть.

    Указатель ссылается на адрес памяти, где хранятся фактические данные. Чтобы получить адрес памяти для указателя, нужно использовать (&).

    Всегда проверяйте ваши указатели

    Прежде чем пытаться получить доступ к данным, указатели должны быть связаны, Вы всегда должны проверять это:

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

    Разыменования указателей (Получение доступа)

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

    Разыменования с помощью (*)

    Разыменования с помощью (->)

    Зачем использовать указатели?

    • Указатели дают Вам прямой доступ к области памяти, которая может быть далеко-далеко от локального контекста в котором работает ваш код.
    • Указатели также дают Вам возможность работать с огромными объёмами данных без создания копии этих данных.
    • Указатели дают Вам живую связь, с динамическим обновлением данных, которые всегда будут актуальными, потому что указатель это косвенная ссылка, и её не надо менять, чтобы обновились данные.

    Доступ к данным издалека

    Скажем, у Вас есть персонаж, который является частью подуровня, который является частью мира, который является частью далекой Галактики. Чтобы фактически получить доступ к переменной "Броня" этого персонажа, Вам надо пройти через целый ряд гетеров (Gets), как то так:

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

    Теперь, чтобы получить данные о броне, Вам не придётся писать

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

    Вместо этого Вы можете написать:

    Видите насколько это легче прочитать? Но подождите, это еще не все!

    Доступ к огромным объемам данных в любой момент

    Указатели могут быть связаны со сравнительно-небольшим объемом данных, или с большим или даже с гигантским объемом данных!

    Продолжая приведенный выше пример, можно спросить, "Почему я не могу просто создать копию переменной "Броня" ?"

    Но что, если FArmorStruct содержит гигантское количество данных, и Вы хотите сделать это для 300 персонажей по всей галактике? Вы бы стали копировать данные много раз. Но данные уже есть в одном месте памяти. Зачем Вам копировать их несколько раз, тем самым дублируя данные? Указатели позволяют избежать этого! Вы можете просто указать на одну ячейку в памяти и получать доступ к ней в любое время.

    Будьте в курсе изменений в реальном времени

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

    Итак, еще раз, правильный путь:

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

    Передача данных по ссылке

    Еще одно применение ссылок для передачи данных в функции. Это особенно важно для очень больших объемов данных, которые Вы бы не хотели, копировать в контексте функции!

    Если Вы не будете использовать ссылки, то будете копировать весь огромный массив, просто чтобы узнать, насколько он большой!

    Связанный урок от Epic

    Начальные настройки UnrealEngine4 и записи о сбоях личного использования

    1. После загрузки UnrealEngine4 в Epic

    1-1. Во-первых: параметры запуска


    1-2. Далее: (отметьте) ввод отладочных символов-приложений



    В будущем будут новые сбои, что удобно для просмотра подробных причин.

    2. Выполните конфигурацию файла, относящегося к UE4.

    2-1. Удалите кеш на диске C и измените адрес кеша UE4, чтобы запросить адрес проекта.

    1. Сначала создайте игровой проект случайно, выберите свой собственный каталог проекта.

    2. Закройте UE4 после создания.


    3. Найдите каталог, в котором установлен UE4.

    4. Найдите файл BaseEngine.ini в UE_4.24 / Engine / Config и откройте его непосредственно в Блокноте.


    5. Правка-поиск-введите [InstalledDerivedDataBackendGraph] в поле поиска.

    6. Измените содержимое ниже [InstalledDerivedDataBackendGraph].


    7. После изменения проверьте, успешно ли оно выполнено.
    1. В файле BaseEngine.ini введите [DerivedDataBackendGraph] в поле поиска.

    2. Найдите выделенный текст на рисунке, то есть модификация прошла успешно, путь к кешу проекта и перейдите в папку проекта.

    2-2. Удалите кеш онлайн-программы SwarmAgent.

    Каталог кеша: C: \ Users \ имя пользователя \ AppData \ Local \ UnrealEngine \ 4.24 \ Saved \ Swarm \ SwarmCache
    Удалить SwarmCache

    3. Настройки, связанные с UE4

    3-1. Установите UE4, чтобы не компилировать чертежи при запуске.

    1. Найдите путь к файлу конфигурации: C: \ Users \ имя пользователя \ AppData \ Local \ UnrealEngine \ 4.24 \ Saved \ Config \ Windows \ Engine.ini

    2. Откройте файл Engine.ini.

    3. Добавьте текстовое содержание

    4. Сохраните и перезапустите

    3-2. Настройки сохраняются только при успешной компиляции.


    1. Откройте проект наугад, и рядом с проектом есть перевернутый треугольник, как показано на рисунке.

    3-3. Отображение информации редактора в режиме реального времени


    1. Edit-Editor Preferences-General-Performance-Check для отображения частоты кадров и информации в реальном времени.

    Журнал сбоев UE4 (1)

    Сбой из-за драйвера видеокарты


    как показано на картинке:

    Решение:


    1. Сначала войдите в NVIDIA GeForce Experience.


    2. Проверьте файл обновления (три точки рядом с ним) -выберите настройки-драйвер Studio-проверьте файл обновления (как показано на рисунке)

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

    4. Перезагрузите компьютер (желательно перезагрузите)

    Журнал сбоев UE4 (2)

    Сбой из-за NVIDIA Aftermath


    Решение:
    1. Найдите ConsoleVariables.ini, путь: установленный диск: UE_4.24 \ Engine \ Config \ ConsoleVariables.ini
    2. Найдите [Startup]
    3. Добавьте под текстовым содержимым этой области
    r.DX11NVAfterMathEnabled=0
    r.GPUCrashDebugging=0
    , как показано на рисунке:

    4. Сохраните и перезапустите UE4.

    Интеллектуальная рекомендация


    WECHAT MILLY WAY POINT CAMENT CARD - СОВРЕМЕННЫЕ СТРАНИЦЫ ПРОГЛЯЮТНОЕ ЗНАЧЕНИЕ (Запрос)

    WECHAT Small Pass Pass Value и значение приобретения: 1. Установите способ настройки идентификатора идентифицирует значение параметра, передаваемое после прыжка; 2, используя метод Data-XXXX для идент.


    Текущая задача Узел больше экземпляров


    [Linux] Программирование сетевых сокетов UDP

    Что такое протокол UDP Протокол UDP называетсяПротокол пользовательских датаграмм UDP - протокол транспортного уровня Без установления соединения, ненадежная передача, ориентированная на дейтаграмму П.



    Основная идея обработки больших данных - разделяй и властвуй

    Разделяй и властвуй - «разделяй и властвуй» Как мы все знаем, компьютеры очень быстрые и используются людьми. Однако независимо от того, насколько быстрым является компьютер, способность о.

    Если тебя посылают в гугл — это не значит, что хотят тебя обидеть\унизить\самоутвердиться за твой счет. Это всего лишь означает, что твой вопрос довольно элементарен и у тебя наверняка получится найти ответ самостоятельно. От этого выиграют все — ты повысишь свой скилл гугления, лучше разберешься, а остальные не потратят свое время на повторение в сотый раз того, что и так легко найти.

    Если ты уже прошерстил первые 2–3 страницы гугла и ничего не нашёл, удостоверься, что ты правильно гуглишь:

    • твои запросы должны быть на английском с припиской в конце unreal engine (например, set start level unreal engine)
    • постарайся как можно сильнее обобщить запрос, например, не “как перекрасить кубик когда у меня игрок нажмет кнопку”, а “change material parameter on button event unreal engine”.

    Посоветуйте с чего начать. Курсы, ссылки, вот это все.


    Освещение постоянно меняется, то светлеет, то темнеет.

    Так работает автоэкспозиция. Отключить её совсем или настроить можно через постпроцесс. Для отключения выставьте минимальное и максимальное значение одинаковым в разделе экспозиции в настройках постпроцесса. Убедитесь, что вы попадаете в объем постпроцесса, либо что он бесконечный (галочка Unbound). Что-то еще узнать по этой теме можно прогуглив “auto exposure unreal engine”.


    Объекты исчезают при отдалении камеры.

    • Проверяем лоды: нужно проверить как выглядит ассет в разных лодах, возможно в одном из них его не видно вовсе. Так же у лодов есть возможность скрывать объект в зависимости от настроек графики (пробить этот вариант можно выставив все пункты скалабилити на эпик).
    • Проверяем дистанцию прорисовки у объектов (кулинг): у одних ассетов на уровне (например, статик или скелетал меши) это настройка draw distance, у других (например, у фолиажа) это cull distance
    • Проверяем материал: ищем в материале все ноды, которые так или иначе могут быть связанны с дистанцией или глубиной пикселей, например функция CameraDepthFade или Distance_Blend или просто Camera Distance в сочетании с Absolute World Position может скрывать объект на определенной дистанции от камеры
    • Баунд боксы: проверяем достаточен ли размер баунд бокса объекта для отображения, можно попробовать сильно увеличить баунд бокс для проверки.


    Импортирую меш, а он раздельными кусками в движке. Как импортировать одним мешем?

    Самым лучшим решением будет объединить меш в любом 3D пакете, но, если такой возможности нет, то в окне импорта нужно поставить галочку Combine Meshes.


    Импортирую меш, а пивот не там, где в 3д пакете.

    Сбросьте позицию модели в 0.0.0. в 3D редакторе, чтобы ось координат и пивот совпадали, тогда он импортируется корректно.


    Можно ли поменять пивот в движке?

    Конечно проще и лучше сделать это изначально в 3D редакторе, но если вам этот способ не подходит, то можно делать так или так.

    А что насчет целых сцен? Как импортировать разом сцену, сохраняя и пивоты объектов и позиции?

    Импорт целых сцен разом — кейс нетривиальный. С дефолтными настройками импорта у вас сохранятся позиции на сцене, но пивотом у всех объектов станет 0.0.0 сцены.


    Если при импорте убрать галочку Transform Vertex to Absolut, то у каждого объекта будут сохранены пивоты, но позиции на сцене не сохранятся.


    Чтобы сохранить и позиции и пивоты объектов, можно импортировать сцену через File — Import Into Level. Пивоты объектов сохранятся, а сами объекты будут расставлены на уровне как в 3D пакете. Так же там есть опция импортировать сразу как отдельную сцену в блюпринт акторе.


    Или же можно воспользоваться плагинами для переноса из вашего 3D пакета в анрил. Такое, например, позволяет делать плагин Datasmith.


    Unreal Engine завис на первом открытии проекта. Стоит на 45% (95%, 39%, 50% _подставьте свою цифру_ ). Это нормально? Сколько ждать то?

    Да, в большинстве случаев это нормально. При первом запуске проекта происходит компиляция шейдеров. Вы можете проверить это в диспетчере задач — процессы Shader compiler. Скорость компиляции зависит напрямую от производительности вашего процессора. В зависимости от его мощности и сложности проекта, компиляция может длиться как 10 минут, так и полтора-два часа.

    Особенно нетерпеливые или потерявшие надежду могу попробовать открыть этот проект в другой версии движка.


    Кстати, в UE5 это учли и теперь помимо процентов показывается и состояние компиляции шейдеров и другие процессы, чтобы вы не волновались. А так же добавили эту киллерфичу в 4 анрил с 4.27 версии.

    Как правильно перенести ассет в другой проект? Как передать ассет другому человеку? Поломались ассеты при переносе. Пути к текстурам потеряны, материалы не материалы, ничего не работает. Ааааа.

    Чтобы переместить ассет в другой проект, ПКМ по ассету в контент браузере — Asset Actions — Migrate. В окне выбора места указать папку Content второго проекта, в который нужно передать ассет. Важно указать именно папку Content, а не какую-либо другую. Иначе все ссылки на пути к используемым ассетам будут неверными и в новом проекте ассет будет отображаться некорректно.


    Вы так же можете передавать таким образом ассеты другому человеку. Делайте мигрейт в любую папку на вашем ПК и передаете человеку эту папку. Затем он просто вставляет содержимое этой папки в папку Content своего проекта и все.

    Если что-то пошло не так и после переноса ассеты отображаются неверно или не отображаются вовсе — cкорее всего вы произвели мигрейт неправильно. Насоздавали лишних папок или переместили не в то место. Пути к ассетам до и после мигрейта должны полностью совпадать.


    Если вы сделали все правильно, но в вашем втором проекте ассеты не отображаются (видны только папки), значит вы пытаетесь перенести ассеты из старшей версии движка в младшую. Смотри пункт 11.

    Можно ли как-то вытащить ассеты в другой движок или 3D пакет?

    Да, для некоторых ассетов это возможно, например, для моделей или текстур. В контент браузере ПКМ по ассету — Asset Actions — Export. Модели экспортнутся в формате fbx, а текстуры в tga.


    Как перенести проект из 4.26 в 4.25 (из любой другой старшей версии в младшую)?

    Вообще анрил не поддерживает обратную совместимость, поэтому файлы из более поздних версий просто не будут видны в более ранних.

    Но можно попробовать перенести вручную (ноды блюпринтов и материалов переносятся через Ctrl+C и Cntrl+V, меши и текстуры — через ПКМ Asset Actions — Export и импортируются заново).

    Ассеты из маркетплейса забивают диск С, хотя я добавляю их в проекты, которые лежат в других местах.

    Перед тем как добавить ассеты в выбранный вами проект, они скачиваются в Vault Cache из которого потом копируются в указанные вами проекты.

    По дефолту он расположен на диске С. Изменить его расположение можно через лаунчер. Epic Games Launcher — Settings — Vault Cache Location.


    Я запек свет и что-то пошло не так.

    Перед тем, как печь свет, убедитесь, что вы посмотрели хотя бы несколько базовых уроков по запеканию и понимаете, как это работает. Понимаете, что такое лайтмасс и как выглядит хорошая развертка для лайтмапы. Для старта подойдут вот эти базовые уроки, например: Статичный свет (Lightmass) в UE и UV развертка для Lightmass.
    Если хочется больше — Lighting Techniques & Guides.

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

    После запекания объект\объекты становятся черными или очень странно освещенными.

    Скорее всего дело в плохой развертке для лайтмапы (либо и вовсе её отсутствии). Проверьте что у вас всё хорошо с разверткой под лайтмапу (объекты на развертке не выходят за границы, не пересекаются, достаточного размера) и что именно её индекс выставлен для лайтмапы. А еще желательно глянуть туторы из пункта 13, прежде чем печь свет.


    После запекания тень пиксельная.

    Первым делом проверьте вашу развертку для лайтмапы, удостоверьтесь что пиксели возникают не из-за того, что элемент на развертке очень маленький. Попробуйте увеличить разрешение лайтмапы. Если это не помогло, в конце пункта 13 есть 2 ссылки с часто возникающими проблемами, возможно они помогут.


    Делаю лэндскейп и на нём появились квадраты.

    После запекания освещения они исчезнут.


    Объекты с эмиссив материалом не освещают уровень.

    Свечение от эмиссива не дает динамического света. Чтобы свет от объектов с эмиссив материалами учитывался в освещении нужно поставить соответствующие галочки и запечь свет. Тогда он появится в запеченном освещении. Какие галочки ставить — в первой части видео. Если же вам нужен не только статический свет от эмиссив материала, но и динамический, то этого можно добиться только используя RTX технологии в проекте (ну либо фейковать источником света как во второй части видео из этого пункта).

    Могу ли я использовать RTX\GPU Lightmass, если у меня не 20xx\30xx серия карт?

    Да, поддерживаются не только последние серии карт. С меньшей производительностью, но можно использовать даже GTX начиная с 1060 на 6гб. Весь список (кроме 30ой серии) на картинке:


    Накладываю материал на разные меши, и он выглядит\масштабируется на них по-разному. Как увеличить\уменьшить масштаб текстуры или сдвинуть текстуру? Как использовать текстуру без развертки\с плохой разверткой проекцией как в моем любимом 3D пакете N?

    Скорее всего разные меши будут иметь разную развертку, поэтому совершенно нормально, что один и тот же материал будет накладываться с разным масштабом на разные развертки. Почитать, что такое развертка и как вообще текстура ложится на 3д модель можно тут или тут.


    Менять масштаб текстуры можно умножением TexCoord на скаляр или вектор. Сдвигать текстуру добавлением или вычитанием из TexCoord. Вот здесь все наглядно показано (ссылка с таймкодом).


    Точно такие же проекции как в своем 3д пакете вы вряд ли найдете, но помимо наложения по UV, можно накладывать текстуру и без нее. По ссылке с таймкодом несколько вариантов проекций текстур без UV (с 17 минуты и по 25ую). Скорее всего вам подойдет трипланар, примерной реализацией которого является нода WorldAlignedTexture. Чтобы текстура держалась на объекте, следует учитывать локальные координаты объекта.


    Кстати, въехать в материалы вам поможет бесплатный мини-курс с офф сайта Materials Master Learning.

    Прозрачный материал не блюрится DOFом камеры.

    В материале нужно убрать галочку Render after DOF.


    Как сделать, чтобы коллизия у меша была не простыми примитивами, а полностью повторяла форму меша?

    В ассете меша в настройках коллизии выставить Use Complex Collision As Simple. Замечу, что это будет несколько дороже для вычислений и в физических взаимодействиях меши с комплексной коллизией могут выступать только в роли статики.


    Частицы пропадают во время игры или записи синематика в секвенсоре или просто, когда начинаешь отворачиваться от эмиттера.

    В 90% случаев дело в баунд боксах частиц. Если у вас GPU частицы им нужно выставить фиксированный баунд бокс и увеличить его (иногда существенно увеличить). У CPU частиц размеры баундбокса считаются автоматически, но и им иногда приходится выставлять большие фиксированные баунд боксы, особенно во время записи секвенсором или при больших масштабах эффекта. В каскаде выставляется так:


    В ниагаре здесь:


    Как въехать в системы частиц?

    Сейчас в Unreal Engine две системы частиц: старая Cascade (помечена как Legacy в UE5) и новая Niagara. Базовые уроки по Cascade: раз и два
    Базовые уроки по Niagara: раз и два

    Кстати, здесь есть статейка о том, чего посмотреть, если хочется в vfx на движке.

    Хочу отрендерить видео секвенсором, но на рендере камера не моя, статичная съемка непонятно откуда.

    • В первую очередь убедитесь, что ваша камера присутствует в Camera Cuts вашей секвенции.


    • Затем удостовертесь в том, что на уровне у левел сиквенса стоит галочка авто плей.


    • Ну и на всякий случай в World Settings можно выставить дефолтный гейммод, чтобы секвенсор точно ничего не перехваттывало.


    Когда Unreal Engine 5?

    С 26 мая 2021 доступна версия в раннем доступе. Вы можете загрузить её в лаунчере или на гитхабе. Версия пока сыроватая и сами эпики указывают, что она пока не для продакшена. Но в качестве изучения вполне подойдет. Из раннего доступа Unreal Engine V должен выйти в 2022 году.

    Что же изучать сейчас? Unreal Engine 4 (4.26) или Unreal Engine 5?

    По факту сильной разницы нету. 98% того, что вы можете узнать про UE4 точно так же работает и в UE5. Материалы, левелдизайн, блюпринты, частицы — все работает одинаково. Какие-то существенные различия есть только в физике, свете и новых технологиях, которые появились только в пятёрке. Поэтому достаточно начать с любых уроков по четвёртой версии движка и, когда более-менее освоитесь в ней, начинать изучать новые технологии пятой, которых в UE4 нет.

    По умолчанию Unreal Engine 4 (UE4) использует Deferred Renderer, поскольку он обеспечивает максимальную гибкость и предоставляет доступ к большему количеству функций рендеринга. Однако при использовании Deferred Renderer есть некоторые компромиссы, которые могут не подходить для всех видов VR. Forward Rendering обеспечивает более быстрый базовый уровень и более быстрые проходы рендеринга, что может привести к повышению производительности на платформах VR. Forward Rendering не только быстрее, но и предоставляет лучшие варианты сглаживания, чем Deferred Renderer, что может привести к улучшению визуализации.

    Включение Forward Shading:

    1. В меню Edit откройте Project Settings.

    2. Выберите вкладку Rendering слева и найдите категорию Forward Shading.

    3. Включите Forward Shading.

    Повышение производительности проекта на Unreal Engine 4 Unreal Engine 4, Gamedev, Длиннопост

    Вам будет предложено перезапустить редактор, где после перезапуска вы можете начать использовать параметры и функции Forward Renderer.

    Производительность и особенности

    Переход от Deferred Renderer к Forward Renderer может повысить производительность вашего проекта.

    Forward Renderer может быть быстрее, чем Deferred Renderer для некоторого контента. Большая часть улучшения производительности достигается за счет функций, которые можно отключить для каждого материала. По умолчанию только ближайший захват отражения будет применен без коррекции параллакса, если материал не включит High Quality Reflections, высота тумана рассчитывается для каждой вершины, а плоские отражения применяются только к материалам, которые его разрешают.

    Повышение производительности проекта на Unreal Engine 4 Unreal Engine 4, Gamedev, Длиннопост

    Используя эти опции в новой VR-игре Robo Recall от Epic Games, Forward Renderer примерно на 22% быстрее, чем Deferred Renderer на NVIDIA 970 GTX.

    Повышение производительности проекта на Unreal Engine 4 Unreal Engine 4, Gamedev, Длиннопост

    Обязательно используйте инструменты производительности и профилирования Unreal Engine, чтобы измерить производительность вашей игры при переключении с Deferred Renderer на Forward Renderer. Вы должны уделить особое внимание профилированию графических процессоров, чтобы увидеть, куда идет стоимость графического процессора, а также использовать команды Stat для помощи по профилированию.

    Известные проблемы и общие вопросы

    Следующие функции не поддерживаются при использовании Forward Renderer:

    1. Техника экранного пространства (SSR, SSAO, Contact Shadows)

    2. Полупрозрачные динамические тени и теней от стационарного света

    3. MSAA на D-Buffer декалей и Motion Blur

    Ниже приведены некоторые общие вопросы / проблемы, которые могут возникнуть при использовании Forward Renderer.

    Мой материал ломается при переключении на Forward Renderer из-за текстур GBuffer?

    - GBuffer недоступен для выборки текстур в Forward Renderer он доступен только для Deferred Renderer.

    Forward Renderer ограничивает меньшим кол-ом текстур в материале чем Deferred Render?

    - Forward Renderer объединяет все функции в один шейдер, поэтому для вашего материала доступно меньшее кол-во текстур.

    - Обычно это можно решить с помощью Shared Samplers.

    Почему у меня проблемы с MSAA, при отображении примера Atmospheric Fog?

    - Atmospheric Fog еще не обрабатывает MSAA правильно.

    - Для Height Fog вы можете обойти с помощью Vertex Fogging (который включен по умолчанию при включении Forward Renderer).

    Сделал настройки как написано выше. Идет очень долгий перезапуск. Текстуры и материалы сцены уровень AAA рисовал все в Quixel Mixer.


    Моя пошаговая стратегия на Unreal Engine ч.2

    В Моя пошаговая стратегия на Unreal Engine ч.1 я начал рассказывать о реализации кода, но совсем забыл рассказать про мир игры и концепции.

    Моя пошаговая стратегия на Unreal Engine ч.2 Gamedev, Инди игра, Разработка, Unreal Engine 4, Пошаговая стратегия, Длиннопост

    У каждой расы в Deformity есть свой главный грех. Именно он мотивирует расы на дурные поступки. По нему демоны находят "своих" и предлагают помощь в обмен на веру и поклонение.
    Феугея - континент-родина эльфов. Они появились и жили на нем сотни тысяч лет в одиночестве. Считая себя единственным оплотом разума в мире они всё сильнее растили Гордыню.
    Гномы приплыли на континент пару тысяч лет назад. Когда-то огромные, под 3 метра ростом воины, в постоянной нехватке привычной еды и ресурсов, мельчали и воспитывали в себе Жадность.
    Люди - самая молодая раса, приплыла на континент около пятисот лет назад. Агрессивные охотники, эксплуатирующие природу, они всё ещё не утратили звериный Гнев.
    С момента прибытия людей 3 расы жили в мире, но гномы чувствовали угасание своей расы, поэтому методично планировали войну.

    Ключевой механикой игры являются демонические дары. У каждой расы есть свой набор даров, связанных с их грехом. Так, например, выглядят дары людей:

    Моя пошаговая стратегия на Unreal Engine ч.2 Gamedev, Инди игра, Разработка, Unreal Engine 4, Пошаговая стратегия, Длиннопост

    Приняв дар единожды, раса со временем будет все сильнее полагаться на помощь своего покровителя, и постепенно терять свои собственные силы. Поэтому любая империя, заключившая договор с демоном, постепенно придет в упадок, но может получить значительное преимущество в ближайшей войне. Дары делятся на 4 типа:
    1. Общий дар на империю (1 из 2 на выбор) - он же её проклятье. Ограниченно повышает одни характеристики, и бесконечно долго уменьшает другие. Остальные дары ничего не уменьшают.
    2. Слабые дары для всех войск (2 из 4) - могут немного изменить стиль игры.
    3. Сильные дары для героя (3 из 6) - значительно усиливают героя, позволяя переживать столкновения больших армий и наносить большой урон.
    4. Очень сильные дары для конкретных видов войск (2 из 4) - позволяют значительно изменить баланс юнитов, усилив их неспецифическими функциями. Так например у гномов:

    Моя пошаговая стратегия на Unreal Engine ч.2 Gamedev, Инди игра, Разработка, Unreal Engine 4, Пошаговая стратегия, Длиннопост

    Конница почти перестанет страдать от пик, но всё ещё будет страдать от магии. А эльфы:

    Моя пошаговая стратегия на Unreal Engine ч.2 Gamedev, Инди игра, Разработка, Unreal Engine 4, Пошаговая стратегия, Длиннопост

    Смогут прожигать тяжело бронированные отряды.
    За счёт этого можно будет удивлять других игроков неожиданными композициями войск и тактиками.

    P.S. Хотя на счёт других игроков - после своего первого поста я дал своим друзьям бета-версию, и сел наблюдать за их сражением в дискорде. Помимо кучи мата из-за специфического баланса, я услышал от них жалобы на множество ошибок и недоработок. Поэтому последние два дня только и делал, что исправлял их) Это был мучительный кодинг-марафон с абсолютно неожиданными развязками. Это то, что они нашли за пол дня игры:

    Моя пошаговая стратегия на Unreal Engine ч.2 Gamedev, Инди игра, Разработка, Unreal Engine 4, Пошаговая стратегия, Длиннопост

    Единственное, что радует - баги встречаются всё реже) Я дофикшу их и обязательно вернусь с рассказом о реализации какой-нибудь системы)


    Моя пошаговая стратегия на Unreal Engine ч.1

    Вот уже почти год, как я работаю над своей собственной стратегий, но никак не решался показать её людям. Это мой первый проект и меня постоянно терзают сомнения, сможет ли он кому-то понравится. Но вот с чего всё началось.

    Первое, с чего я начал - генерация карты. Я отказался от генерации с помощью шумов из-за подлинной случайности, и начал делать свою псевдослучайную систему генерации карты. Это было хождение по мукам, но в конечном счёте явило собой систему, которая почти случайным образом заполняет несколько ячеек двумерного массива индексами, а затем они "растекаются" до встречи друг с другом. Ячейки одного индекса - это Сектор.

    Моя пошаговая стратегия на Unreal Engine ч.1 Gamedev, Инди игра, Длиннопост, Разработка, Unreal Engine 4, Пошаговая стратегия, Видео

    Здесь правда уже немного более поздний скрин, но по факту - каждый сектор заполняется одним или двумя ресурсами, которые "растекаются" на некоторое количество клеток.
    Особую сложность представил собой алгоритм поиска пути и отсечения лишних секторов. Т.к. в моей игре нельзя было ходить через лес и воду - пришлось использовать немного измененный алгоритм Дейкстры. Например - Если у сектора только 1 сосед, и тот отделен лесом и водой - нужно прорубить путь друг к другу.

    Моя пошаговая стратегия на Unreal Engine ч.1 Gamedev, Инди игра, Длиннопост, Разработка, Unreal Engine 4, Пошаговая стратегия, Видео

    Чтобы оптимизировать алгоритм для генерации, пришлось помучаться, но в итоге даже очень большая карта генерировалась за 10-15 секунд на моем ведре.
    Саму систему боя я решил организовывать между двумя секторами. Каждый игрок или команда, выставляют своих юнитов в пределах заданных клеток. Чтобы это нормально работало в мультиплеере, пришлось поделить сектор на количество игроков в нём.

    Моя пошаговая стратегия на Unreal Engine ч.1 Gamedev, Инди игра, Длиннопост, Разработка, Unreal Engine 4, Пошаговая стратегия, Видео

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

    Моя пошаговая стратегия на Unreal Engine ч.1 Gamedev, Инди игра, Длиннопост, Разработка, Unreal Engine 4, Пошаговая стратегия, Видео

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

    Unreal Engine 4 вылетает внезапно или случайно без причины? Вот 8 эффективных методов быстрого устранения сбоев. Это руководство поможет вам решить эту проблему.

    Попробуйте эти исправления

    Возможно, вам не придется пробовать их все; просто продвигайтесь вниз по списку, пока не найдете тот, который работает.

    1. Обновите свой Unreal Engine 4
    2. Обновите драйверы вашего устройства
    3. Проверить установку
    4. Прекратите разгонять процессор
    5. Измените видеокарту по умолчанию
    6. Измените настройки реестра
    7. Временно отключите антивирус
    8. Выполните переустановку

    Исправление 1: обновите свой Unreal Engine 4

    Разработчики Unreal Engine продолжайте выпускать новые версии, поэтому проверьте, установлена ​​ли у вас последняя версия, и установите ее, если нет. Это самое простое решение проблемы сбоя.

    1) Откройте Пусковая установка нажмите Unreal Engine вкладка, затем перейдите в свой вкладка библиотеки .


    2) Вверху вы должны увидеть Версии двигателя , и щелкните маленькая стрелка вниз чтобы убедиться, что у вас установлена ​​самая последняя версия.

    3) Если доступна новая версия, выберите последнюю версию и нажмите Установить .

    Как только он будет установлен, вы увидите, все ли у вас работает нормально. Надеюсь, это так. Но если нет, можно попробовать еще несколько исправлений.

    Исправление 2: обновите драйверы вашего устройства

    Есть два способа обновить драйвер - вручную и автоматически.

    Вариант 1. Вручную

    Чтобы обновить драйверы таким образом, вам потребуются навыки работы с компьютером и терпение. Чтобы получить драйвер устройства, вам необходимо перейти на веб-сайт его производителя, загрузить последний и правильный драйвер, а затем установить его вручную.

    Вариант 2: Автоматически

    Если у вас нет времени, терпения или компьютерных навыков для обновления драйвера вручную, вы можете сделать это автоматически с помощью Водитель Easy .

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

    Вы можете обновить драйвер автоматически с помощью БЕСПЛАТНОЙ или Pro версии Driver Easy. Но с версией Pro это занимает всего 2 клика (и вы получаете полную поддержку и 30-дневную гарантию возврата денег).

    2) Запустите Driver Easy и нажмите Сканировать сейчас кнопка. Driver Easy просканирует ваш компьютер и обнаружит проблемы с драйверами.


    3) Щелкните значок Обновить рядом с каждым устройством, чтобы загрузить для него последнюю версию и правильный драйвер, а затем вы можете установить его вручную.

    Или щелкните Обновить все кнопку для автоматического обновления всех устаревших или отсутствующих драйверов на вашем компьютере (для этого требуется Pro версия - вам будет предложено выполнить обновление, когда вы нажмете «Обновить все»).


    4) После обновления драйверов перезагрузите компьютер.

    Исправление 3: проверьте установку

    1) Откройте Эпическая пусковая установка .

    2) Щелкните значок Вкладка библиотеки , затем щелкните маленькая стрелка вниз чтобы раскрыть раскрывающийся список. Нажмите Проверить .


    Если Unreal Engine вылетает во время игры, вы можете перейти к игре в своем Библиотека и нажмите на винтик значок> свойства > локальные файлы > проверить .

    3) Дождитесь завершения сканирования. После проверки появится опция запуска. Нажмите Запуск .

    Посмотрите, решит ли это вашу проблему. Если нет, не волнуйтесь, попробуйте следующее решение, чтобы решить вашу проблему.

    Исправление 4: прекратите разгон процессора

    Чтобы улучшить игровой процесс, вы, возможно, изменили настройки процессора на самый высокий режим. Однако это приведет к чрезмерному потреблению энергии, что может привести к аварии.

    Поэтому, если вы разгоняете графический процессор, вы можете попытаться вернуть тактовую частоту процессора к значениям по умолчанию. Многие пользователи считают это полезным после этого.

    Кроме того, уменьшение всех настроек графики до минимума может помочь вашему Unreal Engine работать бесперебойно.

    Если это решит ваши проблемы со сбоями, поздравляю! Но если нет, вы можете попробовать следующее исправление.

    Исправление 5. Измените видеокарту по умолчанию.

    Есть ли Unreal Engine завершает работу из-за потери устройства D3D предупреждение на вашем экране? В этом случае проблема может быть вызвана вашей встроенной видеокартой из-за ее ограниченной производительности.

    1) На экране щелкните правой кнопкой мыши и выберите Панель управления NVIDIA .


    2) Нажмите Управление настройками 3D .


    3) Под Вкладка 'Глобальные настройки' , Выбрать Высокопроизводительный процессор NVIDIA в раскрывающемся списке. Наконец, нажмите Применять .


    4) Перезагрузите компьютер и посмотрите, решена ли проблема. Если нет, попробуйте следующее исправление.

    Исправление 6. Измените настройки реестра.

    Твой Unreal Engine 4 может произойти сбой из-за настроек уровня восстановления TDR. Попробуйте изменить настройки и посмотрите, работает ли.

    TDR (Обнаружение и восстановление тайм-аута) проверяет, правильно ли работают ваша видеокарта и компьютер, и сбрасывает графическую карту и графический процессор, если нет.

    1) На клавиатуре нажмите кнопку Windows logo key и р в то же время призвать Бежать коробка.

    2) Тип regedit и нажмите Войти открыть Редактор реестра .


    3) Нажмите файл , затем щелкните Экспорт .


    4) Выберите место, где вы хотите сохранить резервную копию, затем введите имя в Имя файла коробка. Нажмите Сохранить .


    5) Вернитесь к Редактор рижистики , затем перейдите к HKEY_LOCAL_MACHINE SYSTEM CurrentControlSet Control GraphicsDrivers


    4) В пустом месте щелкните правой кнопкой мыши, затем наведите указатель мыши на Новый и нажмите QWORD (64-бит) Значение .


    5) Назовите новое значение TdrLevel .


    6) Дважды щелкните TdrLevel . Убедитесь, что для его данных значения установлено значение 0 , затем щелкните Хорошо .

    Исправление 7: Временно отключите антивирус

    Unreal Engine 4 Проблема сбоя иногда возникает из-за вмешательства вашего антивирусного программного обеспечения. Чтобы убедиться, что проблема в этом, временно отключите антивирусную программу и проверьте, сохраняется ли проблема. (За инструкциями по отключению обратитесь к документации по антивирусу.)

    Если ваша игра работает нормально после отключения антивирусного программного обеспечения, обратитесь к поставщику вашего антивирусного программного обеспечения и попросите его совета или установите другое антивирусное решение.

    Будьте особенно осторожны с тем, какие сайты вы посещаете, какие электронные письма открываете и какие файлы загружаете, когда ваш антивирус отключен.

    Исправление 8: выполните переустановку

    Многие считают, что чистая переустановка может решить проблему. Просто убедитесь, что вы очистили все (включая записи реестра), назначенные Epic Launcher и Unreal Engine 4.

    Не забудьте сделать резервную копию своих проектов перед переустановкой.

    После завершения установки проверьте, сохраняется ли проблема.

    Решили ли указанные выше исправления вашу проблему? Не стесняйтесь оставлять нам комментарии и делиться своим опытом с другими пользователями!

    Читайте также: