Сообщение от Mr_F_
жирно очень - в особенности для альбедо не нужно.
заценивай как пакуют гбуффер реалне пацаны: http://www.slideshare.net/TiagoAlexS...sis-3-gdc-2013
-----
в кратце:
positionMap не нужен - достаточно хранить глубину и потом в шейдере восстанавливать из неё позицию.
нормали жмутся в 2.5 8-битных канала.
на альбедо не нужно больше 8 бит - в крайенжине ещё и пакуют в 2 канала мутным способом (но это перебор уже имхо).
также тебе пригодятся reflectivity/glossiness.
у меня сейчас в рабочем проекте вот такой гбуфер:
RGBA8: normals, glossiness, reflectivity
RGBA8: albedo, IOR
R32F: depth
И R11G11B10 хдр текстура, в которую уже ведётся работа с гбуфером.
Из-за многопассовости (лайты складывать в РТ) дефер также может тормозить. Щас курю как круче сделать tiled deferred (ранее уже делал tiled forward с генерацией тайлов на цпу).
|
* Вот на 12 слайде, я правильно понимаю что слева - формула упаковывания, а справа распаковывания нормалей?
* А есть гарантия что нормали перед упаковкой будут нормализованы (там в формуле в знаменателе 1 - x предполагает что нормали нормализованы) или лучше вызывать нормализацию перед упаковыванием?
* И вот насчёт знака значения z, он нужен для того чтобы восстановить потерю знака x, y когда они отсекаются по [ 0, 1 ] во время записи в G-Buffer? Ведь если бы они записывались со знаком, то можно было бы восстановить z целиком из x, y.