Size: a a a

2020 November 25

SR

Sergey R in Unreal Engine
Liza Generalova
Спасибо, его смотрела. Канал полезный. Посоветуйте пожалуйста ещё курсы по Unreal, только не для геймдизайнеров, а для virtual production. Может кто то сталкивался?
источник

Е

Егор in Unreal Engine
Всем привет, никто не сталкивался с утечками памяти в анриале? Есть вот такой код для создания текстурки из видео фрейма
 UTexture2D* texture = UTexture2D::CreateTransient(frame.width, frame.height,EPixelFormat::PF_R8G8B8A8);
     FTexture2DMipMap& Mip = texture->PlatformData->Mips[0];
     void* Data = Mip.BulkData.Lock(LOCK_READ_WRITE);
     FMemory::Memcpy(Data, (void*)buffer, (frame.width * frame.height * 4));
     Mip.BulkData.Unlock();
     texture->UpdateResource();
     return texture;

Я после делаю просто OnMyClassFrameDelegate.Broadcast(texture) и код в принципе рабочий, кроме того что GC анриаловский не очищает память за этой текстуркой, и использование памяти где-то по 1гб/мин растёт неуклонно. Из фиксов нашел, что явный вызов CollectGarbage(RF_NoFlags,true) помогает, но если его вызывать слишком часто то программа тупо зависает, в интернете не нашел почему, да и сам способ костыльный сильно
источник

LG

Liza Generalova in Unreal Engine
Sergey R
Спасибо!
источник

AS

Andrey Sudarikov in Unreal Engine
Егор
Всем привет, никто не сталкивался с утечками памяти в анриале? Есть вот такой код для создания текстурки из видео фрейма
 UTexture2D* texture = UTexture2D::CreateTransient(frame.width, frame.height,EPixelFormat::PF_R8G8B8A8);
     FTexture2DMipMap& Mip = texture->PlatformData->Mips[0];
     void* Data = Mip.BulkData.Lock(LOCK_READ_WRITE);
     FMemory::Memcpy(Data, (void*)buffer, (frame.width * frame.height * 4));
     Mip.BulkData.Unlock();
     texture->UpdateResource();
     return texture;

Я после делаю просто OnMyClassFrameDelegate.Broadcast(texture) и код в принципе рабочий, кроме того что GC анриаловский не очищает память за этой текстуркой, и использование памяти где-то по 1гб/мин растёт неуклонно. Из фиксов нашел, что явный вызов CollectGarbage(RF_NoFlags,true) помогает, но если его вызывать слишком часто то программа тупо зависает, в интернете не нашел почему, да и сам способ костыльный сильно
так не создавай текстуру на каждый фрейм. отдавай наружу буфер с данными
источник

AS

Andrey Sudarikov in Unreal Engine
или сделай 2 текстуры и пиши поочередно в одну из них
источник

Е

Егор in Unreal Engine
Andrey Sudarikov
так не создавай текстуру на каждый фрейм. отдавай наружу буфер с данными
Из блюпринтов можно создать 2д текстуру?
источник

AS

Andrey Sudarikov in Unreal Engine
Егор
Из блюпринтов можно создать 2д текстуру?
честно - не знаю. надо гуглить
источник

Е

Егор in Unreal Engine
Andrey Sudarikov
честно - не знаю. надо гуглить
Я не нагуглил, потому и спрашиваю
источник

Ac

Alexandr cjfor in Unreal Engine
Dmitry
Зажми правую кнопку мыши
благодарю)
источник

AS

Andrey Sudarikov in Unreal Engine
Егор
Я не нагуглил, потому и спрашиваю
тогда вариант с 2 текстурами и переключением между ними
источник

Е

Егор in Unreal Engine
Andrey Sudarikov
тогда вариант с 2 текстурами и переключением между ними
А это как поможет? Не создавать текстуру а хранить ее как буффер? В этом случае GC ее убивает рано или поздно, и в моём случае текстур будет не две а пару сотен, что по памяти ударит нехило
источник

Ac

Alexandr cjfor in Unreal Engine
Ребят, а знает кто каналы на ютубе или хорошие курсы по ландшафту под UE4? на русском
источник

CR

Constantine Romakhov in Unreal Engine
Alexandr cjfor
Ребят, а знает кто каналы на ютубе или хорошие курсы по ландшафту под UE4? на русском
источник

AS

Andrey Sudarikov in Unreal Engine
Егор
А это как поможет? Не создавать текстуру а хранить ее как буффер? В этом случае GC ее убивает рано или поздно, и в моём случае текстур будет не две а пару сотен, что по памяти ударит нехило
а откуда пару сотен? если у тебя предполагается 100 одновременно играющих видео роликов - тебе за них все равно придется платить
источник

Ac

Alexandr cjfor in Unreal Engine
спасибо
источник

Е

Егор in Unreal Engine
Andrey Sudarikov
а откуда пару сотен? если у тебя предполагается 100 одновременно играющих видео роликов - тебе за них все равно придется платить
Прийдется конечно, но хранить 100 буфферов это не скалируемое решение
источник

Е

Егор in Unreal Engine
завтра их станет 1000 и 32гб оперативы уже не хватит
источник

AS

Andrey Sudarikov in Unreal Engine
Егор
Прийдется конечно, но хранить 100 буфферов это не скалируемое решение
если у тебя обновление текстуры происходит в гейм-треде, то тебе и одной текстуры на видео хватит. а меньше уже никак не получится
источник

Е

Егор in Unreal Engine
Andrey Sudarikov
если у тебя обновление текстуры происходит в гейм-треде, то тебе и одной текстуры на видео хватит. а меньше уже никак не получится
У меня сейчас всё работат, изначальный вопрос был в том почему анриал не вызывает гарбадж коллектор несмотря на то, что уже 14гб оперативы занято мусором на который никто не референсится. И это еще и при том, что в самом названии CreateTransient как-бы заложен смысл что эта текстура временная. Сейчас вот протестил код вообще без использования этой структуры, просто
auto texture = CreateTransient(640,320);
texture->ConditionalBeginDestroy();

и запихал его в OnTick - утечка на месте.
источник

Е

Егор in Unreal Engine
походу буду багрепорт пилить
источник