Forwarded from TechArt - Archive (Oleg Pivovarov)
#TAA_UE5 #TAA_AMD #TAA_BugHunter
#TAA_WTF
Hi! Немного не было сил, последний месяц пришлось разбираться с нехарактерными для меня вещами.
Энивей, держите полезное.
Начиная с Мая месяца, AMD выпустили новые драйвера.
И на всех проектах на UE возникли проблемы - на спавне VFX наблюдается фриз на 100+ms, а геометрию VFX рвет в клочья.
Проблема оказалась на уровне Ribbon module в Niagara.
Несоответствие между размером структуры FRibbonAccumulationValues в шейдере (NiagaraRibbonCommon.ush) и stride size в TransientAccumulation buffers.
В общем стандартное регулярное багло эпиков с компьютами (привет pcg hlsl, привет ui instancing, привет srv просящий uav[WTF]).
Правда на этот раз в дело вмешались AMD и начали всем бить по рукам...
Окей, как чинить?
1. Если вам не нужно здесь и сейчас никуда отправлять билд, или же релизиться -дождитесь 5.7, в него уже должны были внедрить фикс.
2. Заменить GPU Sim на CPU sim в эмиттерах использующих ribbon.
3. Поправить NiagaraRendererRibbons.cpp - добавить проверку на 583 строке:
#TAA_WTF
Hi! Немного не было сил, последний месяц пришлось разбираться с нехарактерными для меня вещами.
Энивей, держите полезное.
Начиная с Мая месяца, AMD выпустили новые драйвера.
И на всех проектах на UE возникли проблемы - на спавне VFX наблюдается фриз на 100+ms, а геометрию VFX рвет в клочья.
Проблема оказалась на уровне Ribbon module в Niagara.
Несоответствие между размером структуры FRibbonAccumulationValues в шейдере (NiagaraRibbonCommon.ush) и stride size в TransientAccumulation buffers.
В общем стандартное регулярное багло эпиков с компьютами (привет pcg hlsl, привет ui instancing, привет srv просящий uav[WTF]).
Правда на этот раз в дело вмешались AMD и начали всем бить по рукам...
Окей, как чинить?
1. Если вам не нужно здесь и сейчас никуда отправлять билд, или же релизиться -дождитесь 5.7, в него уже должны были внедрить фикс.
2. Заменить GPU Sim на CPU sim в эмиттерах использующих ribbon.
3. Поправить NiagaraRendererRibbons.cpp - добавить проверку на 583 строке:
if (TransientAccumulation[0].NumBytes < (AccumulationBufferStructSize * NeededSize) || (TransientAccumulation[0].Buffer->GetStride() != AccumulationBufferStructSize))
🫡29😱7❤🔥3🔥1