• Вход / Регистрация
    Логин:
    Пароль:
Страница 61 из 450«125960616263449450»
Архив - только для чтения
Форум GtaMania.ru » Сайт и форум » Архив » ENB Series GTA 4 (Часть IV) (Ваши настройки, инструкции, вопросы и т.д.)
ENB Series GTA 4 (Часть IV)
offline
 memphis
Дата: Понедельник, 2012-04-02, 23:30 | Сообщение # 1
Гангстер
Сообщений: 2690
ENBSeries GTA IV (Часть IV). (I), (II), (III)



Прежде чем обращаться в эту тему, советуем ознакомиться с FAQ. Вдруг там уже есть ответ на Ваш вопрос?

Информация, обязательная к прочтению:
Все сообщения, никаким образом не касающиеся темы обсуждения ENB, будут удаляться, а авторы - наказываться без предупреждения.
Для тех, кому не понятно, что изложено выше, - формулировка слегка проще: флуд в данной теме запрещен, причем в любых его проявлениях, спасибо за внимание, надеемся на ваше благоразумие.

Максимальный размер публикуемого изображения без превью не должен превышать 300px по большей стороне.
Все скриншоты и видео прятать под спойлер!

Тэг spoiler используется именно так, как показано в п.2.7 правил сайта. Обратите внимание на кавычки и проверьте перед отправкой сообщения, так ли это оформили Вы.







 
offline
 yug74
Дата: Вторник, 2012-06-05, 15:46 | Сообщение # 901
Гангстер
Сообщений: 1107
Quote (Simple999)
Впихни туда тоун пам и крути его, будет думаю шикарно)

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


На пенсии ))
 
offline
 AgainstAllAutority
Дата: Вторник, 2012-06-05, 16:45 | Сообщение # 902
Гангстер
Сообщений: 801
yug74, Simple999,
тоунмап - функция, позволяющая вменяемо ужимать HDR цвет в [0...1] (собственно LDR, выводимый на экран)
не бывает кривого тоунмапа (собственно я знаю 3: полином из анчартеда, классический X/(X+1) борис такой использовал в енб для гта, и экспоненциальный), а бывает несоответствие диапозонов цвета (а это у всех кустарных енбэффектов, у дп3,фэйка, у тебя юг, у сипла, портала) поэтому начинаете их "крутить"
я много эффектов об это убил, вот моя последняя версия, где, как мне кажется я все сделал правильно с этими премудростями, в нем пока не вынесены контроллеры, я вывешу код прям тут в открытом виде и отвечу на все вопросы по нему.
[spoiler="enbeffect 2.0"]
Code

//++++++++++++++++++++++++++++++++++++++++++++
// ENBSeries effect file
// visit http://enbdev.com for updates
// Copyright 2010 (c) Boris Vorontsov
// property of AAA
// patent ?RU71555       
// Using decompiled shader of GTA4 game by
// Rockstar Games.
//++++++++++++++++++++++++++++++++++++++++++++

static const float3 LUMINANCE = float3(0.2125, 0.7154, 0.0721); // cinematic perception of colors

int PixelSizeMultiplier=1; // not used here

float BP_factor = 0.15;
extern float fRatio = 0.12;    // blend ratio (0-1)
extern float moodR = 0.40;    // mood color red component
extern float moodG = 0.27;    // mood color green component
extern float moodB = 0.33;    // mood color blue component
             

//x=generic timer in range 0..1, period of 16777216 ms (4.6 hours)
//w=frame time elapsed (in seconds)
float4    Timer;

#define CrossProcessing
       #ifdef CrossProcessing
        float Contrast = 0.75;
        float Saturation2 = 1.8;
        float Brightness = 0.01;
        float Amount = 0.5;
        float3 mColorMatrix[3] =  // this is colormatrix, quite hard to explain how it affect colors
          {
          float3 (0.95,0.05,0.0),  // this is amount of red,green, blue that goes to red channel
          float3 (0.05,0.89,0.09),  // -----//------ to green channel
          float3 (0.05,0.05,0.9),  // -----//------ to blue channel
          };
       #endif
       float4 crossProcess_PS(float4 color) : COLOR0
       {
        float4 image1 = color;
        float4 image2 = color;

        float gray = dot(LUMINANCE, image1);  // ????? ?????? float3 ????? ????????? _?12
        //float gray = dot(float3(0.5,0.5,0.5), image1);  // ????? ?????? float3 ????? ????????? _?12

        image1 = lerp (gray, image1,Saturation2);

        image1 = 0.7*image1 + 0.75*gray;
               
        image1 = lerp (0.45, image1,Contrast);

        image1 +=Brightness;
//  image1 *=1.2;
/*
        image2.r = image1.r * crossMatrix[0].x + crossMatrix[0].y;
        image2.g = image1.g * crossMatrix[1].x + crossMatrix[1].y;
        image2.b = image1.b * crossMatrix[2].x + crossMatrix[2].y;
*/
image2.xyz =  float3(  dot(image1.xyz, mColorMatrix[0].xyz),
                dot(image1.xyz, mColorMatrix[1].xyz),
                dot(image1.xyz, mColorMatrix[2].xyz) );
        color = lerp(image1, image2, Amount);

        return color;
       }
       float4 BleachBypass_PS (float4 color): COLOR0
       {
         float    luma = dot(color.xyz, LUMINANCE);

        float3    blend = luma.xxx;
        //float    L = min(1, max(0, 10*(luma - 0.45)));
        float L=clamp((luma - 0.45) * 10, 0, 1);
        float3 result1 = 2.0 * color.xyz * blend;
        float3 result2 = 1.0 - 2.0*(1.0 - blend)*(1.0 - color.xyz);
        float3 newColor = lerp(result1.xyz, result2.xyz, L);
        float3 mixRGB = BP_factor * newColor.xyz;
        mixRGB += ((1.0f - BP_factor) * color.xyz);

        color.xyz = mixRGB;
        color.w=1.0;
        return color;
       }
       float4 colorMood_PS (float4 color) : COLOR0
{
       float4 colInput = color;
       float4 colMood = 1.0f;
             
       colMood.r = moodR;
       colMood.g = moodG;
       colMood.b = moodB;
             
       float fLum = dot(colInput, 1) / 3;
             
       colMood = lerp(0, colMood, saturate(fLum * 2.0));
       colMood = lerp(colMood, 1, saturate(fLum - 0.5) * 2.0);
             
       float4 colOutput = lerp(colInput, colMood, saturate(fLum * fRatio));
             
       return float4(colOutput.rgb, 1);
}

float A = 0.15;
float B = 0.50;
float C = 0.10;
float D = 0.20;
float E = 0.02;
float F = 0.30;
float W = 20;

float3 Uncharted2Tonemap(float3 x)
{
         return ((x*(A*x+C*B)+D*E)/(x*(A*x+B)+D*F))-E/F;
}

float4 ps_UT( float3 color, float exposure ) : COLOR0
{
         float3 texColor = color;
         texColor *= exposure;  // Hardcoded Exposure Adjustment

         float ExposureBias = 2.0f;
         float3 curr = Uncharted2Tonemap(ExposureBias*texColor);

         float3 whiteScale = 1.0f/Uncharted2Tonemap(W);
         float3 outcolor = curr*whiteScale;

         float3 retColor = pow(outcolor,1.09);
         return float4(retColor,1);
}
//   sampler2D AdapLumSampler;
//   sampler2D BloomSampler;
//   float4 ColorCorrect;
//   float4 ColorShift;
//   float Exposure;
//   sampler2D GBufferTextureSampler2;
//   sampler2D GBufferTextureSampler3;
//   sampler2D HDRSampler;
//   sampler2D JitterSampler;
//   float PLAYER_MASK;
//   sampler2D StencilCopySampler;
//   float4 TexelSize;
//   float4 ToneMapParams;
//   float4 deSatContrastGamma;
//   float4 dofBlur;
//   float4 dofDist;
//   float4 dofProj;
//   float gDirectionalMotionBlurLength;
//   float4 globalScreenSize;
//   row_major float4x4 motionBlurMatrix;
//
//
// Registers:
//
//   Name                         Reg   Size
//   ---------------------------- ----- ----
//   globalScreenSize             c44      1
//   Exposure                     c66      1
//   motionBlurMatrix             c72      4
//   TexelSize                    c76      1
//   dofProj                      c77      1
//   dofDist                      c78      1
//   dofBlur                      c79      1
//   gDirectionalMotionBlurLength c80      1
//   ToneMapParams                c81      1
//   deSatContrastGamma           c82      1
//   ColorCorrect                 c83      1
//   ColorShift                   c84      1
//   PLAYER_MASK                  c85      1
//   GBufferTextureSampler2       s0       1
//   GBufferTextureSampler3       s1       1
//   HDRSampler                   s2       1
//   BloomSampler                 s3       1
//   AdapLumSampler               s4       1
//   JitterSampler                s5       1
//   StencilCopySampler           s6       1

//quad
struct VS_OUTPUT_POST
{
       float4 vpos  : POSITION;
       float2 txcoord0 : TEXCOORD0;
};
struct VS_INPUT_POST
{
       float3 pos  : POSITION;
       float2 txcoord0 : TEXCOORD0;
};

//int4    _i0 : register(i0);

/*
float4    _c0 : register(c0);
float4    _c1 : register(c1);
float4    _c2 : register(c2);
float4    _c3 : register(c3);
float4    _c4 : register(c4);
float4    _c5 : register(c5);
float4    _c6 : register(c6);
*/
float4    _c44 : register(c44);
float4    _c66 : register(c66);
float4    _c72 : register(c72);
float4    _c73 : register(c73);
float4    _c74 : register(c74);
float4    _c75 : register(c75);
float4    _c76 : register(c76);
float4    _c77 : register(c77);
float4    _c78 : register(c78);
float4    _c79 : register(c79);
float4    _c80 : register(c80);
float4    _c81 : register(c81);
float4    _c82 : register(c82);
float4    _c83 : register(c83);
float4    _c84 : register(c84);
float4    _c85 : register(c85);

texture2D texs0;
texture2D texs1;
texture2D texs2;
texture2D texs3;
texture2D texs4;
texture2D texs5;
texture2D texs6;
texture2D texs7;
texture2D texs13;//palette
texture2D texs15;
//sampler2D s0 : register(s0)=sampler_state { Texture=<texs0>; };
//sampler2D s1 : register(s1)=sampler_state { Texture=<texs1>; };
sampler2D s2 : register(s2)=sampler_state { Texture=<texs2>; };
//sampler2D s3 : register(s3)=sampler_state { Texture=<texs3>; };
sampler2D s4 : register(s4)=sampler_state { Texture=<texs4>; };
//sampler2D s5 : register(s5)=sampler_state { Texture=<texs5>; };
sampler2D s6 : register(s6)=sampler_state { Texture=<texs6>; };
sampler2D s7 : register(s7)=sampler_state { Texture=<texs7>; };
//sampler2D s13 : register(s13)=sampler_state { Texture=<texs13>; };
sampler2D s15 : register(s15)=sampler_state { Texture=<texs15>; };

//next samplers states fixing problems on ATI cards
sampler2D s0 = sampler_state
{
          Texture   = <texs0>;
       MinFilter = LINEAR;//
       MagFilter = LINEAR;//
       MipFilter = NONE;//NONE;//LINEAR;
       AddressU  = Clamp;
       AddressV  = Clamp;
       SRGBTexture=FALSE;
       MaxMipLevel=0;
       MipMapLodBias=0;
};

sampler2D s1 = sampler_state
{
          Texture   = <texs1>;
       MinFilter = LINEAR;//
       MagFilter = LINEAR;//
       MipFilter = NONE;//NONE;//LINEAR;
       AddressU  = Clamp;
       AddressV  = Clamp;
       SRGBTexture=FALSE;
       MaxMipLevel=0;
       MipMapLodBias=0;
};

sampler2D s3 = sampler_state
{
          Texture   = <texs3>;
       MinFilter = GAUSSIANQUAD;//
       MagFilter = GAUSSIANQUAD;//
       MipFilter = NONE;//NONE;//LINEAR;
       AddressU  = Clamp;
       AddressV  = Clamp;
       SRGBTexture=FALSE;
       MaxMipLevel=0;
       MipMapLodBias=0;
};

sampler2D s5 = sampler_state //fixed
{
       Texture   = <texs5>;
       MinFilter = LINEAR;
       MagFilter = LINEAR;
       MipFilter = NONE;
       AddressU  = Wrap;
       AddressV  = Wrap;
       SRGBTexture=FALSE;
       MaxMipLevel=0;
       MipMapLodBias=0;
};

sampler2D s13 = sampler_state
{
       Texture   = <texs13>;
       MinFilter = LINEAR;
       MagFilter = LINEAR;
       MipFilter = NONE;
       AddressU  = Clamp;
       AddressV  = Clamp;
       SRGBTexture=FALSE;
       MaxMipLevel=0;
       MipMapLodBias=0;
};

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
float4 PS_C215BE6E(VS_OUTPUT_POST IN) : COLOR
{
       float4 _oC0=0.0; //output

       float4 _c0=float4(0, 0.212500006, 0.715399981, 0.0720999986);
       float4 _c1=float4(0.25, 1, 256, 0);
       float4 _c2=float4(0, 2, 4, 8);
       float4 _c3=float4(58.1640015, 47.1300011, 0, 0);
       float4 _c4=float4(-0.5, -1.5, 1.5, 0.5);
       float4 _c5=float4(2, -1, 0.125, 0);
       float4 _c6=float4(256, 2, 4, 8);
//mine
       float4 _c7=float4(1.0, 0.1, 0.8, 1.0);
       float4 _c8=float4(0.0, 0.1, 0.8, 0.333);
       float4 _c9=float4(0.06, 0.1, 0.8, 0.1);
       float4 _c10=float4(0.01, 1.4, 0.0, 0.32);
       float4 _c11=float4(0.333333, 1.0, 0.0, 0.0);
       float4 _c12=float4(0.27, 0.67, 0.06, 0.0);
       float4 _c13=float4(0.0, 0.0, 0.0, 0.00001);
       float4 _c150=float4(0.55, 0.9, 0.85, 0.9);
       float4 _c195=float4(0.0, 0.0, 0.0, 0.07);//0.7

       float4 r0;
       float4 r1;
       float4 r2;
       float4 r3;
       float4 r4;
       float4 r5;
       float4 r6;
       float4 r7;
       float4 r8;
       float4 r9;
       float4 r10;
       float4 r11;

       float4 _v0=0.0;
       _v0.xy=IN.txcoord0.xy;

       r0=tex2D(s1, _v0.xy); //GBufferTextureSampler3
       r0.y=-_c77.x + _c77.y; //-dofProj.x + dofProj.y
       r0.y=1.0/r0.y;
       r0.z=r0.y * _c77.y; //dofProj.y
       r0.z=r0.z * -_c77.x; //dofProj.x
       r0.x=_c77.y * -r0.y + r0.x;
       r0.x=1.0/r0.x;
       r0.y=r0.z * r0.x;
             
       float depth=r0.z * r0.x - _c78.w; //dofDist.w
       depth+=_c78.y * -_c4.w; //dofDist.y
       depth+=148;//offset
//    center.x=_v0.x-0.5;
//    center.y=0.5-_v0.y;

       r1=tex2D(s2, _v0.xy); //HDRSampler
       r2=tex2D(s3, _v0.xy); //BloomSampler
             

       r2.x*=1.25;
       r2.y*=1.05;
       r2.z*=0.8;
// bloom crisp

r2.xyz=r2.xyz*(1-pow(2.7, -r2.xyz * 10));  // ????????? ?????

//r1*=10.0;

       r0.w=abs(_c79.w);
       r3=_c4; //-0.5, -1.5, 1.5, 0.5

//TEMP decrease bluriness for edge smoothing
float2 off_c76=_c76.xy*0.2;

       r4.xy=off_c76.xy * r3.xy + _v0.xy; //TexelSize.xy
       r4=tex2D(s2, r4.xy); //HDRSampler

       r5.xy=off_c76.xy * r3.zx + _v0.xy; //TexelSize.xy
       r5=tex2D(s2, r5.xy); //HDRSampler

       r3.xz=off_c76.xy * r3.wz + _v0.xy; //TexelSize.xy
       r6=tex2D(s2, r3.xz); //HDRSampler

       r3.xy=off_c76.xy * r3.yw + _v0; //TexelSize.xy
       r7=tex2D(s2, r3.xy); //HDRSampler

       r1.w=dot(r4.xyz, r4.xyz);
       r1.w=1.0/r1.w;
       if (-r1.w<0.0)
       {
        r3.xyz=r4.xyz;
       } else r3.xyz=_c0.x;

       r1.w=dot(r5.xyz, r5.xyz); //dp3
       r1.w=1.0/r1.w;
       if (-r1.w<0.0)
       {
        r4.xyz=r5.xyz;
       } else r4.xyz=_c0.x;

       r1.w=dot(r6.xyz, r6.xyz); //dp3
       r1.w=1.0/r1.w;
       if (-r1.w<0.0)
       {
        r5.xyz=r6.xyz;
       } else r5.xyz=_c0.x;

       r1.w=dot(r7.xyz, r7.xyz); //dp3
       r1.w=1.0/r1.w;
       if (-r1.w<0.0)
       {
        r6.xyz=r7.xyz;
       } else r6.xyz=_c0.x;

       r1.w=dot(r1.xyz, r1.xyz); //dp3
       r1.w=1.0/r1.w;
       if (-r1.w<0.0)
       {
        r7.xyz=r1.xyz;
       } else r7.xyz=_c0.x;

       r0.x=r0.z * r0.x - _c78.w; //dofDist.w
       r0.x=_c78.y * -r3.w + r0.x; //dofDist.y
       r1.w=max(r0.x, _c0.x); //0.0
       r0.x=1.0/_c78.z; //dofDist.z
       r0.x=r1.w * r0.x;
       r1.w=lerp(_c79.y, _c79.z, r0.x);//dofBlur
       r0.x=min(_c79.z, r1.w); //dofBlur.z

       r0.z=dot(r7.xyz, _c0.yzw); //0.212500006, 0.715399981, 0.0720999986
       r8.x=dot(r3.xyz, _c0.yzw); //0.212500006, 0.715399981, 0.0720999986
       r8.y=dot(r4.xyz, _c0.yzw); //0.212500006, 0.715399981, 0.0720999986
       r8.z=dot(r5.xyz, _c0.yzw); //0.212500006, 0.715399981, 0.0720999986
       r8.w=dot(r6.xyz, _c0.yzw); //0.212500006, 0.715399981, 0.0720999986
       r1.w=dot(r8, _c1.xxxx); //0.25

       r8=r8 - r1.w;
       r2.w=dot(r8, r8);
       r0.z=r0.z - r1.w;
       r0.z=r0.z * r0.z - r2.w;
       r0.x=r0.x*r0.x;
       if (r0.z<0.0)
       {
        r0.x=r0.x;
       } else r0.x=_c1.y; //1.0

       r8=tex2D(s0, _v0.xy); //GBufferTextureSampler2

       r8.yz=_c1.yz; // 1.0, 256.0
       r9=r8.w * -r8.z + _c2; //0, 2, 4, 8
       if (r9.w<0.0) //r9<0.0
       {
        r9=_c1.w; //0.0
       } else r9=_c1.y; //1.0
       //r9 is filtered sky mask

       //r10=r8.w + tempc6;//c6.yzwx; //256, 2, 4, 8
       r10=r8.w * -_c6.x + _c6.yzwx; //256, 2, 4, 8

       if (r10.x<0.0)
       {
        r10.x=-_c1.w; //0.0
       } else r10.x=-_c1.y; //1.0

       if (r10.y<0.0)
       {
        r10.y=-_c1.w; //0.0
       } else r10.y=-_c1.y; //1.0

       if (r10.z<0.0)
       {
        r10.z=-_c1.w; //0.0
       } else r10.z=-_c1.y; //1.0

       if (r10.w<0.0)
       {
        r10.w=-_c1.w; //0.0
       } else r10.w=-_c1.y; //1.0

       r9=r9 + r10;
       r9=r9 * _c4.x; //-0.5

       r0.z=dot(r9, _c1.yyyy); //1.0
       r0.z=r0.z + _c4.w; //0.5
       r0.z=1.0/r0.z;
       r8.xzw=r3.xyz * r9.x;

       r7.xyz=r7 * _c4.w + r8.xzw; //0.5
       r7.xyz=r4 * r9.y + r7;
       r7.xyz=r5 * r9.z + r7;
       r7.xyz=r6 * r9.w + r7;
       r7.xyz=r0.z * r7;
       r0.z=_c1.y - r0.x; //1.0
       r1.w=r0.x * _c1.x; //0.25

       r3.xyz=r3 * r1.w;
       r3.xyz=r7 * r0.z + r3;
       r3.xyz=r4 * r1.w + r3;
       r3.xyz=r5 * r1.w + r3;
       r3.xyz=r6 * r1.w + r3;

       r4.xyz=_v0.yxy * _c5.x + _c5.y; //2, -1
//    r4.x=_v0.y * _c5.x + _c5.y;
//    r4.y=_v0.x * _c5.x + _c5.y;
//    r4.z=_v0.y * _c5.x + _c5.y;

       r0.z=r4.y * _c77.z; //dofProj.z
       r0.z=r0.y * r0.z;
       r1.w=-r4.x * _c77.w; //dofProj.w
       r1.w=r0.y * r1.w;
       r5.xyz=r1.w * _c73; //motionBlurMatrix.2
       r5.xyz=r0.z * _c72 + r5; //motionBlurMatrix.1
       r5.xyz=-r0.y * _c74 + r5; //motionBlurMatrix.3
       r5.xyz=r5 + _c75; //motionBlurMatrix.4
       r0.y=-r5.z * _c77.z; //dofProj.z
       r6.x=r5.x / r0.y;
       r0.y=r5.z * _c77.w; //dofProj.w
       r6.y=r5.y / r0.y;
       //r0.yz=-r4 + r6.xy;
       r0.yz=r6.xy - r4.yz;

       //r0.yz=r0 * _c80.x; //gDirectionalMotionBlurLength.x
       r0.y=r0.y * _c80.x;
       r0.z=r0.z * _c80.x;
       r4.xy=r0.yz * _c5.z; //0.125
       r5=tex2D(s6, _v0.xy); //StencilCopySampler
       r1.w=r5.x - _c85.x; //PLAYER_MASK.x
       r4.zw=r3.xy * _c2.w; //8.0
       r4.zw=_v0.xy * _c3.xy + r4.zw; //58.1640015, 47.1300011
       r5=tex2D(s5, r4.zw); //JitterSampler
       r2.w=r5.x + _c4.x; //-0.5
       r4.zw=r4.xy * r2.w*2.0 + _v0.xy; //0.082 fixed
       r5.xyz=r3.xyz;
       r2.w=_c1.y; //1.0
       r3.w=_c1.y; //1.0

//motion blur
       for (int iii=0; iii<7; iii++)
       {
//  r6.xy=r4.xy * r3.w + r4.zw;
        r6.x=r4.x * r3.w + r4.z; //v2
        r6.y=r4.y * r3.w + r4.w; //v2
        r7=tex2D(s6, r6.xy);
        r5.w=r7.x - _c85.x;
        if (r5.w<0.0)
        {
         r5.w=_c1.y; //1.0
        } else r5.w=_c1.w; //0.0
        r6=tex2D(s2, r6.xy);
        r5.xyz=r6.xyz * r5.w + r5.xyz;
        r2.w=r2.w + r5.w;
        r3.w=r3.w + _c1.y; //1.0
       }

       r2.w=1.0/r2.w;

       //r0.yz=r0 * _c44.xxyw; //globalScreenSize
       r0.y=r0.y * _c44.x; //globalScreenSize
       r0.z=r0.z * _c44.y; //globalScreenSize

       r0.y=dot(r0.yz, r0.yz)+_c0.x;//dp2

       //r0.y=sqrt(r0.y);
       //r0.y=1.0/r0.y;
       r0.y=pow(r0.y, _c4.w); //0.5

       r0.y=r0.y * _c4.w; //0.5
       r0.x=r0.x + _c1.y; //1.0
       r0.x=1.0/r0.x;
       //r0.y is wrong
       r0.x=saturate(r0.y * r0.x);
       r4.xyz=r5 * r2.w - r3;
       r0.xyz=r0.x * r4 + r3;

       //_oC0.xyz=0.5*r0.xyz;

       if (-r1.w<0.0) r0.xyz=r3.xyz;
       if (-r0.w<0.0) r0.xyz=r1.xyz;

//for future use
r11=r0;

// my code starts here

       r5 = tex2D(s4, 0.0); // avg luminance texture
       r2 = tex2D(s3, _v0.xy); // bloom texture
             
       float3 exposure = float3(0.9, 0.2, 0.2);
       r2.r = r2.r * (1.25 - exp(-r2.r * exposure.x));
       r2.g = r2.g * (1 - exp(-r2.g * exposure.y));
       r2.b = r2.b * (1 - exp(-r2.b * exposure.z));
             
       r2.rgb *= lerp( 0.1, 1.2, saturate(depth));
             
       r5.w=r5.x;
       r5.w=1.0/r5.w;
       r0.xyz=r0.xyz * r5.w;
       r3.xy=_c10.xwxw;
       r3.xy=r3.xy * r5.w;
             
       r10=dot(r0.xyz, LUMINANCE.xyz); //luminance
             
       r4.xyz = r2.xyz * float3(1.2, 1.0, 0.65);
             
       r0 = r0 + 0.05 * r4; // 1st bloom mix, 0.05 - u can adjust it

       r9.x=r10.x * 3.5;
       r10.x=1.0/r10.x;
       r10=r10 * r9.x;
       r0=r0 * r10.x;
       r0=r0 * _c7.y;       
       r1=r0 * _c7.z;       
       r1=r1 + _c7.w;
             
       r0=r0 / (r1 + _c7.w);
             
       //_oC0 = r0;
             
             
       r2.rgb = r2.rgb * r3.x * 0.1; // 0.1 - 2nd bloommix multiplier
             
       //r2.r *= 1.55;
       //r2.b *= 0.4;
             
             
       float tmult = 1;
       r0=r0/tmult; r2=r2/tmult;
       r0.x = 1.0 - ((1.0 - r0.r) * (1.0 - r2.r));
       r0.y = 1.0 - ((1.0 - r0.g) * (1.0 - r2.g));
       r0.z = 1.0 - ((1.0 - r0.b) * (1.0 - r2.b));
       r0=r0*tmult;
             
       //r0.xyz = lerp(r0.xyz, 2*r0.xyz *_c83.xyz, 0.33);
       exposure = float3(0.1325, 0.131, 0.1305);
       float3  gamma = float3(0.93, 0.92, 0.92);
       float3  GContrast = float3(1.5,1.43,1.4);
       float3 saturation = float3(1.3, 1.45, 1.45);

       r0.r = pow(r0.r, 1/gamma.x);
       r0.g = pow(r0.g, 1/gamma.y);
       r0.b = pow(r0.b, 1/gamma.z);
             
       r0.r *= pow(2.0f, exposure.x);
       r0.g *= pow(2.0f, exposure.y);
       r0.b *= pow(2.0f, exposure.z);

       //float grayscale = dot(r0.rgb, LUMINANCE);
       float grayscale =(r0.r + r0.g + r0.g + r0.b)/4;
       float3 averageColor = float3(grayscale,grayscale,grayscale);
       r0.rgb = ((r0.rgb - averageColor )*saturation.rgb)+0.93*averageColor ;
             
       r0=crossProcess_PS(r0); // ????? ???????
             
       r0.x = pow(r0.x, GContrast.x) / (pow(saturate(r0.x), GContrast.x) + pow(1.0 - saturate(r0.x), GContrast.x)); // ????????
       r0.y = pow(r0.y, GContrast.y) / (pow(saturate(r0.y), GContrast.y) + pow(1.0 - saturate(r0.y), GContrast.y)); // ????????
       r0.z = pow(r0.z, GContrast.z) / (pow(saturate(r0.z), GContrast.z) + pow(1.0 - saturate(r0.z), GContrast.z)); // ????????

       r0=colorMood_PS(r0);

       r0=BleachBypass_PS(r0);       
             
       r0.xyz *= (1-pow(2.2f, -r0.xyz * 1.5));
             
       _oC0 = r0;
       _oC0.w=1.0;
       return _oC0;
}

//mine temporary post process
technique Shader_C215BE6E
{
          pass p0       
          {
        PixelShader  = compile ps_3_0 PS_C215BE6E();
       }
}

[/spoiler]

в теории, единственный косяк - это возможное несоответствие множителя адаптации для блума и цвета... это опыт покажет

[spoiler="еще немного теории"]
в реальности яркость, светимость(измеряемая Люменами) может различаться внутри сцены в тысячи раз, а 32х битный цвет выводимый мониторами предполагает 256 градаций на 1 канал
И нам надо как-то вменяемо ужать эти диапазоны, линейно делать этого не получится, так как тогда будет как на первом скрине с мельницей - очень много градаций серого перейдет в 1, и мы потеряем много полу-тонов
поэтому надо переводит цвета нелинейно, чтоб получить больше градаций в наиболее информативных диапозонах

[/spoiler]




Сообщение отредактировал AgainstAllAutority - Вторник, 2012-06-05, 19:09
 
offline
 Simple999
Дата: Вторник, 2012-06-05, 17:15 | Сообщение # 903
Гангстер
Сообщений: 1000
AgainstAllAutority, Спасибо
Кстати Uncharted2Tonemap у меня есть

Если кому интересно
коды tonemap
http://filmicgames.com/archives/75


? 21.12.2013 - Дней на сайте: 999


Сообщение отредактировал Simple999 - Вторник, 2012-06-05, 17:21
 
offline
 yug74
Дата: Вторник, 2012-06-05, 19:00 | Сообщение # 904
Гангстер
Сообщений: 1107
AgainstAllAutority, умно рисуешь, но на практике выходит как всегда.
Твой enbeffect, впрочем как и все другие, будет нормально работать только с определённым timecyc'ом, да и ENB.
Я посмотрел твой enbeffect... ресурсопожираемый %) , да и проще перенастроить таймцикл под него :D ... шутка юмора. Заинтересовала серая пелена... что это за эффект и если можно, то выложи пожалуйста этот эффект отдельным кодом.
Simple999, тоунмап хорошая (весёлая, красочная и по большей мере мультяшная) штука, но как я и писал ранее, одно лечит, другое колечит... как ни собирай самолёт, всё ровно выходит трактор... не прижился. Да и не вижу особого смысла с помощью тоунмапа делать картинку красочной, что бы потом понизить насыщенность, в итоге х. на х. поменял, время даром потерял + получил в одном случае ораньжевое такси, в другом кислотно-желтушное.


На пенсии ))
 
offline
 AgainstAllAutority
Дата: Вторник, 2012-06-05, 19:25 | Сообщение # 905
Гангстер
Сообщений: 801
yug74, думаю, то о чем ты говоришь - "центрирование серого" или как-то так
float3 midvalue = 0.45; // 0.33...0.66
float value = 0.8; // 0.5...1
color.xyz = lerp( midvalue, color.xyz, value);

а ресурсо-пожираемый, так это я там случайно не удалил всякое, а ты возможно разкоментил... не надо)))

я потом сделаю модную версию с дофом, включаемыми/отключаемыми модулями, комментариями и контроллерами




Сообщение отредактировал AgainstAllAutority - Вторник, 2012-06-05, 19:25
 
offline
 dpeasant3
Дата: Вторник, 2012-06-05, 19:30 | Сообщение # 906
Пользователь
Сообщений: 414
AgainstAllAutority, а с помощью какого кода можно регулировать степень затенения? В смысле, плавность перехода из серого в черный, например? Или максимальную степень черного? Я не о контрасте говорю, допустим мне нужно увеличить\снизить порог, при котором темно-серый становится абсолютно черным.


v1.2a - 22.04.2011.
http://www.sendspace.com/file/g4nex3
v1.3OPENBETA 01.11.2011
http://depositfiles.com/files/jmfj2mtqt
 
offline
 yug74
Дата: Вторник, 2012-06-05, 20:13 | Сообщение # 907
Гангстер
Сообщений: 1107
Quote (AgainstAllAutority)
yug74, думаю, то о чем ты говоришь - "центрирование серого" или как-то так float3 midvalue = 0.45; // 0.33...0.66 float value = 0.8; // 0.5...1 color.xyz = lerp( midvalue, color.xyz, value);

В твоём enbeffect'е такого кода нет.
Это не то, с этим кодом никаких изменений... У тебя там как бы серая пелена, типа блум такой серый, вот на этот эффект мне интересен код.
Quote (AgainstAllAutority)
а ресурсо-пожираемый, так это я там случайно не удалил всякое, а ты возможно разкоментил... не надо)))

Нифига, кроме настроек я там ничего не трогал.


На пенсии ))
 
offline
 AgainstAllAutority
Дата: Вторник, 2012-06-05, 20:18 | Сообщение # 908
Гангстер
Сообщений: 801
dpeasant3, подобную вещь я бы делал через MAX/MIN операторы... ща гта запущу - что-нить придумаем
что-то в духе:

color-=0.05; // смещаем цвет вниз (темно серый станет темней а на белый почти не повлияет)
color = max(0, color); // чтоб не было отрицательного цвета

можно сделать вот так
float grayscale = dot(r0.rgb, LUMINANCE);
float3 averageColor = float3(grayscale,grayscale,grayscale);
r0.rgb = ((r0.rgb - 0.92*averageColor )*saturation.rgb)+0.93*averageColor ; //0.92 и 0.93 и есть степень затенения, понижай их в купе с saturation и получишь картинку с низким уровнем серого


yug74, там есть такой код - как часть crossprocess функции, там она контрастом называется :P
а серый блум - следствие мапинга блума в 0...1




Сообщение отредактировал AgainstAllAutority - Вторник, 2012-06-05, 20:21
 
offline
 yug74
Дата: Вторник, 2012-06-05, 22:32 | Сообщение # 909
Гангстер
Сообщений: 1107
AgainstAllAutority, спасибо, всё работает... просто я вставлял код после блума никаких изменений не было, а перед блумом заработал как надо.
Кстати, этот маленький эффектик очень многое компенсирует... мне нравится. Установил снова тоунмап в придачу к этому коду, чуточку поднастроил, теперь хоть как-то сносно стало выглядеть такси.


На пенсии ))
 
offline
 Orangebrains
Дата: Среда, 2012-06-06, 00:10 | Сообщение # 910
Гангстер
Сообщений: 615


Сообщение отредактировал Orangebrains - Среда, 2012-06-06, 00:14
 
offline
 AgainstAllAutority
Дата: Среда, 2012-06-06, 00:22 | Сообщение # 911
Гангстер
Сообщений: 801
m0ut, неа... все изучается самостоятельно, если честно я не очень себе представляю - как можно обучать ему... это не тайм, где есть 100 параметров, а теперь и к unknown есть описания, тут больше творчества и свободы.
вот тебе направление:
enbeffect, enbbloom, effect.txt, inj_fxaa shaders - все по-сути программы для графического процессора, именуемые шейдерами
во всем, что касается самого енб (enbeffect, enbbloom, effect.txt) используется высокоуровневый язык HLSL, созданный microsoft (на msdn есть мануал и описание языка, но оно там на уровне для программистов - надо иметь базу чтоб понять). По устройству этот язык ооочень напоминает C++, поэтому можешь смело купить книгу СИ для чайников и ничанать "дружбу" с шейдерами с него.
на сайтах Nvidia,AMD,gamedev, XNA, crytek, orge можно найти много примеров шейдеров, порой даже с пошаговыми описаниями.
Для енбэффекта и блума подходят пиксельные шейдеры, с вершинными я пока что не разобрался, хотя в теории и их можно изменять и редактировать, однако это постпроцесс и они выдают только координаты, без векторов света,отражений, нормалей и тп...


 
offline
 dingooo
Дата: Среда, 2012-06-06, 00:51 | Сообщение # 912
Пользователь
Сообщений: 95
потыркал тоунмап ,помоему сделал темнее просто картинку и всё... аля контраст
[spoiler="Скрытый текст"]без тм

с тм

с тм и ддоф
[/spoiler]

Code
#define Gamma 1.0
#define Exposure 0.0
#define Saturation 0.77   
#define BlueShift 0.0
#define Bleach 0.4
#define Defog 0.070
#define FogColor float4(0.43, 0.36, 0.43, 0.0)


ААА ,попробовал твой код полностью ,понравилось что белый свет не яркий ,можно ли такое осуществить например на другом эффекте без существенных перенастроек ?! :)


Asus_P5KPL\Q6600_2.99Ghz\4GB_RAM_Hynix\HD6850_Gigabyte\450W_china\500Gb_Seagate\W7x64
 
offline
 AgainstAllAutority
Дата: Среда, 2012-06-06, 01:01 | Сообщение # 913
Гангстер
Сообщений: 801
dingooo, неа, я ж говорил, что надо правильно держать диапозоны цвета/блума в ходе всего енбэффекта, а желательно еще и тайма (я например убираю таймовый блум полностью - значение 0, хотя для отражений на авто он полезен, как мне показалось)
я тогда просто сделаю на днях версию с дофом и контроллерами, чтоб сами смогли легко настроить
спецом сделаю так, чтоб коды не тырили lol
[spoiler="++++++++++++++"]


[/spoiler]




Сообщение отредактировал AgainstAllAutority - Среда, 2012-06-06, 01:15
 
offline
 Simple999
Дата: Среда, 2012-06-06, 03:45 | Сообщение # 914
Гангстер
Сообщений: 1000
AgainstAllAutority,
а кто тырит? lol
Сначала настроил конфиг (без tonemap), что бы уже его вообще не крутить, ну все нравилось. Потом разкоментил tonemap и начал настраивать только его. Я так понял если картинка до tonemap не блещет качеством то tonemap только все испаганит.

Совет..
Кароче нужно настроить сначала енб без тонемапа, когда получится дойстойная картинка без засветов и другой дряни, смело можно пихнуть тоун мап и крутить только !!!!!!его!!!! а не все в разнобой, проверено на своем опыте...
[spoiler="что получилось"]
[/spoiler]


? 21.12.2013 - Дней на сайте: 999


Сообщение отредактировал Simple999 - Среда, 2012-06-06, 06:43
 
offline
 yug74
Дата: Среда, 2012-06-06, 11:50 | Сообщение # 915
Гангстер
Сообщений: 1107
Simple999, ну да, ну да... А теперь, с уже, как ты полагаешь, настроенным тоунмапом покажи скрины в 12-13:00 с 133-м белым в солнечном месте так. что бы было много деревьев на фоне и такси днём наполовину в тени, на половину на солнце.


На пенсии ))
 
Форум GtaMania.ru » Сайт и форум » Архив » ENB Series GTA 4 (Часть IV) (Ваши настройки, инструкции, вопросы и т.д.)
Страница 61 из 450«125960616263449450»
Поиск:

Реклама:
GtaMania.ru - это открытый ресурс, позволяющий публиковать материалы любому пользователю сети интернет. Администрация не несет ответственности за опубликованные пользователями материалы. Любой материал может быть удален по просьбе автора, при предъявлении сканированных копий документов подтверждающих авторские права на конкретный материал.
При копировании материалов, гиперссылка на http://gtamania.ru/ ОБЯЗАТЕЛЬНА!
| Design by SandWicH | Copyright GtaMania.ru © 2008 - 2016
Rambler's Top100