123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756 |
- //! Deprecated; 'PPEManager' used instead
- class PPEffects
- {
- // COLORIZE IDs
- static const int COLORIZE_NV = 100;
-
- //CONSTANTS
- static const float COLOR_SHOCK = 0.1;//shock color value (relative) //todo
-
- //-------------------------------------------------------
- // BLUR START
- //-------------------------------------------------------
- static int m_BlurInventory;
- static int m_BlurDrunk;
- static int m_BlurFever;
- static int m_BlurMenu;
- static int m_BlurOptics;
- static int m_BlurFlashbang;
- static int m_BlurShock;
-
- static int m_BurlapBlindness;
- static int m_DyingEffect;
- static int m_ShockEffect;
-
- static int m_ChromAbbOptic;
- //static int m_ChromAbbShock;
-
- static int m_VignetteUnconscious;
- static int m_VignetteShock;
- static int m_VignetteTunnel;
- static int m_VignetteMenu;
-
- static float m_BloodSaturation;
-
- static ref array<float> m_BlurValues;
- static ref array<float> m_ChromAbbValues;
- static ref array<int> m_VignetteEffects;
- static ref map<int, ref array<float>> m_VignetteValues;
- static ref map<int, ref array<float>> m_ColorValues;
- static ref array<float> m_ColorEffect;
- static ref map<int, ref array<float>> m_ColorizeEffects;
-
- //static float m_UnconsciousVignetteColor[4];
- //static float m_UnconsciousVignetteIntesity;
-
- static float m_ColorValueTotal[4] = {0,0,0,0};
- static float m_ColorOverlayTotal;
- static Material m_MatColors;
- static Material m_RadialBlur;
-
- static void Init()
- {
- //Print("---Init PPEffects---");
- if ( m_BlurValues )
- {
- delete m_BlurValues;
- }
- if ( m_ChromAbbValues )
- {
- delete m_ChromAbbValues;
- }
- if ( m_VignetteEffects )
- {
- delete m_VignetteEffects;
- }
- if ( m_VignetteValues )
- {
- delete m_VignetteValues;
- }
- if ( m_ColorEffect )
- {
- delete m_ColorEffect;
- }
-
- m_MatColors = GetGame().GetWorld().GetMaterial("graphics/materials/postprocess/glow");
- m_RadialBlur = GetGame().GetWorld().GetMaterial("graphics/materials/postprocess/radialblur");
- m_BlurValues = new array<float>;
- m_ChromAbbValues = new array<float>;
- m_VignetteEffects = new array<int>;
- m_VignetteValues = new map<int, ref array<float>>;
-
- // add new blur effects here
- m_BlurInventory = RegisterBlurEffect();
- m_BlurDrunk = RegisterBlurEffect();
- m_BlurFever = RegisterBlurEffect();
- m_BlurMenu = RegisterBlurEffect();
- m_BlurOptics = RegisterBlurEffect();
- m_BlurFlashbang = RegisterBlurEffect();
-
- // add chromatic abberation effects here
- m_ChromAbbOptic = RegisterChromAbbEffect();
- //m_ChromAbbShock = RegisterChromAbbEffect();
-
- // add vignette effects here
- m_VignetteUnconscious = RegisterVignetteEffect();
- m_VignetteShock = RegisterVignetteEffect();
- m_VignetteTunnel = RegisterVignetteEffect();
- m_VignetteMenu = RegisterVignetteEffect();
-
- m_ColorEffect = new array<float>;
- m_ColorValues = new map<int, ref array<float>>;
-
- // add new color effects here
- m_BurlapBlindness = RegisterColorEffect();
- m_DyingEffect = RegisterColorEffect();
- m_ShockEffect = RegisterColorEffect();
-
- // ------------------------NV-related stuff below------------------------
- array<float> colorizeDefault = {0.0, 0.0, 0.0};
- m_ColorizeEffects = new map<int, ref array<float>>;
-
- // colorize: r, g, b
- // colorize effects registration
- m_ColorizeEffects.Set(PPEffects.COLORIZE_NV, colorizeDefault);
- //SetNVParams(1.0, 0.0, 2.35, 2.75); //default values
- // ------------------------End of NV-related stuff------------------------
- }
-
- static void ResetBlurEffects()
- {
- if( m_BlurValues )
- {
- for ( int i = 0; i < m_BlurValues.Count(); ++i )
- {
- m_BlurValues[i] = 0;
- }
- UpdateBlur();
- }
- }
-
- static void ResetRadialBlur()
- {
- SetRadialBlur(0,0,0,0);
- }
-
- static void SetBlurValue(int index, float value)
- {
- if ( m_BlurValues && index < m_BlurValues.Count() )
- {
- m_BlurValues[index] = value;
- }
- else
- {
- Print("Error: PPEffects: m_BlurValues with index: "+ index +" is not registered.");
- }
- }
-
- static int RegisterBlurEffect()
- {
- return m_BlurValues.Insert(0);
- }
-
- //-------------------------------------------------------
- //! sets blur effect to an absolute value between 0..1
- static void SetRadialBlur(float powerX, float powerY, float offsetX, float offsetY )
- {
- if (GetGame())
- {
- m_RadialBlur.SetParam("PowerX", powerX);
- m_RadialBlur.SetParam("PowerY", powerY);
- m_RadialBlur.SetParam("OffsetX", offsetX);
- m_RadialBlur.SetParam("OffsetY", offsetY);
- }
- }
- //-------------------------------------------------------
- //! sets blur effect to an absolute value between 0..1
- static void SetBlur(float value)
- {
- if (GetGame())
- {
- Material mat_blur = GetGame().GetWorld().GetMaterial("graphics/materials/postprocess/gauss");
-
- if (mat_blur)
- {
- mat_blur.SetParam("Intensity", value);
- }
- }
- }
- //-------------------------------------------------------
- //! updates the blur post process effect where the resulting blur is an aggregate of all individual blur effect values
- static void UpdateBlur()
- {
- float blur_value_total = 0;
- if( m_BlurValues )
- {
- for ( int i = 0; i < m_BlurValues.Count(); ++i )
- {
- blur_value_total += m_BlurValues[i];
- }
- }
-
- SetBlur( blur_value_total );
- }
- //-------------------------------------------------------
- //! Set blur inventory effect to a specified 'value' between 0..1
- static void SetBlurInventory(float value)
- {
- SetBlurValue(m_BlurInventory, value);
- UpdateBlur();
- }
- //-------------------------------------------------------
- //! Set blur drunk effect to a specified 'value' between 0..1
- static void SetBlurDrunk(float value)
- {
- SetBlurValue(m_BlurDrunk, value);
- UpdateBlur();
- }
- //-------------------------------------------------------
- //! Set blur drunk effect to a specified 'value' between 0..1
- static void SetBlurFever(float value)
- {
- SetBlurValue(m_BlurFever, value);
- UpdateBlur();
- }
-
- //-------------------------------------------------------
- //! Set menu blur to a specified 'value' between 0..1
- static void SetBlurMenu(float value)
- {
- SetBlurValue(m_BlurMenu, value);
- UpdateBlur();
- }
-
- //-------------------------------------------------------
- //! Set optics and ironsights blur to a specified 'value' between 0..1
- static void SetBlurOptics(float value)
- {
- SetBlurValue(m_BlurOptics, value);
- UpdateBlur();
- }
-
- //-------------------------------------------------------
- //! Set blur flashbang hit effect to a specified 'value' between 0..1
- static void SetBlurFlashbang(float value)
- {
- SetBlurValue(m_BlurFlashbang, value);
- UpdateBlur();
- }
-
- static void SetBlurShock(float value)
- {
- SetBlurValue(m_BlurShock, value);
- UpdateBlur();
- }
-
- //-------------------------------------------------------
- // BLUR END
- //-------------------------------------------------------
-
- //-------------------------------------------------------
- // CHROMATIC ABBERATION
- //-------------------------------------------------------
- static int RegisterChromAbbEffect()
- {
- return m_ChromAbbValues.Insert(0);
- }
-
- static void ResetChromAbbEffects()
- {
- if( m_ChromAbbValues )
- {
- for ( int i = 0; i < m_ChromAbbValues.Count(); ++i )
- {
- m_ChromAbbValues[i] = 0;
- }
- UpdateChromAbb();
- }
- }
-
- static void SetChromAbbValue(int index, float value)
- {
- if ( m_ChromAbbValues && index < m_ChromAbbValues.Count() )
- {
- m_ChromAbbValues[index] = value;
- }
- else
- {
- Print("Error: PPEffects: m_ChromAbbValues with index: "+ index +" is not registered.");
- }
- }
-
- static void SetChromAbb(float value)
- {
- if (GetGame())
- {
- if (m_MatColors)
- {
- //Print("SetChromAbb: " + value);
- m_MatColors.SetParam("MaxChromAbberation", value);
- //SetVignette(value,0,255,0);
- }
- }
- }
- //-------------------------------------------------------
- //! updates the chromatic abberation post process effect where the resulting chromabb is an aggregate of all individual chromabb effect values
- static void UpdateChromAbb()
- {
- float chromabb_value_total = 0;
- if( m_ChromAbbValues )
- {
- for ( int i = 0; i < m_ChromAbbValues.Count(); ++i )
- {
- chromabb_value_total += m_ChromAbbValues[i]; //currently additive!
- }
- }
-
- SetChromAbb( chromabb_value_total );
- }
-
- static void SetChromAbbOptic(float value)
- {
- SetChromAbbValue(m_ChromAbbOptic, value);
- UpdateChromAbb();
- }
-
- /*static void SetChromAbbShock(float value)
- {
- SetChromAbbValue(m_ChromAbbShock, value);
- UpdateChromAbb();
- }*/
-
- //-------------------------------------------------------
- // CHROMATIC ABBERATION END
- //-------------------------------------------------------
-
- /*
- static void SetOverlayColor(float r, float g, float b, float a)
- {
- Material matColors = GetGame().GetWorld().GetMaterial("graphics/materials/postprocess/glow");
-
- m_Color[0] = r;
- m_Color[1] = g;
- m_Color[2] = b;
- m_Color[3] = a;
-
- matColors.SetParam("OverlayColor", m_Color);
- matColors.SetParam("OverlayFactor", a);
- }*/
-
- static void ResetColorEffects()
- {
- if( m_ColorEffect )
- {
- for ( int i = 0; i < m_ColorEffect.Count(); ++i )
- {
- //m_ColorEffect[i] = 0;
- m_ColorValues.Set(i,{0,0,0,0,0});
- }
- UpdateColor();
- }
- }
-
- static void SetColorValue(int index, float r, float g, float b, float a, float overlay)
- {
- if ( index < m_ColorEffect.Count() )
- {
- array<float> values = {r,g,b,a,overlay};
-
- m_ColorValues.Set(index, values);
- }
- else
- {
- Print("Error: PPEffects: m_ColorValues with index: "+ index +" is not registered.");
- }
- }
-
- static int RegisterColorEffect()
- {
- return m_ColorEffect.Insert(0);
- }
-
- static void UpdateColor()
- {
- float color_value_total[4] = {0,0,0,0};
- float color_overlay;
- /*
- m_MatColors.ResetParam("OverlayColor");
- m_MatColors.ResetParam("OverlayFactor");
- */
- if( !GetGame() || !GetGame().GetWorld() )
- {
- return;
- }
- for ( int i = 0; i < m_ColorValues.Count(); ++i )
- {
- int key = m_ColorValues.GetKey(i);
- array<float> value = m_ColorValues.Get(key);
-
- color_value_total[0] = color_value_total[0] + value[0];
- color_value_total[1] = color_value_total[1] + value[1];
- color_value_total[2] = color_value_total[2] + value[2];
- color_value_total[3] = color_value_total[3] + value[3];
- color_overlay += value[4];
- }
-
- m_ColorValueTotal = color_value_total;
- m_ColorOverlayTotal = color_overlay;
- m_MatColors.SetParam("OverlayColor", color_value_total);
- m_MatColors.SetParam("OverlayFactor", color_overlay);
- }
- /*!
- set lens effect
- \param lens <-5, 5>, 0 = disable (performance plus), > 0 = outside effect, < 0 inside effect
- \param chromAbb <0, 1>, chromaticity, 1 = max, 0 disable (performance plus)
- \param centerX <-1, 1>, center of effect, 0 = screen center in X
- \param centerY <-1, 1>, center of effect, 0 = screen center in Y
- */
- static void SetLensEffect(float lens, float chromAbb, float centerX, float centerY)
- {
- PerformSetLensEffect(lens, chromAbb, centerX, centerY);
- }
- //!added for convenience
- static void PerformSetLensEffect(float lens, float chromAbb, float centerX, float centerY)
- {
- m_MatColors.SetParam("LensDistort", lens);
- SetChromAbbOptic(chromAbb);
- m_MatColors.SetParam("LensCenterX", centerX);
- m_MatColors.SetParam("LensCenterY", centerY);
- }
-
- /*!
- set vignette
- \param intensity <0, 1>, intensity of effect, 0 = disable
- \param R
- \param G
- \param B
- */
- static void SetVignette(float intensity, float R, float G, float B, float A)
- {
- float color[4];
- color[0] = R;
- color[1] = G;
- color[2] = B;
- color[3] = A;
- m_MatColors.SetParam("Vignette", intensity);
- m_MatColors.SetParam("VignetteColor", color);
- }
-
- static void SetVignetteEffectValue(int index, float intensity, float r, float g, float b, float a)
- {
- if ( index < m_VignetteEffects.Count() )
- {
- array<float> values = {intensity,r,g,b,a};
-
- m_VignetteValues.Set(index, values);
- }
- else
- {
- Print("Error: PPEffects: m_ColorValues with index: "+ index +" is not registered.");
- }
- }
-
- static int RegisterVignetteEffect()
- {
- return m_VignetteEffects.Insert(0);
- }
-
- static void SetUnconsciousnessVignette(float value)
- {
- SetVignetteEffectValue(m_VignetteUnconscious, value, 0,0,0,0); //todo
- UpdateVignette();
- }
-
- static void SetShockVignette(float value)
- {
- SetVignetteEffectValue(m_VignetteShock, value, 0,0,0,0); //todo
- UpdateVignette();
- }
-
- static void SetTunnelVignette(float value)
- {
- SetVignetteEffectValue(m_VignetteTunnel, value, 0,0,0,0); //todo
- UpdateVignette();
- }
-
- static void SetMenuVignette(float value)
- {
- SetVignetteEffectValue(m_VignetteMenu, value, 0,0,0,0); //todo
- UpdateVignette();
- }
- static void ResetVignettes()
- {
- if( m_VignetteValues )
- {
- for ( int i = 0; i < m_VignetteValues.Count(); ++i )
- {
- array<float> values = {0,0,0,0,0};
-
- m_VignetteValues.Set(i, values);
- }
- UpdateVignette();
- }
- }
- static void OverrideDOF(bool enable, float focusDistance, float focusLength, float focusLengthNear, float blur, float focusDepthOffset)
- {
- GetGame().OverrideDOF(enable, focusDistance, focusLength, focusLengthNear, blur, focusDepthOffset);
- }
- static void AddPPMask(float ndcX, float ndcY, float ndcRadius, float ndcBlur)
- {
- GetGame().AddPPMask(ndcX, ndcY, ndcRadius, ndcBlur);
- }
-
- static void ResetPPMask()
- {
- if( GetGame() ) GetGame().ResetPPMask();
- }
-
- static void ResetDOFOverride()
- {
- OverrideDOF(false,0,0,0,0,1);
- }
-
- static void ResetLensEffect()
- {
- SetLensEffect(0,0,0,0);
- }
-
- static void HitEffect(float value)
- {
- float m_HitEffectColor[4];
- m_HitEffectColor[0] = Math.Lerp(Math.Clamp(m_ColorValueTotal[0],0,1), 1, value);
- m_HitEffectColor[1] = 0;
- m_HitEffectColor[2] = 0;
- m_HitEffectColor[3] = Math.Lerp(Math.Clamp(m_ColorValueTotal[0],0,1), 1, value);
- /*
- Print("---------------------------");
- Print("m_ColorValueTotal[0]: " + m_ColorValueTotal[0]);
- Print("value: " + value);
- Print("---------------------------");
- Print("r: " + m_HitEffectColor[0]);
- Print("g: " + m_HitEffectColor[1]);
- Print("b: " + m_HitEffectColor[2]);
- Print("a: " + m_HitEffectColor[3]);
- */
- m_MatColors.SetParam("OverlayColor", m_HitEffectColor);
- m_MatColors.SetParam("OverlayFactor", 0.05);
- }
-
- static void SetShockEffectColor(float value)
- {
- if (value > 0)
- SetColorValue(m_ShockEffect, COLOR_SHOCK, COLOR_SHOCK, COLOR_SHOCK, 1, value);
- else
- SetColorValue(m_ShockEffect, 0, 0, 0, 1, value);
- UpdateColor();
- }
-
- static void FlashbangEffect(float value)
- {
- float hitEffectColor[4];
- hitEffectColor[0] = 1;
- hitEffectColor[1] = 1;
- hitEffectColor[2] = 1;
- hitEffectColor[3] = Math.Lerp(Math.Clamp(m_ColorValueTotal[0],0,1), 1, value);
-
- m_MatColors.SetParam("OverlayColor", hitEffectColor);
- m_MatColors.SetParam("OverlayFactor", 0.75);
- }
-
- static void EnableBurlapSackBlindness()
- {
- SetColorValue(m_BurlapBlindness, 0, 0, 0, 1, 1.0);
- UpdateColor();
- g_Game.SetEVValue(-5);
- }
- static void DisableBurlapSackBlindness()
- {
- SetColorValue(m_BurlapBlindness, 0, 0, 0, 0, 0.0);
- UpdateColor();
- g_Game.SetEVValue(0);
- }
-
- static void SetDeathDarkening(float value)
- {
- value = Math.Clamp(value,0,1);
- SetColorValue(m_DyingEffect, 0, 0, 0, 1, value);
- UpdateColor();
- if (value > 0.99)
- SetEVValuePP(-5); //additional "darkness" to avoid lens flare
- else
- SetEVValuePP(0);
- }
- static void UpdateSaturation()
- {
- m_MatColors.SetParam("Saturation", m_BloodSaturation/*+add_additional_modifiers_here*/);
- }
-
- static void UpdateVignette()
- {
- float color[4];
- float intesity;
-
- float intensity_value_total = 0; //use just the highest?
- if( m_VignetteEffects )
- {
- for ( int i = 0; i < m_VignetteEffects.Count(); ++i )
- {
- if (m_VignetteValues.Get(i))
- {
- /*color[0] = m_VignetteValues.Get(i)[1]; //red
- color[1] = m_VignetteValues.Get(i)[2]; //green
- color[2] = m_VignetteValues.Get(i)[3]; //blue
- color[3] = m_VignetteValues.Get(i)[4]; //alpha*/
- color[0] = m_VignetteValues.Get(i).Get(1); //red
- color[1] = m_VignetteValues.Get(i).Get(2); //green
- color[2] = m_VignetteValues.Get(i).Get(3); //blue
- color[3] = m_VignetteValues.Get(i).Get(4); //alpha
-
- intesity = m_VignetteValues.Get(i).Get(0);
- intensity_value_total += intesity;
- }
- else
- {
- //Print("no m_VignetteValues");
- }
- }
- }
-
- /*color[0] = m_UnconsciousVignetteColor[0];
- color[1] = m_UnconsciousVignetteColor[1];
- color[2] = m_UnconsciousVignetteColor[2];
-
- intesity = m_UnconsciousVignetteIntesity;*/
-
- SetVignette( intensity_value_total, color[0], color[1], color[2], color[3] );
- }
- static void SetBloodSaturation(float value)
- {
- m_BloodSaturation = value;
- UpdateSaturation();
- }
-
- /*static void SetUnconsciousnessVignette(float value)
- {
- m_UnconsciousVignetteIntesity = value;
- UpdateVignette();
- }
-
- static void RemoveUnconsciousnessVignette()
- {
- m_UnconsciousVignetteIntesity = 0;
- UpdateVignette();
- }*/
-
- // appropriate parts of the code will call these functions
- static void SetColorizationNV(float r, float g, float b)
- {
- array<float> colorizeArray = {r, g, b};
- m_ColorizeEffects.Set(PPEffects.COLORIZE_NV, colorizeArray);
- UpdateColorize();
- }
-
- static void UpdateColorize()
- {
- bool foundActiveEffect = false;
- int lowestKey = 1000000;
- array<float> chosenArray;
- // search for active effect with highest priority (lower value of key better)
- for (int i = 0; i < m_ColorizeEffects.Count(); i++)
- {
- int currentKey = m_ColorizeEffects.GetKey(i);
- array<float> colorizeValues = m_ColorizeEffects.Get(currentKey);
- // check for non-zero active effect
- for (int j = 0; j < colorizeValues.Count(); j++)
- {
- if (colorizeValues[j] != 0.0)
- {
- if (currentKey < lowestKey)
- {
- chosenArray = colorizeValues;
- lowestKey = currentKey;
- foundActiveEffect = true;
- break;
- }
- }
- }
- }
- if (foundActiveEffect)
- {
- float color[4];
- color[0] = chosenArray[0];
- color[1] = chosenArray[1];
- color[2] = chosenArray[2];
- color[3] = 0;
- m_MatColors.SetParam("ColorizationColor", color);
- }
- else
- {
- // no active event found, reset colorize effect
- ResetColorize();
- }
- }
- static void ResetColorize()
- {
- float color[4];
- color[0] = 1.0;
- color[1] = 1.0;
- color[2] = 1.0;
- color[3] = 0;
- m_MatColors.SetParam("ColorizationColor", color);
- }
- // EV check for NV optics
- static void SetEVValuePP(float value)
- {
- g_Game.SetEVValue(value);
- }
-
- // light multiplier and noise intensity (using filmgrainNV.emat!) for nvg
- // added other parameters for filmgrainNV.emat, sharpness and grain size
- static void SetNVParams(float light_mult, float noise_intensity, float sharpness, float grain_size)
- {
- Material matHDR = GetGame().GetWorld().GetMaterial("Graphics/Materials/postprocess/filmgrainNV");
- /*#ifdef PLATFORM_CONSOLE
- //worst-case scenario console fix!
- noise_intensity = 0.0;
- #endif*/
- g_Game.NightVissionLightParams(light_mult, noise_intensity);
- matHDR.SetParam("Sharpness", sharpness);
- matHDR.SetParam("GrainSize", grain_size);
- }
-
- // bloom PP, experimental stuff
- static void SetBloom(float thres, float steep, float inten)
- {
- m_MatColors.SetParam("BloomThreshold", thres);
- m_MatColors.SetParam("BloomSteepness", steep);
- m_MatColors.SetParam("BloomIntensity", inten);
- }
- static void ResetAll()
- {
- ResetBlurEffects();
- ResetColorEffects();
- ResetVignettes();
- ResetPPMask();
- ResetDOFOverride();
- ResetLensEffect();
- SetBloodSaturation(1);
- //RemoveUnconsciousnessVignette();
- ResetColorize();
- }
- };
|