Формат файлов постпроцессинга (ppe)

Материал из Mod Wiki.

(Различия между версиями)
Перейти к: навигация, поиск
Версия 07:20, 21 августа 2007 (править)
Green Hawk (Обсуждение | вклад)

← К предыдущему изменению
Версия 09:02, 12 декабря 2007 (править) (отменить)
BAC9-FLCL (Обсуждение | вклад)

К следующему изменению →
Строка 1: Строка 1:
-Представляю на суд общественности результаты моих изысканий по формату файлов постпроцессинга (ppe)+Представляю на суд общественности результаты моих изысканий по формату файлов постпроцессинга ('''.ppe''')
-Нераскрытыми для меня осталось 6 переменных (переменные, которые я для себя назвал free, обязательно идут перед каждой триадой цепочек, управляющих цветом и 3 коэффициента, идут в каждом правиле после байта функции), но простенькие ppe можно делать и без них.+Нераскрытыми для меня осталось 6 переменных (переменные, которые я для себя назвал free, обязательно идут перед каждой триадой цепочек, управляющих цветом и 3 коэффициента, идут в каждом правиле после байта функции), но простенькие '''ppe'''-файлы можно делать и без них.
 + 
 +Вообще, оказалось, что возможности '''ppe''' были сильно мною переоценены (например тепловизор сделать с их помощью если и можно, то крайне проблематично). Основной недостаток - '''ppe''' можно применить только ко всему экрану, на отдельный обьект это не предусмотрено движком (даже стелс-режим кровососа реализуется подменой модели). Так что могу предложить только слегка улучшеный прибор ночного зрения.
-Вообще, оказалось, что возможности ppe были сильно мною переоценены (например тепловизор сделать с их помощью если и можно, то крайне проблематично). Основной недостаток - ppe можно применить только ко всему экрану, на отдельный обьект это не предусмотрено движком (даже стелс-режим кровососа реализуется подменой модели). Так что могу предложить только слегка улучшеный прибор ночного зрения. 
Получилось так себе, просто убрал шумы, добавил яркости/контрастности, но зато теперь со включенным nv днем не побегаешь - засветка почти как на настоящем (как в кино показывают) и туман гораздо сильнее мешает, клубы тумана почти непрозрачны. Получилось так себе, просто убрал шумы, добавил яркости/контрастности, но зато теперь со включенным nv днем не побегаешь - засветка почти как на настоящем (как в кино показывают) и туман гораздо сильнее мешает, клубы тумана почти непрозрачны.
По поводу компилятора/декомпилятора, пришел к выводу, что фильтр постпроцесса изделие штучное, смысла в отдельных утилитах нет - я все анализировал, клепал, менял только с помощью блокнота и шестнадцатиричного редактора (кстати, выяснил, что при смене файла постпроцесса необязательно перезапускать сталкера и даже релоад делать ни к чему - изменения подхватываются при следующем выключении постпроцесса в данном случае nv). По поводу компилятора/декомпилятора, пришел к выводу, что фильтр постпроцесса изделие штучное, смысла в отдельных утилитах нет - я все анализировал, клепал, менял только с помощью блокнота и шестнадцатиричного редактора (кстати, выяснил, что при смене файла постпроцесса необязательно перезапускать сталкера и даже релоад делать ни к чему - изменения подхватываются при следующем выключении постпроцесса в данном случае nv).
-При анализе ppe сильно помог тот факт, что постпроцесс существует в игре в текстовом и компилированом виде (кому интересно копайте script\[[postprocess.script]] - полный разбор текстовых файлов написан обычным скриптом, там же, в самом конце функция main загружает погоду и файл постпроцессинга, сами файлы лежат \config\scripts например [[proba.ltx]]). Компилированные ppe лежат в anims.+При анализе ppe сильно помог тот факт, что постпроцесс существует в игре в текстовом и компилированом виде (кому интересно, копайте '''\gamedata\script\postprocess.script''' - полный разбор текстовых файлов написан обычным скриптом, там же, в самом конце функция ''main'' загружает погоду и файл постпроцессинга, сами файлы лежат '''\gamedata\config\scripts''' например '''proba.ltx'''). Компилированные ppe лежат в anims.
Итак, ppe файл - это набор правил, как должен изменяться тот или иной параметр изображения во времени, всего этих параметров - 16(названия взяты из текстовых версий, чтобы путаницы не было). Итак, ppe файл - это набор правил, как должен изменяться тот или иной параметр изображения во времени, всего этих параметров - 16(названия взяты из текстовых версий, чтобы путаницы не было).

Версия 09:02, 12 декабря 2007

Представляю на суд общественности результаты моих изысканий по формату файлов постпроцессинга (.ppe)

Нераскрытыми для меня осталось 6 переменных (переменные, которые я для себя назвал free, обязательно идут перед каждой триадой цепочек, управляющих цветом и 3 коэффициента, идут в каждом правиле после байта функции), но простенькие ppe-файлы можно делать и без них.

Вообще, оказалось, что возможности ppe были сильно мною переоценены (например тепловизор сделать с их помощью если и можно, то крайне проблематично). Основной недостаток - ppe можно применить только ко всему экрану, на отдельный обьект это не предусмотрено движком (даже стелс-режим кровососа реализуется подменой модели). Так что могу предложить только слегка улучшеный прибор ночного зрения.

Получилось так себе, просто убрал шумы, добавил яркости/контрастности, но зато теперь со включенным nv днем не побегаешь - засветка почти как на настоящем (как в кино показывают) и туман гораздо сильнее мешает, клубы тумана почти непрозрачны.

По поводу компилятора/декомпилятора, пришел к выводу, что фильтр постпроцесса изделие штучное, смысла в отдельных утилитах нет - я все анализировал, клепал, менял только с помощью блокнота и шестнадцатиричного редактора (кстати, выяснил, что при смене файла постпроцесса необязательно перезапускать сталкера и даже релоад делать ни к чему - изменения подхватываются при следующем выключении постпроцесса в данном случае nv).

При анализе ppe сильно помог тот факт, что постпроцесс существует в игре в текстовом и компилированом виде (кому интересно, копайте \gamedata\script\postprocess.script - полный разбор текстовых файлов написан обычным скриптом, там же, в самом конце функция main загружает погоду и файл постпроцессинга, сами файлы лежат \gamedata\config\scripts например proba.ltx). Компилированные ppe лежат в anims.

Итак, ppe файл - это набор правил, как должен изменяться тот или иной параметр изображения во времени, всего этих параметров - 16(названия взяты из текстовых версий, чтобы путаницы не было). В отличие от текстовой версии, цепочки должны идти только в этом порядке и их всегда должно быть только 16 (если игра вывалилась с сообщением в логах noise.grain cannot be zero, значит вы что-то пропустили).

Выбраная цветовая компонента умножается на коэффициент, то при параметре равным 1 чистый белый цвет останется белым, а чистый черный - черным, остальные преобретут компонентный оттенок.

  • free1 - об этой переменной чуть ниже
  • color_add_red
  • color_add_green
  • color_add_blue

Указанное значение принимается как база для данного цвета, то есть, если у данного пикселя значение цвета меньше указанного, то оно принимается как указанное, а если больше, то остается прежним. Следует заметить, что это единственный набор переменных, задирать значения в которых выше 0.5 не имеет смысла, 0.5 прибавляется где-то в дебрях движка.

  • free2
  • color_base_red
  • color_base_green
  • color_base_blue

Эта триада правил отвечает за вес цвета в сером/яркостном представлении и в обычном цветном режиме результат не виден. Но при увеличении правила gray становится ясно, что при например color_gray_red = -1 чисто красные компоненты становятся черными, 0 = остаются без изменений, 1 - чисто белыми.

  • free3
  • color_gray_red
  • color_gray_green
  • color_gray_blue

Переменная управляет величиной обратной насыщенности, то есть, чем больше gray (максимум +1) тем меньше насыщенность изображения

  • gray

Размытие изображения, при больших значениях (пробовал 25) начинаются косяки, портится нижняя часть, если долго стоять на месте.

  • blur

Раздвоение изображения по горизонтали и вертикали соответственно. Значение указывается относительно экрана, то есть при 1 копии обьекта, первоначально находящегося в центре окажутся точно по краям.

  • duality_h
  • duality_v
  • noise_intensity - интенсивность шума
  • noise_granularity - размер зерна шума
  • noise_fps - сколько раз в секунду шум должен пересчитываться

Файл всегда начинается с 01 00 00 00 - скорее всего это синатура, по которой движок определяет содержимое(кстати, у файлов anm, которые содержать анимацию камеры и похоже имеют ту же логику строения, что и ppe сигнатурой является 00 11 00 00 ).

Затем идет 4 байта неопределенной переменной, которую я для себя назвал free. Всего их 3. Эти переменные стоят только перед триадами, отвечающими за изменения цветов, обычно равны 7C 00 00 00, но есть небольшие вариации. Визуально определить, что меняется при изменении этой переменной я не смог, если кто совершит этот подвиг - вечная слава :)

Затем начинаются цепочки в перечисленном выше порядке. Цепочка начинается с 01 01 ХХ 00, где ХХ - число правил в данной цепочке. Если указано 01 01 00 00 (то есть цепочка с 0 правил, то данная цепочка в постпроцессинге не участвует и сразу после нее должна начинаться следующая цепочка). Основная ошибка, которую можно допустить - несоответствие реального числа правил с указаным в заголовке цепочки. Контроль, контроль, и еще раз контроль.

Каждая цепочка состоит из правил изменения переменной. Исходя из скрипта разбора текстовых версий можно предположить, что правил в цепочке не должно быть больше 16 (хотя возможно это только для текстовых).Совершенно необязательно, что этих правил в разных цепочках будет одинаковое количество или даже длиться они будут одинаковое время.

Правило содержит в себе всегда ровно 23 байта. Примерное описание -

9A 99 99 3E 00 00 A0 40 00 00 80 00 80 00 80 00 80 00 80 00 80 00 80
----------- ----------- -- ----- ----- ----- -----------------------
 значение      время    ф    k1    k2    k3                                   
  • значение - 4-байтная float переменная, обычно меняется от -1 до +1
  • время - в секундах 4-байтная float переменная
  • ф - функция, во всех ppe равна 00, но попробовал менять(не должна быть 04 - игра вылетает). 00,03 - синус, 01,05 - косинус, 02 - линейная, остальные значения игнорируются и правило перестает работать вообще.
  • k1,k2,k3 - коэффициенты для функций вот с ними почти не разбирался, на линейную фунуцию изменений не выявил, на синус/косинус влияют очень сильно, но на поиск закономерности не хватило времени, по умолчанию равны 00 80 00 80 00 80
  • остаток строки во всех файлах 00 80 00 80 00 80 00 80 - изменение визуально ничего не меняет, возможно зарезервировано для следующих версий.

Вот и все. Поле для работы как видите еще есть - коэффициенты k[1,2,3] и переменные free[1,2,3] - предлагаю общественности устроить мозговой штурм на них.

Напоследок мой файл ночного зрения с комментариями (для использования комменты удалить, шестнадцатиричный код загнать в WinHex и сохранить как anims\\x.ppe(имя любое), и не забыть поправить config\\misc\\postprocess.ltx в нужной секции)

01 00 00 00 		// сигнатура

// Цвета выкручиваем на максимум
7C 00 00 00 		// free1
01 01 02 00 		// color_add_red
00 00 80 3F 00 00 00 00 00 00 80 00 80 00 80 00 80 00 80 00 80 00 80 
00 00 80 3F 00 00 00 41 00 00 80 00 80 00 80 00 80 00 80 00 80 00 80 
01 01 02 00 		// color_add_green
00 00 80 3F 00 00 00 00 00 00 80 00 80 00 80 00 80 00 80 00 80 00 80 
00 00 80 3F 00 00 00 41 00 00 80 00 80 00 80 00 80 00 80 00 80 00 80 
01 01 02 00 		// color_add_blue
00 00 80 3F 00 00 00 00 00 00 80 00 80 00 80 00 80 00 80 00 80 00 80 
00 00 80 3F 00 00 00 41 00 00 80 00 80 00 80 00 80 00 80 00 80 00 80 

// Не понимаю как, но эта триада подкрашивает уже переведенное в 
// чб изображение, то есть делаем слегка синеватым результат, заодно
// огрубляем слегка красные или зеленые.
6C 10 00 00  		// free2
01 01 02 00 		// color_base_red
CD CC CC 3D 00 00 00 00 00 00 80 00 80 00 80 00 80 00 80 00 80 00 80 
CD CC CC 3D 00 00 00 41 00 00 80 00 80 00 80 00 80 00 80 00 80 00 80 
01 01 02 00 		// color_base_green
CD CC CC 3D 00 00 00 00 00 00 80 00 80 00 80 00 80 00 80 00 80 00 80 
CD CC CC 3D 00 00 00 41 00 00 80 00 80 00 80 00 80 00 80 00 80 00 80 
01 01 02 00 		// color_base_blue
CD CC 4C 3E 00 00 00 00 00 00 80 00 80 00 80 00 80 00 80 00 80 00 80 
CD CC 4C 3E 00 00 00 41 00 00 80 00 80 00 80 00 80 00 80 00 80 00 80 

// В сером режиме все красные обьекты - белым, синие и зеленые - черным
7C 00 00 00  		// free3
01 01 02 00 		// color_gray_red
00 00 80 3F 00 00 00 00 00 00 80 00 80 00 80 00 80 00 80 00 80 00 80 
00 00 80 3F 00 00 00 41 00 00 80 00 80 00 80 00 80 00 80 00 80 00 80 
01 01 02 00 		// color_gray_green
00 00 80 BF 00 00 00 00 00 00 80 00 80 00 80 00 80 00 80 00 80 00 80 
00 00 80 BF 00 00 00 41 00 00 80 00 80 00 80 00 80 00 80 00 80 00 80 
01 01 02 00 		// color_gray_blue
00 00 80 BF 00 00 00 00 00 00 80 00 80 00 80 00 80 00 80 00 80 00 80 
00 00 80 BF 00 00 00 41 00 00 80 00 80 00 80 00 80 00 80 00 80 00 80 

// Полностью черно-белое изображение с учетом правил color_gray_*
01 01 02 00 		// gray
00 00 80 3F 00 00 00 00 00 00 80 00 80 00 80 00 80 00 80 00 80 00 80 
00 00 80 3F 00 00 00 41 00 00 80 00 80 00 80 00 80 00 80 00 80 00 80 

01 01 00 00 		// blur

// Двоения в глазах не будет
01 01 00 00 		// duality_h
01 01 00 00 		// duality_v

// Шума не будет
01 01 00 00 		// noise_intensivity
01 01 00 00 		// noise_granularity
01 01 00 00			// noise_fps
Личные инструменты