KNOSSOS

Prepar3D Tweak Assistant

1726 posts in this topic

36 минут назад, Wonderboy пишет:

ну, я опишу, как сам делаю, а ты уже напрягись немного.

Открываешь notepad++, сперва перетаскиваешь в него сохраненный где-либо дефолтный шейдер от третьего препара, потом идешь в папку шейдеров твоего рабочего Prepar3D v3/ShadersHLSL и перетаскивашь тот-же файл. Потом в меню плагинов выбираешь Compare (у меня он русифицирован, могу и ошибиться) или нажимаешь alt+D. Скорее всего, тебе напишет, что файлы идентичны.

Теперь открываешь РТА и применяешь например туман. Переключаешься на редактор, он рапортует, что файл изменился и просит перезагрузить его. Соглашаешься. Снова применяешь сравнение, теперь на карте отличий видно, где и сколько разница.

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

Потренируйся пока на ночном освещении. 
 

Спасибо. примерно так и делаю, но по-своему, по-кретински, сравнивая результаты в простом блокноте.. Но меняя названия шейдеров мы не боимся, что эта лихая замена поломает что-то в другом месте? Может быть я тупой, и не очень правильно тебя понял. Сейчас посмотрел шейдер Shadow.fxh.. ссуко, нихера не идентичны.. Закинул знакомому прогеру.. озадачил изменением глубины тени от облаков. 

0

Share this post


Link to post
Share on other sites

 

3 часа назад, Wonderboy пишет:

... но если не терпится, то пока коротко.

Wonderboy, спасибо за файлы, ликбез и полезный для всех труд в шейдерной эстафете!

Не устаём благодарить Юрия, указавшего правильный путь в светлое, яркое и атмосферное будущее! В каждом сценарии должна быть улица имени KNOSSOSa и маленький памятник на центральной площади!

1

Share this post


Link to post
Share on other sites

Запросим помощь у зала. Может кто умный щелкнет эту задачку..

Скрытый текст

 

Шейдер в предыдущей версии препара: 

/**
* Calculate cloud intensity based on the cloud light map.
**/
float CalculateCloudIntensity( in float3 shadowTexCoord, in int cascadeIndex)
{
float depth = shadowTexCoord.z;

const float2 cloudShadows = txShadowColor.SampleLevel(samClamp, float3(shadowTexCoord.xy, cascadeIndex),0).rg;

float cloudShadowIntensity = 1.0f;

//If occluded by a cloud, do cloud shadow intensity work.
[flatten]
if(max(cloudShadows.g,0) <= depth)
{
cloudShadowIntensity = lerp(0.25, 1.0, cloudShadows.r);
}

return cloudShadowIntensity;


Меняя значение красной цифры, в игре мы получали более темную тень на земле от облака.  

вот этот же кусок уже в новой версии игры :
 

/**
* Calculate translucent intensity based on the translucent light map.
**/
float CalculateTranslucentIntensity( in float3 shadowTexCoord, in int cascadeIndex)
{
float depth = shadowTexCoord.z;

//depth -= cb_mShadowBias;

const float2 translucentShadows = txShadowColor.SampleLevel(samClamp, float3(shadowTexCoord.xy, cascadeIndex),0).rg;

float translucentIntensity = 1.0f;

float difference = depth - translucentShadows.g;

[flatten]
if(difference > 0.0f)
{
float blendValue = Linstep(0.0f, 0.01f, difference);
translucentIntensity = lerp(1.0f, translucentShadows.r, blendValue);
}

return translucentIntensity;

 

Если кто-то соображает, будем благодарны за помощь. 

 

 

 

 

Edited by modest11111
0

Share this post


Link to post
Share on other sites
10 минут назад, apxeonmepukc пишет:

Не устаём благодарить Юрия, указавшего правильный путь в светлое, яркое и атмосферное будущее! В каждом сценарии должна быть улица имени KNOSSOSa и маленький памятник на центральной площади!

Уау... Спасибо, Геннадий, замахался позолоту стряхивать, так и сыплется!:rofl:

 

11 минут назад, modest11111 пишет:

Запросим помощь у зала. Может кто умный щелкнет эту задачку..

 

Эх, отстает родная Россиюшка...

Индия и Сербия на подходе, блин, обидно то как. Вот что нищета животворящая творит с людьми :)

1

Share this post


Link to post
Share on other sites

Ну, индусы майкам винду клепают, не то что шейдеры. Если они на подходе, то соревноваться с ними в скорости восприятия кода нет смысла
 

0

Share this post


Link to post
Share on other sites
1 час назад, modest11111 пишет:

Спасибо. примерно так и делаю, но по-своему, по-кретински, сравнивая результаты в простом блокноте.. Но меняя названия шейдеров мы не боимся, что эта лихая замена поломает что-то в другом месте? Может быть я тупой, и не очень правильно тебя понял. Сейчас посмотрел шейдер Shadow.fxh.. ссуко, нихера не идентичны.. Закинул знакомому прогеру.. озадачил изменением глубины тени от облаков.

В новой версии изменили название переменных, поэтому переименование необходимо. Тем более, я писал только о атмо-эффектах.

Тени и освещение вообще скорее всего уже будут править сербы и индусы :-) 
 

1

Share this post


Link to post
Share on other sites

в autogen emissive lighting параметр PTA Lights ratio вроде нашел в шейдере четверки.. но проверить не могу, так как криво засунул ORBX в препар и ночью огней у меня нет. 

0

Share this post


Link to post
Share on other sites
1 час назад, wormy пишет:

И вот еще

Получается, индусы еще и конфигуратор подгонят, если верить новости. Ждать осталось недолго.

0

Share this post


Link to post
Share on other sites
32 минуты назад, Wonderboy пишет:

Получается, индусы еще и конфигуратор подгонят, если верить новости. Ждать осталось недолго.

Ну, конфигуратор там скорее самого УРП будет (типа галки на 3-4 позиции). По шейдерам - хрен...

Edited by Enzzo
0

Share this post


Link to post
Share on other sites
25 minutes ago, modest11111 said:

тени работают и от PTA. 

Да у меня и без РТА тени в дефолте отлично работают. 

0

Share this post


Link to post
Share on other sites
4 минуты назад, yfriend пишет:

Да у меня и без РТА тени в дефолте отлично работают. 

да, но если начинаешь что-то еще накручивать, то с ними может быть беда-бедовая.. тени работают, а вот засветить пейзаж не получается.. только если оставлять дневное небо дефолтным. 

0

Share this post


Link to post
Share on other sites

Обещал вчера выложить облачный туман (Clouds Fog tuning), но не получилось. Сразу скажу, в теории все должно работать, но на практике не пробовал.

Твик прописан в cloud.fx . Ищем фрагмент:

Скрытый текст

 

        //Compute fog contribution.

        #if defined(SHD_VOLUMETRIC_FOG)

            cColor = VolumetricFogPS( In.mAlt, cColor, In.fFogDistance / 2.0, cb_mFogDensity, cb_mFogColor.xyz);

        #else

            cColor = float4( FogPS( cColor.xyz, In.fFogDistance / 2.0, cb_mFogDensity, cb_mFogColor.xyz ), cColor.a );

 

и заменяем на такой:

Скрытый текст

        //Compute fog contribution.

        #if defined(SHD_VOLUMETRIC_FOG)

            cColor = VolumetricFogPS( In.mAlt, cColor, In.fFogDistance * 1.3, cb_mFogDensity, cb_mFogColor.xyz);

        #else

            cColor = float4( FogPS( cColor.xyz, In.fFogDistance * 1.3, cb_mFogDensity, cb_mFogColor.xyz ), cColor.a );

Зеленым выделен параметр из РТА. Готовый файл не выкладываю, там делов на 2 минуты.
0

Share this post


Link to post
Share on other sites

Тени. В GPUTerrain.fx ищем такой кусок. 

Скрытый текст

//Calculate the final ambient / diffuse coloring for the sun and moon.
        const float3 finalSunColor = (sunAmbient * 1.20 + (sunDiffuse * 1.00 * (sunContrib * shadowContrib)));// + pointLightsDiffuse));
        const float3 finalMoonColor = (moonAmbient * 0.50 + (moonDiffuse * 0.60 * (moonContrib * shadowContrib)));// + pointLightsDiffuse));
        const float3 finalAmbientDiffuse = saturate(finalSunColor + finalMoonColor + accumDiffuseLighting);

Не помню уже, был он там изначально, или нет, я скопировал из третьей части. То что красным крутабельно. Значение выше- тень светлее, ниже -темнее. Это общая тень от облаков, домов, деревьев  итд, скорее всего, кроме теней на полосы, перроны, рулежки. На значение sunDiffuse реакции не заметил, остальное (освещение от луны- циферки 0.50 и 0.60 - тоже, что и от солнца, только ночью от луны) не крутил и не проверял.  На свой страх и риск. 

Edited by modest11111
0

Share this post


Link to post
Share on other sites

О. Нашел.. Из-за того, что настройка освещенности облаков дефолтная, то при попытках запихнуть в препар нормальный сэт неба от Гены облака днем превращались в дым пепелища после ядерной войны. Ищем в Cloud.fx такие строки :

 float4 colorIntensity = float4(fColor.r, fColor.g, fColor.b, saturate(alpha)) * color;
    diffuse = saturate(float4(1.4f * colorIntensity.rgb + (0.63f * saturate(colorIntensity.rgb - 1)), colorIntensity.a));

 

Освещенность облаков - зеленая цифра. Увеличиваем - облака светлее. Красная цифра - сатурация. Теперь можно напихивать Препар сэтами Гены. 

Edited by modest11111
1

Share this post


Link to post
Share on other sites

Wave speed, скорость волн. Ищем в GPUTerrain.fxh строки:

const float2 sc = float2(cb_WaterTextureData[index].SinWaveWindOffset, cb_WaterTextureData[index].CosWaveWindOffset);
    const float2 scrollOffset = windScaler *1.7* cb_mSimTime * float2(sc.x, sc.y);
    const float2 bmp = (WorldPos.xz + cb_DetailTextureOrigin + scrollOffset) * scale * BASE_WATER_DETAIL_SCALE;

Красным крутим скорость. Больше цифра - больше скорость.

0

Share this post


Link to post
Share on other sites

Спасибо! Так глядишь и с миру по нитке насоберем на PTA параметров ))

0

Share this post


Link to post
Share on other sites

отдельная сатурация неба. в General.fx  ищем: 

if (cb_mObjectType == (uint)1)
    {
        cColor.rgb = saturate(lerp(dot(cColor.rgb, float3(0.299f, 0.587f, 0.114f)), cColor.rgb, 1.15));
    }

 

Крутим красное. 

 

0

Share this post


Link to post
Share on other sites

Сатурация всего ОТДЕЛЬНО от  неба и облаков.  Идем в GPUTerrain.fx.  Ищем по тегу //Work in progress.

Получаем : //Work in progress.
        FinalColor = float4(FinalLighting, fAlpha);

Добавляем твик Юры : FinalColor.rgb = saturate(lerp(dot(FinalColor.rgb, float3(0.299f, 0.587f, 0.114f)), FinalColor.rgb, 1.10));

Получаем : 

//Work in progress.
        FinalColor = float4(FinalLighting, fAlpha);
        FinalColor.rgb = saturate(lerp(dot(FinalColor.rgb, float3(0.299f, 0.587f, 0.114f)), FinalColor.rgb, 1.10))

Зеленой крутим насыщенность. 

 

Edited by modest11111
0

Share this post


Link to post
Share on other sites

Отдельная сатурация воды( полезная вещь). Ищем так же и там же, как расписано в предыдущем посте.  Добавляем твик Юрия :

#if defined(SHD_HAS_WATER)
        if (Input.IsWater) FinalColor.rgb = saturate(lerp(dot(FinalColor.rgb, float3(0.299f, 0.587f, 0.114f)), FinalColor.rgb, 0.40));
#endif

 

С твиками сатурации террайна (тот, который выше)  и воды у меня выглядит вот так :

//Work in progress.
        FinalColor = float4(FinalLighting, fAlpha);
                                     FinalColor.rgb = saturate(lerp(dot(FinalColor.rgb, float3(0.299f, 0.587f, 0.114f)), FinalColor.rgb, 1.10));
#if defined(SHD_HAS_WATER)
        if (Input.IsWater) FinalColor.rgb = saturate(lerp(dot(FinalColor.rgb, float3(0.299f, 0.587f, 0.114f)), FinalColor.rgb, 0.40));
#endif


Крутим зеленое. еще раз  обращаю внимание, что если будем крутить красное, то сатурация будет применяться к терайну и к воде тоже!. Так что если хотите порулить сатурацией водички отдельно , то крутим только зеленое.  ВСЕ НА СВОЙ СТРАХ и РИСК! Я не программист.  У меня работает, косяком пока не заметил. 

Edited by modest11111
0

Share this post


Link to post
Share on other sites

Вот что значит чукче бензопилу завести ))) Или Модесту сказать, как пользоваться Notepad++

0

Share this post


Link to post
Share on other sites

Нужнейший для меня твик. Крутим освещенность/затемненность  Объектов сима (свет и тени на терминалы, телетрапы, тени от крафта в портах и тд) Копаться будем в General.fx  Ищем по тэгу, например, #if !defined(SHD_BASE) && defined(SHD_RECEIVE_SHADOWS).   Отматываем немного выше.  Находим вот такую хрень : 

 const float fDotSun = saturate(dot(vNormalWS, normalize(cb_mSun.mDirection)));
                const float fDotMoon = saturate(dot(vNormalWS, normalize(cb_mMoon.mDirection)));
            #endif

            cDiffuse = cBase * (float4( saturate( 
                (cb_mSun.mAmbient.xyz + (shadowContrib * (sunDiffuse * fDotSun))) + 
                (cb_mMoon.mAmbient.xyz + (shadowContrib * (moonDiffuse * fDotMoon)))), 1) + cDiffuse);

Берем твик Юрия, заменяем переменную и лепим между блоками (красным текстом), чтобы было   вот так: 

const float fDotSun = saturate(dot(vNormalWS, normalize(cb_mSun.mDirection)));
                const float fDotMoon = saturate(dot(vNormalWS, normalize(cb_mMoon.mDirection)));
            #endif

                                                           if (cb_mObjectType != 19) cDiffuse = cBase * (float4( saturate((cb_mSun.mAmbient.xyz * 0.90 +
(shadowContrib * (sunDiffuse *
2.50 * fDotSun))) +  (cb_mMoon.mAmbient.xyz * 0.65 + (shadowContrib * (moonDiffuse * 0.75 *
fDotMoon)))), 1) + cDiffuse);

        else
            cDiffuse = cBase * (float4( saturate( 
                (cb_mSun.mAmbient.xyz + (shadowContrib * (sunDiffuse * fDotSun))) + 
                (cb_mMoon.mAmbient.xyz + (shadowContrib * (moonDiffuse * fDotMoon)))), 1) + cDiffuse);

Синим цветом крутим тени, больше цифра - меньше тень. 

Черное - свет. Больше цифра - ярче освещаемый участок. 

0.65 и 0.75 - для ночи и луны. 

 

Edited by modest11111
0

Share this post


Link to post
Share on other sites
5 минут назад, Wonderboy пишет:

Вот что значит чукче бензопилу завести ))) Или Модесту сказать, как пользоваться Notepad++

)) главное результат) мне не нужен notepad, я по цифрам изменения отлавливаю) Не взглянешь на уменьшение светимости облаков ночью? там код в шейдере другой, а я нихера не программист. 

Edited by modest11111
0

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.