Реализация в Unreal уже есть, она вполне корректная и цвета получаются естественные. Осталось только найти это место в исходниках или ещё где-то отковырять.
Вид для печати
Реализация в Unreal уже есть, она вполне корректная и цвета получаются естественные. Осталось только найти это место в исходниках или ещё где-то отковырять.
Код:// 2x 32bit
void render_2x(u8 *dst, u32 pitch)
{
if (!conf.noflic)
{
u32 *src = (u32*)vbuf[vid.buf];
src += conf.framex * 2;
src += conf.framey * VID_WIDTH * 2;
for (u32 i=0; i<conf.frameysize; i++)
{
memcpy (dst, src, pitch); dst += pitch;
memcpy (dst, src, pitch); dst += pitch;
src += VID_WIDTH * 2;
}
}
else // noflic
{
RGB32 *src1 = (RGB32*)vbuf[vid.buf];
src1 += conf.framex * 2;
src1 += conf.framey * VID_WIDTH * 2;
RGB32 *src2 = (RGB32*)vbuf[vid.buf^1];
src2 += conf.framex * 2;
src2 += conf.framey * VID_WIDTH * 2;
for (u32 i=0; i<conf.frameysize; i++)
{
RGB32 *src11 = src1;
RGB32 *src22 = src2;
u8 *dst1 = dst;
for (u32 j=0; j<(pitch/4); j++)
{
RGB32 p1 = *src11++; RGB32 p2 = *src22++;
*dst++ = (p1.b + p2.b) >> 1;
*dst++ = (p1.g + p2.g) >> 1;
*dst++ = (p1.r + p2.r) >> 1;
dst++;
}
memcpy (dst, dst1, pitch); dst += pitch;
src1 += VID_WIDTH * 2;
src2 += VID_WIDTH * 2;
}
}
}
TSL, огромное спасибо!
Обычный motion blur, в общем.
Да, надо брать среднее от двух показанных кадров, а не 5-ую и 7-ую страницу.
Так как там что-то рисуется в процессе, и мы будем это видеть, а видеть не должны.
Только всё же надо делать гамма-коррекцию. Простое усреднение даёт заметно более тёмные цвета. Я только что соорудил у себя в эмуляторе БК антифликер -- и могу сказать, что без гамма-коррекции цвета заметно не те, какие должны быть. Это заметили все, кому показывал версию с простым усреднением.
Весь прикол в том, что на разных мониках/телеках вывод с реала "моргает" по-разному.
Обусловлено это, в том числе, и отличающимися уровнями RGB-сигналов на выходах с реала.
Где-то одна схема, где-то другая, где-то резисторы не такие... в итоге моргает не совсем одинаково.
А при выводе черно-белого сигнала эти псевдоцвета вообще до эпилепсии могут довести =)