public static void InitializeColorGrading(ColorGradingSetting settings, ref ColorGradingData data, ComputeShader lut3dShader) { data.settings = settings; data.enabledInUber = false; data.m_Pixels = new Color[k_Precision * 2]; data.m_InternalLogLut = null; data.m_GradingCurves = null; data.settings.hueVsHueCurve.value.Cache(Time.renderedFrameCount); data.settings.hueVsSatCurve.value.Cache(Time.renderedFrameCount); data.settings.satVsSatCurve.value.Cache(Time.renderedFrameCount); data.settings.lumVsSatCurve.value.Cache(Time.renderedFrameCount); data.kernel = lut3dShader.FindKernel("KGenLut3D_AcesTonemap"); }
public void Load(UnityEngine.Rendering.PostProcessing.ColorGrading layer) { if (layer != null) { enabled.Fill(layer.enabled); layer.active = layer.enabled.value; gradingMode.Fill(layer.gradingMode); mixerGreenOutGreenIn.Fill(layer.mixerGreenOutGreenIn); mixerGreenOutBlueIn.Fill(layer.mixerGreenOutBlueIn); mixerBlueOutRedIn.Fill(layer.mixerBlueOutRedIn); mixerBlueOutGreenIn.Fill(layer.mixerBlueOutGreenIn); mixerBlueOutBlueIn.Fill(layer.mixerBlueOutBlueIn); lift.Fill(layer.lift); gamma.Fill(layer.gamma); mixerGreenOutRedIn.Fill(layer.mixerGreenOutRedIn); gain.Fill(layer.gain); mixerRedOutBlueIn.Fill(layer.mixerRedOutBlueIn); mixerRedOutGreenIn.Fill(layer.mixerRedOutGreenIn); toneCurveToeStrength.Fill(layer.toneCurveToeStrength); toneCurveToeLength.Fill(layer.toneCurveToeLength); toneCurveShoulderStrength.Fill(layer.toneCurveShoulderStrength); toneCurveShoulderLength.Fill(layer.toneCurveShoulderLength); toneCurveShoulderAngle.Fill(layer.toneCurveShoulderAngle); toneCurveGamma.Fill(layer.toneCurveGamma); mixerRedOutRedIn.Fill(layer.mixerRedOutRedIn); tonemapper.Fill(layer.tonemapper); ldrLutContribution.Fill(layer.ldrLutContribution); tint.Fill(layer.tint); colorFilter.Fill(layer.colorFilter); hueShift.Fill(layer.hueShift); saturation.Fill(layer.saturation); brightness.Fill(layer.brightness); postExposure.Fill(layer.postExposure); contrast.Fill(layer.contrast); temperature.Fill(layer.temperature); layer.ldrLut.value = AIGraphics.Instance.PostProcessingManager.LoadLUT(ldrLutIndex.value); layer.ldrLut.overrideState = ldrLutIndex.overrideState; } }
public string externalLutPath; // Formerly Texture. public void Save(UnityEngine.Rendering.PostProcessing.ColorGrading layer) { if (layer != null) { enabled = new BoolValue(layer.enabled); gradingMode = new GradingModeValue(layer.gradingMode); mixerGreenOutGreenIn = new FloatValue(layer.mixerGreenOutGreenIn); mixerGreenOutBlueIn = new FloatValue(layer.mixerGreenOutBlueIn); mixerBlueOutRedIn = new FloatValue(layer.mixerBlueOutRedIn); mixerBlueOutGreenIn = new FloatValue(layer.mixerBlueOutGreenIn); mixerBlueOutBlueIn = new FloatValue(layer.mixerBlueOutBlueIn); lift = new Vector4Value(layer.lift); gamma = new Vector4Value(layer.gamma); mixerGreenOutRedIn = new FloatValue(layer.mixerGreenOutRedIn); gain = new Vector4Value(layer.gain); mixerRedOutBlueIn = new FloatValue(layer.mixerRedOutBlueIn); mixerRedOutGreenIn = new FloatValue(layer.mixerRedOutGreenIn); toneCurveToeStrength = new FloatValue(layer.toneCurveToeStrength); toneCurveToeLength = new FloatValue(layer.toneCurveToeLength); toneCurveShoulderStrength = new FloatValue(layer.toneCurveShoulderStrength); toneCurveShoulderLength = new FloatValue(layer.toneCurveShoulderLength); toneCurveShoulderAngle = new FloatValue(layer.toneCurveShoulderAngle); toneCurveGamma = new FloatValue(layer.toneCurveGamma); mixerRedOutRedIn = new FloatValue(layer.mixerRedOutRedIn); tonemapper = new TonemapperValue(layer.tonemapper); ldrLutContribution = new FloatValue(layer.ldrLutContribution); tint = new FloatValue(layer.tint); colorFilter = new ColorValue(layer.colorFilter); hueShift = new FloatValue(layer.hueShift); saturation = new FloatValue(layer.saturation); brightness = new FloatValue(layer.brightness); postExposure = new FloatValue(layer.postExposure); contrast = new FloatValue(layer.contrast); temperature = new FloatValue(layer.temperature); ldrLutIndex = new IntValue(AIGraphics.Instance.PostProcessingManager.CurrentLUTIndex, layer.ldrLut.overrideState); } }
internal static bool Prefix(ActiveEnvironment __instance, WeatherStateConfig wsA, WeatherStateConfig wsB, float weatherBlendFrac, TODBlendState todBlendState, float todBlendFrac, float todBlendBiased, bool isIndoors) { // if ((Time.frameCount % 50) == 0) { ColorGradingSettings settings1A = null; ColorGradingSettings settings1B = null; ColorGradingSettings settings2A = null; ColorGradingSettings settings2B = null; Traverse traverseA = Traverse.Create(__instance).Field("m_WorkA"); TODStateConfig m_WorkA = traverseA.GetValue <TODStateConfig>(); Traverse traverseB = Traverse.Create(__instance).Field("m_WorkB"); TODStateConfig m_WorkB = traverseB.GetValue <TODStateConfig>(); TODStateConfig[] wsA_TodStates = { wsA.m_NightColors, wsA.m_DawnColors, wsA.m_MorningColors, wsA.m_MiddayColors, wsA.m_AfternoonColors, wsA.m_DuskColors, wsA.m_NightColors, wsA.m_NightColors }; TODStateConfig[] wsB_TodStates = { wsB.m_NightColors, wsB.m_DawnColors, wsB.m_MorningColors, wsB.m_MiddayColors, wsB.m_AfternoonColors, wsB.m_DuskColors, wsB.m_NightColors, wsA.m_NightColors }; bool flagtoAdd = false; int[] nightstates = { 1, 0, 0, 0, 0, 2, 3 }; float[] keyangles = { Solstice_RV.dawndusk_angle, Solstice_RV.riseset_angle, Solstice_RV.mornaft_angle, Solstice_RV.getSunAngleAtUnitime(Mathf.Floor(Solstice_RV.unitime()) + 0.5f), Solstice_RV.mornaft_angle, Solstice_RV.riseset_angle, Solstice_RV.dawndusk_angle, Solstice_RV.getSunAngleAtUnitime(Mathf.Floor(Solstice_RV.unitime())) }; if (GameManager.GetUniStorm().m_NormalizedTime > 1f) { GameManager.GetUniStorm().SetNormalizedTime(GameManager.GetUniStorm().m_NormalizedTime - 1f); flagtoAdd = true; } todBlendState = GameManager.GetUniStorm().GetTODBlendState(); // Debug.Log(todBlendState); int itod = (int)todBlendState; string debugtext; float zenith = Solstice_RV.getSunAngleAtUnitime(Mathf.Floor(Solstice_RV.unitime()) + 0.5f); float nadir = Solstice_RV.getSunAngleAtUnitime(Mathf.Floor(Solstice_RV.unitime()) + 0.0f); float throughpcntzen; float throughpcntnad; TODStateConfig wsAStartblend; TODStateConfig wsAEndblend; TODStateConfig wsBStartblend; TODStateConfig wsBEndblend; TODStateConfig wsAZenblend; TODStateConfig wsANadblend; TODStateConfig wsBZenblend; TODStateConfig wsBNadblend; wsAStartblend = wsA_TodStates[itod]; wsAEndblend = wsA_TodStates[itod + 1]; wsBStartblend = wsB_TodStates[itod]; wsBEndblend = wsB_TodStates[itod + 1]; String namestartblend = Enum.GetNames(typeof(TODBlendState))[(int)todBlendState]; String nameendblend = Enum.GetNames(typeof(TODBlendState))[((int)todBlendState + 1) % 6]; float st_ang = keyangles[itod]; float en_ang = keyangles[itod + 1]; throughpcntzen = (zenith - st_ang) / (en_ang - st_ang); debugtext = Solstice_RV.gggtime(Solstice_RV.unitime()) + " " + Enum.GetNames(typeof(TODBlendState))[(int)todBlendState]; // do we need a new zen state if (throughpcntzen >= 0 && throughpcntzen <= 1) { if (itod == (int)TODBlendState.MorningToMidday)// need to correct against game zenith of 45 { throughpcntzen = Mathf.Clamp((zenith - st_ang) / (45f - st_ang), 0, 1); } if (itod == (int)TODBlendState.MiddayToAfternoon)// need to correct against game zenith of 45 { throughpcntzen = Mathf.Clamp((zenith - 45f) / (en_ang - 45f), 0, 1); } //debugtext += " mc:" + throughpcntzen; wsAZenblend = Solstice_RV.createNewMidPoint(wsA_TodStates[itod], wsA_TodStates[itod + 1], wsA_TodStates[6 - itod], wsA_TodStates[((5 - itod) % 8 + 8) % 8], throughpcntzen); wsBZenblend = Solstice_RV.createNewMidPoint(wsB_TodStates[itod], wsB_TodStates[itod + 1], wsB_TodStates[6 - itod], wsB_TodStates[((5 - itod) % 8 + 8) % 8], throughpcntzen); if (itod < 3) { en_ang = zenith; nameendblend = "Zen"; wsAEndblend = wsAZenblend; wsBEndblend = wsBZenblend; } else { st_ang = zenith; namestartblend = "Zen"; wsAStartblend = wsAZenblend; wsBStartblend = wsBZenblend; } } throughpcntnad = (nadir - st_ang) / (en_ang - st_ang); if (throughpcntnad >= 0 && throughpcntnad <= 1) { debugtext += " mc:" + throughpcntnad + "[" + itod + "][" + (itod + 1) + "][" + (6 - itod) + "][" + ((5 - itod) % 8 + 8) % 8 + "]"; wsANadblend = Solstice_RV.createNewMidPoint(wsA_TodStates[itod], wsA_TodStates[itod + 1], wsA_TodStates[6 - itod], wsA_TodStates[((5 - itod) % 8 + 8) % 8], throughpcntnad); wsBNadblend = Solstice_RV.createNewMidPoint(wsB_TodStates[itod], wsB_TodStates[itod + 1], wsB_TodStates[6 - itod], wsB_TodStates[((5 - itod) % 8 + 8) % 8], throughpcntnad); if (itod > 3) { en_ang = nadir; nameendblend = "Nad"; wsAEndblend = wsANadblend; wsBEndblend = wsBNadblend; } else { st_ang = nadir; namestartblend = "Nad"; wsAStartblend = wsANadblend; wsBStartblend = wsBNadblend; } } float newtodBlendFrac = (Solstice_RV.getSunAngleAtUnitime(Solstice_RV.unitime()) - st_ang) / (en_ang - st_ang); debugtext += "(" + namestartblend + ":" + nameendblend + ")"; debugtext += " s:" + st_ang + " e:" + en_ang + " c:" + string.Format("{0:0.00}", Solstice_RV.getSunAngleAtUnitime(Solstice_RV.unitime())) + " =:" + string.Format("{0:0.00}", newtodBlendFrac); m_WorkA.SetBlended(wsAStartblend, wsAEndblend, newtodBlendFrac, newtodBlendFrac, nightstates[itod]); m_WorkB.SetBlended(wsBStartblend, wsBEndblend, newtodBlendFrac, newtodBlendFrac, nightstates[itod]); settings1A = wsA_TodStates[(int)todBlendState].m_ColorGradingSettings; settings1B = wsA_TodStates[((int)todBlendState + 1) % 7].m_ColorGradingSettings; settings2A = wsB_TodStates[(int)todBlendState].m_ColorGradingSettings; settings2B = wsB_TodStates[((int)todBlendState + 1) % 7].m_ColorGradingSettings; __instance.m_TodState.SetBlended(m_WorkA, m_WorkB, weatherBlendFrac, weatherBlendFrac, 0); //if ((Time.frameCount % 1600) == 0) Debug.Log(debugtext); if (isIndoors) { __instance.m_TodState.SetIndoors(); } else { UnityEngine.Rendering.PostProcessing.ColorGrading colorGrading = GameManager.GetCameraEffects().ColorGrading(); if (colorGrading != null) { //if ((Time.frameCount % 50) == 0) Debug.Log("[A"+ (int)todBlendState + "][A"+ ((int)todBlendState + 1) % 7 + "[B" + (int)todBlendState + "][B" + ((int)todBlendState + 1) % 7 + "],"+ newtodBlendFrac + ","+ weatherBlendFrac); colorGrading.UpdateLutForTimeOfDay(settings1A, settings1B, settings2A, settings2B, newtodBlendFrac, newtodBlendFrac, weatherBlendFrac); //colorGrading.UpdateLutForTimeOfDay(wsA.m_DawnColors.m_ColorGradingSettings, wsA.m_MorningColors.m_ColorGradingSettings, wsB.m_DawnColors.m_ColorGradingSettings, wsB.m_MorningColors.m_ColorGradingSettings, 0.5f,0.5f, 0.5f); } } __instance.m_GrassTintScalar = Mathf.Lerp(wsA.m_GrassTintScalar, wsB.m_GrassTintScalar, weatherBlendFrac); if (flagtoAdd) { GameManager.GetUniStorm().SetNormalizedTime(GameManager.GetUniStorm().m_NormalizedTime + 1f); } return(false); } }