Шейдерная постобработка изображения «в реал тайм» такими средствами, как Reshade/SweetFX/ENB — маст хев для любого симера. Наиболее популярная утилита Reshade — http://reshade.me/
[http://reshade.me/fo…orial-for-users— здесь букварь по ней].
Что в ней плохо: «хакерские» способы встраивания в систему, за счет перехвата вызовов DirectX/OGL. Это иногда приводит к тому, что на определенных сочетаниях драйверов, версий и игр, они могут перестать работать или становятся нестабильны.
На Windows 10 у меня, например, Reshade регулярно приводит к падению сима при переходе из оконного в полноэкранный режим и обратно.
Кроме того, есть еще тонкий момент: последовательность постобработки. Некоторые эффекты следует применять в определенном порядке.
Например, если сначала применить сглаживание MSAA, а затем HDR, то результат будет отличаться от результата, когда сначала применяется HDR, а затем сцена сглаживается. [ИМХО, это одна из возможных причин невысокого качества MSAA в Prepar3D].
То же относится и к FXAA или LumaSharpen. Некоторые соображения по этому вопросу более предметно можно почитать здесь: https://mynameismjp…./msaa-overview/(раздел «WORKING WITH HDR AND TONE MAPPING»)
Если вся постобработка идет в Reshade, то никаких проблем: порядок применения эффектов настраивается в конфиге Reshade.
Но если часть эффектов делает сим, а только после этого сцену обрабатывает Reshade, повлиять на это невозможно.
Математика и алгоритмы, которые заложены в основу эффектов, используемых Reshade, меняется гораздо медленнее. Или уже не изменится.
Поэтому наработки, сделанные командой Reshade по обработке изображений (шейдеры — http://www.gamedev.ru/terms/Shader),если Reshade не работает, или просто не нужен во всей полноте, можно адаптировать и к Prepar3D.
Как это сделать:
#include «Quad.sh»
Texture2D<float4> srcTex;
// ——-Этот блок вытаскиваем из нужного конфига SweetFX, не забывая удалить два обрабтных слеша в нижеследующей строке ————
//>Sepia settings<
#define ColorTone float3(1.40,1.10,0.90) //[0.00:2.55] //-What color to tint the image.
#define GreyPower 0.11 //[0.00:1.00] //-How much desaturate the image before tinting it.
#define SepiaPower 0.58 //[0.00:1.00] //-How much to tint the image.
///———————————————————————————————————————————-
float4 SepiaMain(PsQuad vert) : SV_Target
{
//—- Этот блок одинаков почти для всех эффектов препара, которые требуют только текстуру, но не требуют геометрию — получаем координаты текстуры и загружаем ее
// Get the texture dimemsions.
uint2 uTDim, uDDim;
srcTex.GetDimensions(uTDim.x,uTDim.y) ;
int3 iTexCoord = int3(uTDim.x * vert.texcoord.x, uTDim.y * vert.texcoord.y, 0) ;
float4 color = srcTex.Load( iTexCoord ) ;
//—————————————
// ниже это адаптипрованный блок кода для эффекта из SweetFX.
float3 sepia = color.rgb;
// calculating amounts of input, grey and sepia colors to blend and combine
float grey = dot(sepia, float3(0.2126, 0.7152, 0.0722));
sepia *= ColorTone;
float3 blend2 = (grey * GreyPower) + (color.rgb / (GreyPower + 1) ) ;
color.rgb = lerp(blend2, sepia, SepiaPower) ;
// returning the final color
return color;
}
Как этот файл получен:
1.1. Заготовку можно взять из примера пост-обработки Prepar3D (Example.psh в каталоге ShadersHLSLPostProcess). В этот файл вытаскиваем настройки для эффекта Sepia.
Дефолтные настройки для SweetFX лежат в каталоге [Каталог Reshade]ReShadeSweetFX.cfg
Персонализированные настройки (те, которыми реально пользовались и подстраивали под себя Медиатором в симе) для вашего профиля в Reshade ищем здесь:
[Каталог ReShade]ReShadePersonalFilesPresets[Игра]SweetFX.cfg
(У меня, например, путь такой: d:ReShade Framework 1.1.0ReShadePersonalFilesPresetsLockheed Martin® Prepar3D®SweetFX.cfg)
В этом файле ищем блок, предназначенный для эффекта Sepia. Он содержит параметры эффекта. Вот он:
//>Sepia settings<\
#define ColorTone float3(1.40,1.10,0.90) //[0.00:2.55] //-What color to tint the image.
#define GreyPower 0.11 //[0.00:1.00] //-How much desaturate the image before tinting it.
#define SepiaPower 0.58 //[0.00:1.00] //-How much to tint the image.
Этот фрагмент вставляем в наш файл, не забывая удалить два обратных слеша из строки //>Sepia settings<\.
1.2. Далее в Reshade ищем ищем файл с кодом, где располагается сам эффект. Файл должен содержать имя эффекта и может располагаться либо здесь [Каталог Reshade]ReShadeSweetFXSharedShader либо здесь: [Каталог Reshade]ReShadeSweetFX
Конкретно для сепии он здесь: [Каталог Reshade]ReShadeSweetFXSharedShaderSepia.h
Находим точку входа в шейдер и подпиливаем код под сим, перенеся его в наш файл пост-обработки.
[Для сепии тривиально, для сложных эффектов типа SMAA сложнее, и не факт, что получится.]
2. Создаем, согласно SDK Prepar3D, в каталоге [Каталог Prepar3D]ShadersHLSLPostProcess файл Sepia.xml c описанием эффекта. Следующего содержания:
<?xml version=»1.0″ encoding=»UTF-8″?>
<SimBase.Document Type=»AceXML» version=»1,0″>
<PostProcessEffects.PostProcessDefinition>
<EffectName>Sepia</EffectName>
<ShaderFileName>Sepia.psh</ShaderFileName>
<ShaderEntryPoint>SepiaMain</ShaderEntryPoint>
<ColorRequest>TRUE</ColorRequest>
<DepthRequest>FALSE</DepthRequest>
</PostProcessEffects.PostProcessDefinition>
</SimBase.Document>
Итак, мы получили два файла — Sepia.psh и Sepia.xml, которые лежат в каталоге [Каталог Prepar3D]ShadersHLSLPostProcess
3. Теперь нужно подключить созданный эффект к симу.
[Интересной особенностью является то, что эффект можно подключать только на отдельные виды, например, только на виртуальный кокпит или только на спот].
Ищем файл [Диск]:Users[Имя пользователя]AppDataRoamingLockheed MartinPrepar3D v3cameras.cfg и вставляем постэффект в нужный вид. Например, в 2D кокпит:
[CameraDefinition.001]
Title = Cockpit
Guid = {B1386D92-4782-4682-A137-738E25D1BAB5}
Description = This is the description of the cockpit view
Origin = Cockpit
ShowPanel = Yes
SnapPbhAdjust = Ordinal
SnapPbhReturn = True
PanPbhAdjust = Ordinal
PanPbhReturn = True
Track = None
ShowAxis = FrontOnly
AllowZoom = TRUE
InitialZoom = 1.0
SmoothZoomTime = 2.0
ShowWeather = Yes
XyzAdjust = TRUE
ShowLensFlare=FALSE
Category = Cockpit
HotKeySelect=2
PostProcess00 = Sepia
К камере можно подключить последовательно до 16 постэффектов PostProcess00- PostProcess15 (не забываем, что каждый эффект имеет цену в FPS). Порядок их применения к сцене соответствует порядку подключения в cameras.cfg.
4. Для запуска эффекта нужно очистить кеш шейдеров — удалить все файлы, расположенные в каталоге [Диск]:Users[Имя пользователя]AppDataLocalLockheed MartinPrepar3D v3Shaders
Если эффект не проявляется, вероятно, где-то ошибка из-за того, что эффект не скомпилировался. Понять это можно, включив диагностику ошибок в настройках препара (по умолчанию не включена): вкладка General, флажок Content Error Logging (или в одноименной опции раздела [MAIN] в основном конфиге препара).
В случае ошибок компиляции шейдера после выхода из сима выдается окно с предупреждением, а соответствующая диагностика содержится в файле ContentErrorLog.txt в каталоге Мои документы/Prepar3D v3 Files. (Там же, где располагаются сохраненные полеты).
Юрий, круто, но все же лучше, наверное, создать одну тему (в разделе работы над темами), собрать материал в одно структурированное целое и выложить как мануал (с прикреплением как «Важное»).
Спасибо что делаете такое дело! Очень нужно. Изменение именно методом сима. Так как основной минус этих Reshade/SweetFX/ENB, кроме указанных, это дикая просадка фпс на 5-10, появления всяких рывков и тормозов. А если в симе в конфиге править, то ничего этого нет.
На что-то цельное, вроде мануала, у меня не наберется материала, так, разрозненные наработки, которые постепенно планировал выложить. Тему завел с прицелом, что кто-то поделится аналогичными наработками.
Впечатлен, очень сильно. Огромное спасибо коллега KNOSOS. Применил ваш файл LumaSharpen — небо и земля по сравнению с медиатором.
Спасибо! Но странно, на самом деле, откуда там улучшениям взяться. Настройки в Reshade для LumaSharpen такие же у вас были, как в моем примере?
Так красивще! Буковки в кокпите более читаемые. Не знаю может это субъективно, но мне кажется стало намного лучше.
Прикрепленные изображения
Knossos, спасибо большое!)
Сообщение отредактировано Vadim2308: 03 March 2016 — 21:27