g-cont
> корень из отрицательного числа
Откуда? 1 - dot(x,x) - dot(y,y) ? Ну сделай saturate
innuendo
GLSL умеет распознавать конструкцию saturate( dot( x, x ) )?
Cgc компилирует её в dp3_sat инструкции на всяких ps_3_0 и даже arbfp, а в glslf делает последовательно min и max.
Моласар
Меня больше волнует откуда там отрицательное ?
Артефакты сжатия, например.
Там больше 1 может появиться, и под корнем получится отрицательное.
1 - dot(x,x) - dot(y,y)
а зачем вызывать дот для скаляра?
Хм, приделал поддержку DXT5NM встала другая проблема. Оказывается с точки зрения той же NVDXT DXT5 и DXT5nm ничем не отличаются в заголовке.
Иными словами нам остается только догадываться по косвенным признакам о формате текстуры. Это надо для того, что отличить нормалмапу, сохраненную просто в DXT5, от нормалмапы, сохраненной в DXT5NM. Прикол в том, что флажки о наличии альфы используются только для DXT1, а для DXT3, DXT5 альфа подразумевается
в любом случае, но при этом естественно не гарантируется, что в ней содержится какая-то информация. Единственный метод, как я понял - это распаковать несколько пикселей альфы и убедиться, что они не равны 255. Но это не слишком удобно. Может есть какие-то более простые способы?
Вообщем сделал детектирование альфы анализом содержимого альфы, видимо другого способа нет.
кстати, как я и предполагал восстановление z даёт артефакты. Пришлось ограничить в диапазоне 0.1 - 1. В этом случае результат почти идеальный и сжатая нормалмапа даже немного "сочнее" несжатой.
g-cont
> кстати, как я и предполагал восстановление z даёт артефакты
Поэтому и нефиг нормалмапы сжимать..
Там между прочим советуют использовать стереографическую проекцию с учётом нормали поверхности, для более точного восстановления, так сказать.
Потом попробую, наверное будет лучше.
Моласар
> > кстати, как я и предполагал восстановление z даёт артефакты
> Поэтому и нефиг нормалмапы сжимать..
Да, а с сжатой можно поюзать текстуры большого размера. Чего там ATI рекламировала на X800 ?
innuendo
Сжатые нормалмапы - это не только артефакты. Это ещё усложнение пиксельного шейдера и невозможность хранить какой-нибудь ништячок в альфа-канале (например, спекуляр).
И таки да, внутренние затраты на декодирование DXT.
Не превысит ли это всё в совокупности профит от уменьшения кол-ва данных по шине? Тем более что чтение нормалмапы обычно кэш-френдли, это ж не g-buffer какой-нибудь.
Моласар
В Крайзисе они использовались
innuendo
И как они это обосновали?
Моласар
Качество картинки улучшилось :) NormalMap/DetailNormalMap
>Это ещё усложнение пиксельного шейдера
Да уже давно sqrt и пара dot не проблема в PS
innuendo
> Качество картинки улучшилось
От сжатия?
> Да уже давно sqrt и пара dot не проблема в PS
С ними он работает быстрее, чем без них?
Бесплатный sqrt только в мышеловке.
Тема в архиве.