From 7e2bc1d2beaea34ac3b95f395030ca483f453567 Mon Sep 17 00:00:00 2001 From: aedenthorn Date: Tue, 26 May 2020 10:49:59 -0400 Subject: [PATCH] post processing --- .vs/PortiaMods/v16/.suo | Bin 994304 -> 1019904 bytes Environment/Main.cs | 134 +------- Environment/Patches.cs | 81 ----- Environment/Settings.cs | 40 +++ PortiaMods.sln | 6 + PostProcessing/Main.cs | 454 +++++++++++++++++++++++++++ PostProcessing/Patches.cs | 203 ++++++++++++ PostProcessing/PostProcessing.csproj | 96 ++++++ PostProcessing/Settings.cs | 77 +++++ repository.json | 3 +- 10 files changed, 883 insertions(+), 211 deletions(-) create mode 100644 PostProcessing/Main.cs create mode 100644 PostProcessing/Patches.cs create mode 100644 PostProcessing/PostProcessing.csproj create mode 100644 PostProcessing/Settings.cs diff --git a/.vs/PortiaMods/v16/.suo b/.vs/PortiaMods/v16/.suo index ced90defc800d75cd35119b7f2ec7858490282b6..2a27dc9024a55575a1facf1d41ab72642c0ad99e 100644 GIT binary patch delta 14209 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 delta 10742 zcmdT~3tUxIx<6~P&tY#KXCD#qq(?gv9;XP*6}_^6;&Ynd6ub zILr9V93yfLW{x3v-E*rkDrahX%(bq!rp6p{=w*$U94oWZ`(Jw>(&qJR?(KK)@9z4u z*Is+=Z++`~t#5tD`sUR7-=#F9Bvo2076rI^?b2_UVJx0HfbzG-yF2Xc(=t8W;6=@ z1LuRyuNxbe8$y1mtVIZU4c>W#khAy;S`5D=Wh)qEsE<$YAI8pMppa#mf)TV2#p9085)`Oml_dV3yla0H)=#Yi%V$4Y?*(>c%cz-7aF+@SRm}T zu~`WXfw_rcOVQ~T7TVY>XBXo^$fX4L3P60Bk9#?A3m{DME+vtET~e792mt5gB&aCT^*^h=U9h31tXFp`2mNEr^XyN zDC{sOz|2P67sWtP0s;UTumUz95KsWIULG~6l6K3s@DTA7)7yJ&(kWKT@16WZgMZ#O zxvC>F{em_8?~!m0#g{(>qWu(x_fk4M>326!>S&vs9nx}E;`Mecd(N5AI*cN*yk=2J8`ypTR^L4gH@HkWAR|XF6h+1~W>Rob)J;*;@axH|z ziSO72Lb#5}L}o|web zqaRXuTK}=_l^dAj)Vy4N`hhR20=j>*L+>8I(SOcsD)&c8*4ZudA4yb4R>WC;FRRCx4Jj=XIHP+7|ownGE|Fo%& zh45OskJm4CaaT`_{GZ@XIB`c!&vqt6-Pj!6XBSq{05k$#fUvf{>K?Qn07Qs*ka=6e z2M9q2qDKK#fcuwv(!yg~QlnDQH3%3C+zhyZAwVQ>3lIhHhL&hHlK*SV$aq051zooT znZS79D^N_sJsrpZZUZI)LZDaqO^@7~kb|cgz)WBkkPFNP<^XendBA)i4_E*!4CE^x z+18RPd41VNw0oRUS`xd3&J=4A9b@-A&%EPmjKDWdf#i(9`VWGibr{?vmw)l#^PxWY zh44|;5@gxM(|$T^)a3H&nu7A0w8b?g73I}=*`;_WDPNjiu{yV;XjM_wU1^1dSw*!q zRV78`HFsqf)GRKhk?$(ET1UmlBqZ`bornvcT~tt6QGRDdVV>EVTvJqLj0s7Oiy4)? zequpsby2C9?Pd&^is@km7AsIZZ2pCXQ@ZCn?}UizDDAH9e6Gp$by=#%^VHJ8UmrN6Rn ztjBqOj;A#{D*d+dx%WS@wLIC1@i-*^hXJ_D zK!@YyL>3|3LtHb_GYb&T21lFs%EZX+cw7c72TFl5pd6?GDuER;fA*EwK^xHA2-E@f zz_$!b7*$O0n3z#XrcIRzn^M0qKT7RZ66NHW#CTzrj+s?O1=Y1xML9()iwa7Ms<`Jw zTyRoCOq}`ga`CY;xqM|oH7wuwme)V2vU2|L6NUDK_%Si@@$u%+73fOR$9F4ftmz%4 z-oFp=)rY4l-B{syz_5@@ho`AbtiRW0taiK-Th$aJv;5dUFl3jpZ{Z17%d=AZsj191 z3uY8=;W@7!X+K%R*k`=Suk)ouLkGnx#flt zo65h~JB?1>$zqtwYah%~**Q>oS5Si0hZu>cpo`1f?HVRj{1Yf<8*m@682vkN7g2B* z?hQaAu$52f9+|Kot%rbS;9;Nzcmy~A{0tEBs1-N}JPI6=JAB>qnD@7r{I2FgIP7(` zNqka3jBPC@I`K4L+csIXe2Df1Kyd2SWq!GBim8C!ErZt|m-*_WQ+P%|ybbi>mHf(c zzfsv4w9op#>gzw*ExhWg&=9bdDz{u|LvVSg}u-V~n1 z&KXbN5?lLgmjbL85vUjPFYdoXH4-3^_z13hx4zent?zYgeI2!LjFG-u0?~2i%_zxx zFhga31iAP8Bv}uyJvfb@)Z&=JKRq~25xRW8_oa>3K5CwGKJa(deG1luY{VtZN~riR z0X2N9|9edOc(r%X4T;{F;=o6;-?e!^Mrze_Ho*1&X}@Us%pS4{k`kHHJ-AbdjeVsC zLwLW!Qx5eBWbX%hge;jwXHq~b)4TGO<1%Hfm*-IaB6WcNTRTg*$)^NJzG&v~1qCQR z4~y`H1;|vtl$B8F0xd$Xo5${E)DjU8tHe zYPN~_7O{wqbJvasP)`)QgG--BkS9-z)ic+#r>w1E!z9VKnaQnP)w1N<#w1?@u#-uY zvtM%S?x=t+E4BBxquIo|LR;Hs%Mx8w1H&nQsWwM1^|9Rnt?hI1?O`^cwSB%U88b8t z)8h1rFR&*<_4Z$>gM;^^tPDzRv=r_S2VG zu;D2X5ib3i#S)WoB#Govnv0)^u_+>L5K&b)Pe)C|cBUsB3_c)<#r=XH%op|ia9eaB zRl1d#l-(i?pr>>x(|fSSaEm&_CF;O}@B-mAB7_K9!8dpT4T%pPMLjK2gg)sB=@*)5 zk2n@xJj3+JtRP9&rPrma0Z_N^J;~*h10+5DUgaRuD}&g_0s3w=p!Bj&hNN1WLWk=; zJ)x_u1~2+ks+@^8R!M*DZR<9h-dPg(F(da)f#>!7P;2ugpKO!vzsN>Y>`FDNsXSPr z?Sojh-d-AcH6k;t=CA%NiagP5I(gP91E?WSwbK{xD9=+> zrIbQXbt#$T`H{Vo!bZ!RboUf_BPe$%OK9jHF*@$|$^mNrKym1a?Kz>XKb)_47N1Jhe&9yZ0Vd5C+zZRq7R)LCJg=Gn9 zZf?Eqf^xUy8!87K|3pzG9wYU!R%57>UTtMg96KW>qD)t9nFJdWNwATJ-l}K)S-BXX zdoC-Ttkv_m!l>^E7Ea+;l*G^;bBvL%7E|LDC7TsdV}!lG!Sc!*dqT@Vy9Bk4SZs;a zbn}-=?x=Bb_-|c8Mp|-0W>Wfyq@;{dBN7ucCyW?7IxT)gQs%_5V=~f4k4YGvwqgB@ znu@A|rA1Va4>8H~3F@#QvGex@3swvDOjM6aPcq+E%5dK{yL5cG`l5sKQq&Y$k*Z#a zyiOpke9fxjqN<`iKf&H-nx3l0Y1QT|1^z)|nmGFTG*w~asqqUXnlJmQL%Fk{q&#+U z_4OWE^ia=KbzVPL}zSgDB2#hGCSy#iR#_@V`-|yA|C%{ zgr)O1+9Em4eB2m8J5tq)Bc4KsdG$Q~CK?rhNPEO~B(6$B&v}+?+^hIA5pI#;bkSQ4 zs)HOkYTMMz|Awr4Me|RH>cEfGf1&Xc)uUNYv;T!De{N5txs%{uP=B`WnXJ}J^zfbP zPlx)|sY7600|^;sM%s0Ii0l+~qtQU-lmCQBeM4ba z7wG76b(V;%GPUKPZj=82OC-l^HLodOvQu#`a%Fj)nn=&i7Oh-0S8RQDS}Ptm&sUq- zuj!L}0!qkJrF!VAfl>&S&sQVZ>wLxM6;$~OTLSy*OV{S8Z_}w&YBS~UWn0iSm4+-( z@1_HJYCT1XKZ#?s95WWbe!m)SJ&M&_qN70p8|dmuwvyWJQf*Xtzq*hb7OF8+xJXN( z<}emPJsWLq3SX!WrrpJA4zK*oO}kgA$t;ZG$7r*txe&ac^Qs2zs8A!afOH4opjTI^ zA5!yTHHP^NcH^dClKMsJXtvK>)UxMT0+@9PW@j~3O5v1UpgQSvAs9Yaq8=0ySVpPk znv<3dlAIWtK#j%fQPytIYkQHU)6QZLomr%ArDMz0y=;$3xqi8t$hKhAblQKfI+(|8 zh#<#ujO;E`chb%*CTfhopgxuA23l01wo^;F+9_V1@YAk*4YbdesW$dIL2(Afbu%}u zoQrzz%cU^)u8~?ev(g{D(5|t?mE|xy(x!H-{HbqLHb=;GCN-~6N0T(jo+CER6w0hs z_pml|2`@1ZrPhM6#7z*QBh?y4D{CMFC@qIV&f~FU35x);HNRvCHLgAV5R>-|DD)Ol(hrh>su5^J4lF6xQ3>K#IY zn0_sEwt* z#g3RF$SPN(sLhQO$Fl+ve28f@+0R>Dl)D51tf1*dSd=478Nd%$Mo{b~uxGH`JQWk| zzFT#&W|Nd*1Rp{c(; znf7m0U36)YHj_LXRTq!jH58*oWbm(d_#-S6EZj~*^2D-)HcxE9C&u&*Kd?sd_xA{8 z&ZeVj@E$QGwfzMA88Kk^eWqG-sCk>3%PjQFJa&!jJ57}((v|IaZ>-ml`=S1tgLzF8 z6e8t+nlIL0C1g6ADtF0FirEjHcismA#%G6j!50r0hUea;j-&9M>OP^!O?0dd#&oEi z%>jW}gE_eRV5+!76-JHIm!;Worp_f=GCkGb?lgWZ3==N?5O>e3!k}6VGFUF5LyK7x zo!u>T$)kIbbnIte!Y zYr5vLH=5tHHOK?#g3BJx4wzPa=y5g4yR`#?DvUKbX_WmlseQN zA~pr|2~*m93%K$|+IO0)#T^KA)5b{j86Fe&q3kAugP9^omeKm{_DrgZh2g`T-1K6w zHi;mzW&BY6eyI7dX@f?Fd~g>Q14Dode-s!&QFvrNljHN9Oq7$wPaY>kk3SNg*kR8$ zg?mZEqFrXNKfeq1wvF2(O+g7WbXww==64=y2hxE5^+#0ZV>fN=K0x4FXnU$Rv4^w(_Q zMc5~G)w7jYg81>TL6Dq9u6~-wbP2=jAMLPHXE^vV{L~00Aud?O^%%Eppyp(e{zYzN z$so536imsb9r=IE5!eEhNuXQ*zgc#8RJ^vnAxlwZQvUPTf9;D5q*axwz?r~}1 zV%p875{diPR(Hzb&)U;2H;bZ*g?$tq?nb`=4#6+Ynd8EDZ{lG2 zXV|i#@%oY4YGFxFh&W;F8j<7{hGm3MC~Ua7Qy*Hv;-Kp~V=}(~o-i6Y%b5NMHO6aC zn}gzpYa!Gy3f~yMX&VIr7=p$&DmU$bYn@0ym+5`IT}KkJ7Ng53AbfbQ;Wb6yOvFcS z60z@)h!{UHMJa?$u}dM6*fFq$*Z+o@BvZp^sQEyiSd`eiK58}C9cOM!B6AQP<)q#5 z+A>-;PRn6O46m)c%2F|%Oa=EN&Wn>UC66@~Y3#NMep4Q#DSFr^(mCn)+j3N}ZcCT1 z%-tdfZIOew$RS(gP&#y*Hk85(AxisgTDmEb^S6T%GM^ljMzMtQ5*9;kw_^z+Wmur6 zKPP?0^oFp2-AwQKqZ}t2r)K^MP8hlDF1%W*MYwAYv<2;>m;2>(UA3s z{IQ`hz)3KjNV;5&lvOb!KvyNQg+t@9L?bjI<#5yGR4uycoYHyye6Hhs?vX?(n|r?; zK;y=Ps1f54cEi~lBE-%ncbOJJhZZuC66~k=O;E-4MEjvy!$j85t7Y2!zjwTUS)$hx zq%eMdS47hhgHDpEQX>du?<;4c0y#@`Zb*rFF@5IXW_1xMa574hq#QH?O_1c~3huJ9M7gsgw&to0p> z3$iFK{EY&|xlu?AlgFqp(7tKvP2X3cAqGcC@vjNK=R!jne&zh;1l(I_a0jC@^X;0+ z|6w8EnCl;%`OPXp(myOR{gZ`{-qU?Z?~%Sbud?EA)CPuRse{B3|As1naoT6htO4*_ zC3Wt9^Su8ZZSb#46BE>%$&-QOr>GU_s1?OAy0{+a#GYFM9h7(%LZxx!I8~1nxcmtg zO$!%^T%}Irg(7@b6==C)D^4+fd*i2@V~pQQxcqR6;{VCb!Y4hPEPig|!}~_iiCUys zD>Bu7f6Yv2hMrQavbp#pa<;6%T_w*)g zQ$_B+(8y765;ap#R3O5{KVWeA=PcHWMMhpuu|8wFPZ1}}GFrP#OF;d@NG;u)nK=6_ zg`00TNE^98OettUDl^SfXvKP@yUTmiOXE!7T#kIQ()a?0G6%g?4mqAK(+-H#ErniF hq2&v=1cvFqyH5)XVDFoICvr-++FN6JQ|x$2{{?lq24?^O diff --git a/Environment/Main.cs b/Environment/Main.cs index 2f37615..dad8fef 100644 --- a/Environment/Main.cs +++ b/Environment/Main.cs @@ -17,6 +17,11 @@ public static partial class Main private static bool isDebug = false; private static float labelWidth = 80f; private static float indentSpace = 30f; + private static string[] toneMappers = new string[] { + "None", + "ACES", + "Neutral" + }; public static void Dbgl(string str = "", bool pref = true) { @@ -63,8 +68,6 @@ private static void OnGUI(UnityModManager.ModEntry modEntry) GUILayout.EndHorizontal(); GUILayout.Space(20f); - GUILayout.Space(20f); - settings.colorsShow = GUILayout.Toggle(settings.colorsShow, $"Color Variables", new GUILayoutOption[0]); GUILayout.Space(10f); if (settings.colorsShow) @@ -131,133 +134,6 @@ private static void OnGUI(UnityModManager.ModEntry modEntry) GUILayout.EndHorizontal(); } - settings.processingShow = GUILayout.Toggle(settings.processingShow, $"PostProcessing Variables", new GUILayoutOption[0]); - if (settings.processingShow) - { - GUILayout.Space(10f); - GUILayout.BeginHorizontal(); - GUILayout.Space(indentSpace); - GUILayout.BeginVertical(); - settings.customVignette = GUILayout.Toggle(settings.customVignette, $"Use Custom Vignette", new GUILayoutOption[0]); - if (settings.customVignette) - { - GUILayout.Space(10f); - GUILayout.BeginHorizontal(); - GUILayout.Space(indentSpace); - GUILayout.BeginVertical(); - - GUILayout.Label("Color", new GUILayoutOption[0]); - - GUILayout.BeginHorizontal(); - GUILayout.Space(indentSpace); - GUILayout.BeginVertical(); - - GUILayout.Label(string.Format("Red: {0:F2} ", settings.vignetteColorRed), new GUILayoutOption[] { GUILayout.Width(labelWidth) }); - settings.vignetteColorRed = GUILayout.HorizontalSlider((float)settings.vignetteColorRed * 100f, 0, 100f) / 100f; - GUILayout.Label(string.Format("Green: {0:F2} ", settings.vignetteColorRed), new GUILayoutOption[] { GUILayout.Width(labelWidth) }); - settings.vignetteColorGreen = GUILayout.HorizontalSlider((float)settings.vignetteColorGreen * 100f, 0, 100f) / 100f; - GUILayout.Label(string.Format("Blue: {0:F2} ", settings.vignetteColorBlue), new GUILayoutOption[] { GUILayout.Width(labelWidth) }); - settings.vignetteColorBlue = GUILayout.HorizontalSlider((float)settings.vignetteColorBlue * 100f, 0, 100f) / 100f; - GUILayout.Label(string.Format("Alpha: {0:F2} ", settings.vignetteColorAlpha), new GUILayoutOption[] { GUILayout.Width(labelWidth) }); - settings.vignetteColorAlpha = GUILayout.HorizontalSlider((float)settings.vignetteColorAlpha * 100f, 0, 100f) / 100f; - GUILayout.EndVertical(); - GUILayout.EndHorizontal(); - - GUILayout.Space(10f); - - - GUILayout.Label("Center", new GUILayoutOption[0]); - - GUILayout.BeginHorizontal(); - GUILayout.Space(indentSpace); - GUILayout.BeginVertical(); - - GUILayout.Label(string.Format("X: {0:F2} ", settings.vignetteX), new GUILayoutOption[] { GUILayout.Width(labelWidth) }); - settings.vignetteX = GUILayout.HorizontalSlider((float)settings.vignetteX * 100f, 0, 100f) / 100f; - GUILayout.Label(string.Format("Y: {0:F2} ", settings.vignetteY), new GUILayoutOption[] { GUILayout.Width(labelWidth) }); - settings.vignetteY = GUILayout.HorizontalSlider((float)settings.vignetteY * 100f, 0, 100f) / 100f; - GUILayout.EndVertical(); - GUILayout.EndHorizontal(); - - - GUILayout.Space(10f); - - GUILayout.Label(string.Format("Intensity {0:F2} ", settings.vignetteIntensity), new GUILayoutOption[0]); - settings.vignetteIntensity = GUILayout.HorizontalSlider((float)settings.vignetteIntensity * 100f, 0, 100f) / 100f; - - GUILayout.Space(10f); - - - GUILayout.Label(string.Format("Smoothness {0:F2} ", settings.vignetteSmoothness), new GUILayoutOption[0]); - settings.vignetteSmoothness = GUILayout.HorizontalSlider((float)settings.vignetteSmoothness * 100f, 1, 100f) / 100f; - - GUILayout.Space(10f); - - - GUILayout.Label(string.Format("Roundness {0:F2} ", settings.vignetteRoundness), new GUILayoutOption[0]); - settings.vignetteRoundness = GUILayout.HorizontalSlider((float)settings.vignetteRoundness * 100f, 0, 100f) / 100f; - - GUILayout.Space(10f); - - settings.vignetteRounded = GUILayout.Toggle(settings.vignetteRounded, "Force round vignette", new GUILayoutOption[0]); - - GUILayout.EndVertical(); - GUILayout.EndHorizontal(); - - } - GUILayout.Space(10f); - settings.customBloom = GUILayout.Toggle(settings.customBloom, "Use Custom Bloom", new GUILayoutOption[0]); - if (settings.customBloom) - { - GUILayout.Space(10f); - GUILayout.BeginHorizontal(); - GUILayout.Space(indentSpace); - GUILayout.BeginVertical(); - - GUILayout.Label(string.Format("Intensity {0:F2} ", settings.bloomIntensity), new GUILayoutOption[0]); - settings.bloomIntensity = GUILayout.HorizontalSlider((float)settings.bloomIntensity * 100f, 0, 1000f) / 100f; - - GUILayout.Space(10f); - - - GUILayout.Label(string.Format("Threshold {0:F2} ", settings.bloomThreshold), new GUILayoutOption[0]); - settings.bloomThreshold = GUILayout.HorizontalSlider((float)settings.bloomThreshold * 100f, 0, 1000f) / 100f; - - GUILayout.Space(10f); - - - GUILayout.Label(string.Format("Soft Knee {0:F2} ", settings.bloomSoftKnee), new GUILayoutOption[0]); - settings.bloomSoftKnee = GUILayout.HorizontalSlider((float)settings.bloomSoftKnee * 100f, 0, 100f) / 100f; - - GUILayout.Space(10f); - - - GUILayout.Label(string.Format("Radius {0:F2} ", settings.bloomRadius), new GUILayoutOption[0]); - settings.bloomRadius = GUILayout.HorizontalSlider((float)settings.bloomRadius * 10f, 10, 70f) / 10f; - - GUILayout.Space(10f); - - - GUILayout.Label(string.Format("Lens Dirt Intensity {0:F2} ", settings.bloomLensDirtIntensity), new GUILayoutOption[0]); - settings.bloomLensDirtIntensity = GUILayout.HorizontalSlider((float)settings.bloomLensDirtIntensity * 100f, 0, 1000f) / 100f; - - GUILayout.Space(10f); - - - settings.bloomAntiFlicker = GUILayout.Toggle(settings.bloomAntiFlicker, "Anti-flicker", new GUILayoutOption[0]); - - GUILayout.Space(10f); - GUILayout.EndVertical(); - GUILayout.EndHorizontal(); - - } - - GUILayout.Space(10f); - - GUILayout.EndVertical(); - GUILayout.EndHorizontal(); - - } GUILayout.Space(20f); } diff --git a/Environment/Patches.cs b/Environment/Patches.cs index d7ecb35..470b634 100644 --- a/Environment/Patches.cs +++ b/Environment/Patches.cs @@ -255,86 +255,5 @@ static void Prefix(ref Sky __instance) } } - private static bool defaultPostProcessingSet = false; - private static VignetteModel.Settings defaultVignetteSettings; - private static BloomModel.Settings defaultBloomSettings; - - [HarmonyPatch(typeof(PostProcessingBehaviour), "OnEnable")] - static class PostProcessingBehaviour_OnEnable_Patch - { - - static void Prefix(PostProcessingBehaviour __instance) - { - if(__instance.profile != null && !defaultPostProcessingSet) - { - defaultVignetteSettings = __instance.profile.vignette.settings; - defaultBloomSettings = __instance.profile.bloom.settings; - defaultPostProcessingSet = true; - } - else - { - defaultVignetteSettings = VignetteModel.Settings.defaultSettings; - defaultBloomSettings = BloomModel.Settings.defaultSettings; - } - } - } - - [HarmonyPatch(typeof(PostProcessingBehaviour), "OnPreCull")] - static class PostProcessingBehaviour_OnPreCull_Patch - { - static void Postfix(PostProcessingBehaviour __instance, PostProcessingContext ___m_Context, ref VignetteComponent ___m_Vignette, ref BloomComponent ___m_Bloom) - { - PostProcessingContext postProcessingContext = ___m_Context; - - if (enabled && settings.customVignette) - { - - VignetteModel.Settings vSettings = new VignetteModel.Settings - { - mode = VignetteModel.Mode.Classic, - intensity = settings.vignetteIntensity, - color = new Color(settings.vignetteColorRed, settings.vignetteColorGreen, settings.vignetteColorBlue, settings.vignetteColorAlpha), - center = new Vector2(settings.vignetteX,settings.vignetteY), - smoothness = settings.vignetteSmoothness, - roundness = settings.vignetteRoundness, - rounded = settings.vignetteRounded - }; - ___m_Vignette.model.settings = vSettings; - } - else - { - ___m_Vignette.model.settings = defaultVignetteSettings; - } - - if (enabled && settings.customBloom) - { - BloomModel.BloomSettings bbSettings = new BloomModel.BloomSettings - { - intensity = settings.bloomIntensity, - threshold = settings.bloomThreshold, - softKnee = settings.bloomSoftKnee, - radius = settings.bloomRadius, - antiFlicker = settings.bloomAntiFlicker - }; - - BloomModel.LensDirtSettings blSettings = new BloomModel.LensDirtSettings - { - texture = ___m_Bloom.model.settings.lensDirt.texture, - intensity = settings.bloomLensDirtIntensity - }; - BloomModel.Settings bSettings = new BloomModel.Settings - { - bloom = bbSettings, - lensDirt = blSettings - }; - - ___m_Bloom.model.settings = bSettings; - } - else - { - ___m_Bloom.model.settings = defaultBloomSettings; - } - } - } } } diff --git a/Environment/Settings.cs b/Environment/Settings.cs index 170330d..fe34963 100644 --- a/Environment/Settings.cs +++ b/Environment/Settings.cs @@ -484,6 +484,9 @@ public class Settings : UnityModManager.ModSettings public bool customVignette = false; public bool customBloom = false; + public bool customEyeAdapt = false; + public bool customMotionBlur = false; + public bool customColorGrading = false; public float vignetteColorRed = 0f; public float vignetteColorGreen = 0f; @@ -504,6 +507,43 @@ public class Settings : UnityModManager.ModSettings public bool bloomAntiFlicker = false; public float bloomLensDirtIntensity = 3f; + public float eyeAdaptLowPercent = 45f; + public float eyeAdaptHighPercent = 95f; + public float eyeAdaptMinLuminance = -5f; + public float eyeAdaptMaxLuminance = 1f; + public float eyeAdaptKeyValue = 0.25f; + public bool eyeAdaptDynamicKeyValue = true; + public bool eyeAdaptAdaptationFixed = false; + public float eyeAdaptSpeedUp = 2f; + public float eyeAdaptSpeedDown = 1f; + public int eyeAdaptLogMin = -8; + public int eyeAdaptLogMax = 4; + + public float motionBlurShutterAngle = 270f; + public int motionBlurSampleCount = 10; + public float motionBlurFrameBlending = 0f; + + public float depthOfFieldFocusDistance = 10f; + public float depthOfFieldAperture = 5.6f; + public float depthOfFieldFocalLength = 50f; + public bool depthOfFieldUseCameraFov = false; + public int depthOfFieldKernelSize = 1; + + public int colorGradingTonemapper = 2; + public float colorGradingNeutralBlackIn = 0.02f; + public float colorGradingNeutralWhiteIn = 10f; + public float colorGradingNeutralBlackOut = 0f; + public float colorGradingNeutralWhiteOut = 10f; + public float colorGradingNeutralWhiteLevel = 5.3f; + public float colorGradingNeutralWhiteClip = 10f; + + public float colorGradingPostExposure = 0f; + public float colorGradingTemperature = 0f; + public float colorGradingTint = 0f; + public float colorGradingHueShift = 0f; + public float colorGradingSaturation = 1f; + public float colorGradingContrast = 1f; + public string ToggleKey = "page up"; public override void Save(UnityModManager.ModEntry modEntry) diff --git a/PortiaMods.sln b/PortiaMods.sln index eaac40c..a7401e0 100644 --- a/PortiaMods.sln +++ b/PortiaMods.sln @@ -79,6 +79,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CustomMerch", "CustomMerch\ EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenDungeons", "OpenDungeons\OpenDungeons.csproj", "{EE0D6BD7-1FA5-46E5-AF10-E4225E88BE3A}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PostProcessing", "PostProcessing\PostProcessing.csproj", "{5AD3331E-8F85-4E91-96F0-C65972137ADA}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -237,6 +239,10 @@ Global {EE0D6BD7-1FA5-46E5-AF10-E4225E88BE3A}.Debug|Any CPU.Build.0 = Debug|Any CPU {EE0D6BD7-1FA5-46E5-AF10-E4225E88BE3A}.Release|Any CPU.ActiveCfg = Release|Any CPU {EE0D6BD7-1FA5-46E5-AF10-E4225E88BE3A}.Release|Any CPU.Build.0 = Release|Any CPU + {5AD3331E-8F85-4E91-96F0-C65972137ADA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5AD3331E-8F85-4E91-96F0-C65972137ADA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5AD3331E-8F85-4E91-96F0-C65972137ADA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5AD3331E-8F85-4E91-96F0-C65972137ADA}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/PostProcessing/Main.cs b/PostProcessing/Main.cs new file mode 100644 index 0000000..b2baab6 --- /dev/null +++ b/PostProcessing/Main.cs @@ -0,0 +1,454 @@ +using Harmony12; +using NovaEnv; +using Pathea.WeatherNs; +using System; +using System.Collections.Generic; +using System.Reflection; +using UnityEngine; +using UnityEngine.SceneManagement; +using UnityModManagerNet; + +namespace PostProcessing +{ + public static partial class Main + { + private static Settings settings; + private static bool enabled; + private static bool isDebug = false; + private static float labelWidth = 80f; + private static float indentSpace = 30f; + private static string[] toneMappers = new string[] { + "None", + "ACES", + "Neutral" + }; + + private static string[] kernelSizes = new string[] { + "Small", + "Medium", + "Large", + "Very Large" + }; + + public static void Dbgl(string str = "", bool pref = true) + { + if (isDebug) + UnityEngine.Debug.Log((pref ? "Post Processing " : "") + str); + } + private static void Load(UnityModManager.ModEntry modEntry) + { + settings = Settings.Load(modEntry); + + modEntry.OnToggle = OnToggle; + modEntry.OnGUI = OnGUI; + modEntry.OnSaveGUI = OnSaveGUI; + + modEntry.OnUpdate = OnUpdate; + + var harmony = HarmonyInstance.Create(modEntry.Info.Id); + harmony.PatchAll(Assembly.GetExecutingAssembly()); + + } + + static void OnUpdate(UnityModManager.ModEntry modEntry, float dt) + { + if (Input.GetKeyDown(settings.ToggleKey)) + { + modEntry.OnToggle(modEntry, !enabled); + } + } + + private static void OnSaveGUI(UnityModManager.ModEntry modEntry) + { + settings.Save(modEntry); + } + + private static void OnGUI(UnityModManager.ModEntry modEntry) + { + GUILayout.BeginHorizontal(); + GUILayout.Label(string.Format("Toggle Hotkey:"), new GUILayoutOption[] { GUILayout.Width(labelWidth * 2) }); + settings.ToggleKey = GUILayout.TextField(settings.ToggleKey, new GUILayoutOption[] { GUILayout.Width(labelWidth * 2) }); + GUILayout.EndHorizontal(); + GUILayout.Space(20f); + + GUILayout.BeginHorizontal(); + GUILayout.Space(indentSpace); + GUILayout.BeginVertical(); + settings.customVignette = GUILayout.Toggle(settings.customVignette, $"Use Custom Vignette", new GUILayoutOption[0]); + if (settings.customVignette) + { + GUILayout.Space(10f); + GUILayout.BeginHorizontal(); + GUILayout.Space(indentSpace); + GUILayout.BeginVertical(); + + GUILayout.Label("Color", new GUILayoutOption[0]); + + GUILayout.BeginHorizontal(); + GUILayout.Space(indentSpace); + GUILayout.BeginVertical(); + + GUILayout.Label(string.Format("Red: {0:F2} ", settings.vignetteColorRed), new GUILayoutOption[] { GUILayout.Width(labelWidth) }); + settings.vignetteColorRed = GUILayout.HorizontalSlider((float)settings.vignetteColorRed * 100f, 0, 100f) / 100f; + GUILayout.Label(string.Format("Green: {0:F2} ", settings.vignetteColorRed), new GUILayoutOption[] { GUILayout.Width(labelWidth) }); + settings.vignetteColorGreen = GUILayout.HorizontalSlider((float)settings.vignetteColorGreen * 100f, 0, 100f) / 100f; + GUILayout.Label(string.Format("Blue: {0:F2} ", settings.vignetteColorBlue), new GUILayoutOption[] { GUILayout.Width(labelWidth) }); + settings.vignetteColorBlue = GUILayout.HorizontalSlider((float)settings.vignetteColorBlue * 100f, 0, 100f) / 100f; + GUILayout.Label(string.Format("Alpha: {0:F2} ", settings.vignetteColorAlpha), new GUILayoutOption[] { GUILayout.Width(labelWidth) }); + settings.vignetteColorAlpha = GUILayout.HorizontalSlider((float)settings.vignetteColorAlpha * 100f, 0, 100f) / 100f; + GUILayout.EndVertical(); + GUILayout.EndHorizontal(); + + GUILayout.Space(10f); + + + GUILayout.Label("Center", new GUILayoutOption[0]); + + GUILayout.BeginHorizontal(); + GUILayout.Space(indentSpace); + GUILayout.BeginVertical(); + + GUILayout.Label(string.Format("X: {0:F2} ", settings.vignetteX), new GUILayoutOption[] { GUILayout.Width(labelWidth) }); + settings.vignetteX = GUILayout.HorizontalSlider((float)settings.vignetteX * 100f, 0, 100f) / 100f; + GUILayout.Label(string.Format("Y: {0:F2} ", settings.vignetteY), new GUILayoutOption[] { GUILayout.Width(labelWidth) }); + settings.vignetteY = GUILayout.HorizontalSlider((float)settings.vignetteY * 100f, 0, 100f) / 100f; + GUILayout.EndVertical(); + GUILayout.EndHorizontal(); + + + GUILayout.Space(10f); + + GUILayout.Label(string.Format("Intensity {0:F2} ", settings.vignetteIntensity), new GUILayoutOption[0]); + settings.vignetteIntensity = GUILayout.HorizontalSlider((float)settings.vignetteIntensity * 100f, 0, 100f) / 100f; + + GUILayout.Space(10f); + + + GUILayout.Label(string.Format("Smoothness {0:F2} ", settings.vignetteSmoothness), new GUILayoutOption[0]); + settings.vignetteSmoothness = GUILayout.HorizontalSlider((float)settings.vignetteSmoothness * 100f, 1, 100f) / 100f; + + GUILayout.Space(10f); + + + GUILayout.Label(string.Format("Roundness {0:F2} ", settings.vignetteRoundness), new GUILayoutOption[0]); + settings.vignetteRoundness = GUILayout.HorizontalSlider((float)settings.vignetteRoundness * 100f, 0, 100f) / 100f; + + GUILayout.Space(10f); + + settings.vignetteRounded = GUILayout.Toggle(settings.vignetteRounded, "Force Round Vignette", new GUILayoutOption[0]); + + GUILayout.EndVertical(); + GUILayout.EndHorizontal(); + + } + GUILayout.Space(10f); + settings.customBloom = GUILayout.Toggle(settings.customBloom, "Use Custom Bloom", new GUILayoutOption[0]); + if (settings.customBloom) + { + GUILayout.Space(10f); + GUILayout.BeginHorizontal(); + GUILayout.Space(indentSpace); + GUILayout.BeginVertical(); + + GUILayout.Label(new GUIContent(string.Format("Intensity {0:F2} ", settings.bloomIntensity), "Strength of the bloom filter."), new GUILayoutOption[0]); + settings.bloomIntensity = GUILayout.HorizontalSlider((float)settings.bloomIntensity * 100f, 0, 1000f) / 100f; + + GUILayout.Space(10f); + + + GUILayout.Label(new GUIContent(string.Format("Threshold {0:F2} ", settings.bloomThreshold), "Filters out pixels under this level of brightness."), new GUILayoutOption[0]); + settings.bloomThreshold = GUILayout.HorizontalSlider((float)settings.bloomThreshold * 100f, 0, 1000f) / 100f; + + GUILayout.Space(10f); + + + GUILayout.Label(new GUIContent(string.Format("Soft Knee {0:F2} ", settings.bloomSoftKnee), "Makes transition between under/over-threshold gradual (0 = hard threshold, 1 = soft threshold)."), new GUILayoutOption[0]); + settings.bloomSoftKnee = GUILayout.HorizontalSlider((float)settings.bloomSoftKnee * 100f, 0, 100f) / 100f; + + GUILayout.Space(10f); + + + GUILayout.Label(new GUIContent(string.Format("Radius {0:F2} ", settings.bloomRadius), "Changes extent of veiling effects in a screen resolution-independent fashion."), new GUILayoutOption[0]); + settings.bloomRadius = GUILayout.HorizontalSlider((float)settings.bloomRadius * 10f, 10, 70f) / 10f; + + GUILayout.Space(10f); + + + GUILayout.Label(new GUIContent(string.Format("Lens Dirt Intensity {0:F2} ", settings.bloomLensDirtIntensity), "Amount of lens dirtiness."), new GUILayoutOption[0]); + settings.bloomLensDirtIntensity = GUILayout.HorizontalSlider((float)settings.bloomLensDirtIntensity * 100f, 0, 1000f) / 100f; + + GUILayout.Space(10f); + + + settings.bloomAntiFlicker = GUILayout.Toggle(settings.bloomAntiFlicker, new GUIContent("Anti-flicker", "Reduces flashing noise with an additional filter."), new GUILayoutOption[0]); + + GUILayout.Space(10f); + GUILayout.EndVertical(); + GUILayout.EndHorizontal(); + + } + GUILayout.Space(10f); + + + settings.customEyeAdapt = GUILayout.Toggle(settings.customEyeAdapt, "Use Custom Eye Adaptation", new GUILayoutOption[0]); + if (settings.customEyeAdapt) + { + GUILayout.Space(10f); + GUILayout.BeginHorizontal(); + GUILayout.Space(indentSpace); + GUILayout.BeginVertical(); + + GUILayout.Label(new GUIContent(string.Format("Low Percent {0:F0} ", settings.eyeAdaptLowPercent), "Filters the dark part of the histogram when computing the average luminance to avoid very dark pixels from contributing to the auto exposure. Unit is in percent."), new GUILayoutOption[0]); + settings.eyeAdaptLowPercent = GUILayout.HorizontalSlider((float)settings.eyeAdaptLowPercent, 1f, 99f); + + GUILayout.Space(10f); + + + GUILayout.Label(new GUIContent(string.Format("High Percent {0:F0} ", settings.eyeAdaptHighPercent), "Filters the bright part of the histogram when computing the average luminance to avoid very dark pixels from contributing to the auto exposure. Unit is in percent."), new GUILayoutOption[0]); + settings.eyeAdaptHighPercent = GUILayout.HorizontalSlider((float)settings.eyeAdaptHighPercent, 1f, 99f); + + GUILayout.Space(10f); + + + GUILayout.Label(new GUIContent(string.Format("Min Avg Luminance for AE{0:F2} ", settings.eyeAdaptMinLuminance), "Minimum average luminance to consider for auto exposure (in EV)."), new GUILayoutOption[0]); + settings.eyeAdaptMinLuminance = GUILayout.HorizontalSlider((float)settings.eyeAdaptMinLuminance * 100f, -600, 2100f) / 100f; + + GUILayout.Space(10f); + + + GUILayout.Label(new GUIContent(string.Format("Max Avg Luminance for AE{0:F2} ", settings.eyeAdaptMaxLuminance), "Maximum average luminance to consider for auto exposure (in EV)."), new GUILayoutOption[0]); + settings.eyeAdaptMaxLuminance = GUILayout.HorizontalSlider((float)settings.eyeAdaptMaxLuminance * 100f, -600, 2100f) / 100f; + + GUILayout.Space(10f); + + + GUILayout.Label(new GUIContent(string.Format("Exposure Bias{0:F2} ", settings.eyeAdaptKeyValue), "Exposure bias. Use this to offset the global exposure of the scene."), new GUILayoutOption[0]); + settings.eyeAdaptKeyValue = GUILayout.HorizontalSlider((float)settings.eyeAdaptKeyValue * 100f, 0, 100f) / 100f; + + GUILayout.Space(10f); + + + settings.eyeAdaptDynamicKeyValue = GUILayout.Toggle(settings.eyeAdaptDynamicKeyValue, new GUIContent("Dynamic Key Value", "Turn this on to let Unity handle the key value automatically based on average luminance."), new GUILayoutOption[0]); + + GUILayout.Space(10f); + + + settings.eyeAdaptAdaptationFixed = GUILayout.Toggle(settings.eyeAdaptAdaptationFixed, new GUIContent("Fixed Eye Adaptation", "Turn off if you want the auto exposure to be animated."), new GUILayoutOption[0]); + + GUILayout.Space(10f); + + + GUILayout.Label(new GUIContent(string.Format("Dark-to-light Adaptation Speed {0:F2} ", settings.eyeAdaptSpeedUp), "Adaptation speed from a dark to a light environment."), new GUILayoutOption[0]); + settings.eyeAdaptSpeedUp = GUILayout.HorizontalSlider((float)settings.eyeAdaptSpeedUp * 100f, 0, 1000f) / 100f; + + GUILayout.Space(10f); + + + GUILayout.Label(new GUIContent(string.Format("Light-to-dark Adaptation Speed {0:F2} ", settings.eyeAdaptSpeedDown), "Adaptation speed from a light to a dark environment."), new GUILayoutOption[0]); + settings.eyeAdaptSpeedDown = GUILayout.HorizontalSlider((float)settings.eyeAdaptSpeedDown * 100f, 0, 1000f) / 100f; + + GUILayout.Space(10f); + + + GUILayout.Label(new GUIContent(string.Format("Brightness Range Min{0} ", settings.eyeAdaptLogMin), "Lower bound for the brightness range of the generated histogram (in EV). The bigger the spread between min & max, the lower the precision will be."), new GUILayoutOption[0]); + settings.eyeAdaptLogMin = (int)GUILayout.HorizontalSlider((float)settings.eyeAdaptLogMin, -16f, -1f); + + GUILayout.Space(10f); + + + GUILayout.Label(new GUIContent(string.Format("Brightness Range Max{0} ", settings.eyeAdaptLogMax), "Upper bound for the brightness range of the generated histogram (in EV). The bigger the spread between min & max, the lower the precision will be."), new GUILayoutOption[0]); + settings.eyeAdaptLogMax = (int)GUILayout.HorizontalSlider((float)settings.eyeAdaptLogMax, 1f, 16f); + + GUILayout.Space(10f); + + + GUILayout.EndVertical(); + GUILayout.EndHorizontal(); + + } + + GUILayout.Space(10f); + + settings.customMotionBlur = GUILayout.Toggle(settings.customMotionBlur, "Use Custom Motion Blur", new GUILayoutOption[0]); + if (settings.customMotionBlur) + { + GUILayout.Space(10f); + GUILayout.BeginHorizontal(); + GUILayout.Space(indentSpace); + GUILayout.BeginVertical(); + + GUILayout.Label(new GUIContent(string.Format("Shutter Angle {0:F0} ", settings.motionBlurShutterAngle), "The angle of rotary shutter. Larger values give longer exposure."), new GUILayoutOption[0]); + settings.motionBlurShutterAngle = GUILayout.HorizontalSlider((float)settings.motionBlurShutterAngle, 0f, 360f); + + GUILayout.Space(10f); + + + GUILayout.Label(new GUIContent(string.Format("Sample Count {0} ", settings.eyeAdaptLogMin), "The amount of sample points, which affects quality and performances."), new GUILayoutOption[0]); + settings.eyeAdaptLogMin = (int)GUILayout.HorizontalSlider((float)settings.eyeAdaptLogMin, 4f, 32f); + + GUILayout.Space(10f); + + + GUILayout.Label(new GUIContent(string.Format("Frame Blending {0:F2} ", settings.motionBlurFrameBlending), "The strength of multiple frame blending. The opacity of preceding frames are determined from this coefficient and time differences."), new GUILayoutOption[0]); + settings.motionBlurFrameBlending = GUILayout.HorizontalSlider((float)settings.motionBlurFrameBlending * 100f, 0, 100f) / 100f; + + GUILayout.Space(10f); + + + GUILayout.EndVertical(); + GUILayout.EndHorizontal(); + + } + + GUILayout.Space(10f); + + + settings.customDepthOfField = GUILayout.Toggle(settings.customDepthOfField, "Use Custom Depth of Field", new GUILayoutOption[0]); + if (settings.customDepthOfField) + { + GUILayout.Space(10f); + GUILayout.BeginHorizontal(); + GUILayout.Space(indentSpace); + GUILayout.BeginVertical(); + + GUILayout.Label(new GUIContent(string.Format("Focus Distance {0:F2} ", settings.depthOfFieldFocusDistance), "Distance to the point of focus."), new GUILayoutOption[0]); + settings.depthOfFieldFocusDistance = GUILayout.HorizontalSlider((float)settings.depthOfFieldFocusDistance*100f, 10f, 1000f)/100f; + + GUILayout.Space(10f); + + + GUILayout.Label(new GUIContent(string.Format("Aperature {0:F2} ", settings.depthOfFieldAperture), "Ratio of aperture (known as f-stop or f-number). The smaller the value is, the shallower the depth of field is."), new GUILayoutOption[0]); + settings.depthOfFieldAperture = GUILayout.HorizontalSlider((float)settings.depthOfFieldAperture * 100f, 5f, 3200f)/100f; + + GUILayout.Space(10f); + + + GUILayout.Label(new GUIContent(string.Format("Focal Length {0:F0} ", settings.depthOfFieldFocalLength), "Distance between the lens and the film. The larger the value is, the shallower the depth of field is."), new GUILayoutOption[0]); + settings.depthOfFieldFocalLength = GUILayout.HorizontalSlider((float)settings.depthOfFieldFocalLength, 1f, 300f); + + GUILayout.Space(10f); + + + settings.depthOfFieldUseCameraFov = GUILayout.Toggle(settings.depthOfFieldUseCameraFov, new GUIContent("Calculate the focal length automatically from the field-of-view value set on the camera. Using this setting isn't recommended."), new GUILayoutOption[0]); + + + GUILayout.Label(new GUIContent(string.Format("Kernel Size {0:F2} ", kernelSizes[settings.depthOfFieldKernelSize]), "Convolution kernel size of the bokeh filter, which determines the maximum radius of bokeh. It also affects the performance (the larger the kernel is, the longer the GPU time is required)."), new GUILayoutOption[0]); + settings.depthOfFieldKernelSize = (int)GUILayout.HorizontalSlider((float)settings.depthOfFieldKernelSize, 0f, 3f); + + GUILayout.Space(10f); + + + GUILayout.EndVertical(); + GUILayout.EndHorizontal(); + + } + + GUILayout.Space(10f); + + + settings.customColorGrading = GUILayout.Toggle(settings.customColorGrading, "Use Custom Color Grading", new GUILayoutOption[0]); + if (settings.customColorGrading) + { + GUILayout.Space(10f); + GUILayout.BeginHorizontal(); + GUILayout.Space(indentSpace); + GUILayout.BeginVertical(); + + GUILayout.Label(new GUIContent(string.Format("Tone Mapper {0} ", toneMappers[settings.colorGradingTonemapper]), "Tonemapping algorithm to use at the end of the color grading process. Use \"Neutral\" if you need a customizable tonemapper."), new GUILayoutOption[0]); + settings.colorGradingTonemapper = (int)GUILayout.HorizontalSlider((float)settings.colorGradingTonemapper, 0f, 2f); + + GUILayout.Space(10f); + + + GUILayout.Label(new GUIContent(string.Format("Neutral Black In {0:F2} ", settings.colorGradingNeutralBlackIn), ""), new GUILayoutOption[0]); + settings.colorGradingNeutralBlackIn = GUILayout.HorizontalSlider((float)settings.colorGradingNeutralBlackIn * 100f, -10f, 10f) / 100f; + + GUILayout.Space(10f); + + + GUILayout.Label(new GUIContent(string.Format("Neutral White In {0:F1} ", settings.colorGradingNeutralWhiteIn), ""), new GUILayoutOption[0]); + settings.colorGradingNeutralWhiteIn = GUILayout.HorizontalSlider((float)settings.colorGradingNeutralWhiteIn * 10f, 10, 200f) / 10f; + + GUILayout.Space(10f); + + + GUILayout.Label(new GUIContent(string.Format("Neutral Black Out {0:F2} ", settings.colorGradingNeutralBlackOut), ""), new GUILayoutOption[0]); + settings.colorGradingNeutralBlackOut = GUILayout.HorizontalSlider((float)settings.colorGradingNeutralBlackOut * 100f, -9f, 10f) / 100f; + + GUILayout.Space(10f); + + GUILayout.Label(new GUIContent(string.Format("Neutral White Out {0:F1} ", settings.colorGradingNeutralWhiteOut), ""), new GUILayoutOption[0]); + settings.colorGradingNeutralWhiteOut = GUILayout.HorizontalSlider((float)settings.colorGradingNeutralWhiteOut * 10f, 10, 190f) / 10f; + + GUILayout.Space(10f); + + + GUILayout.Label(new GUIContent(string.Format("Neutral White Level {0:F1} ", settings.colorGradingNeutralWhiteLevel), ""), new GUILayoutOption[0]); + settings.colorGradingNeutralWhiteLevel = GUILayout.HorizontalSlider((float)settings.colorGradingNeutralWhiteLevel * 10f, 1f, 200f) / 10f; + + GUILayout.Space(10f); + + + GUILayout.Label(new GUIContent(string.Format("Neutral White Clip {0:F1} ", settings.colorGradingNeutralWhiteClip), ""), new GUILayoutOption[0]); + settings.colorGradingNeutralWhiteClip = GUILayout.HorizontalSlider((float)settings.colorGradingNeutralWhiteClip * 10f, 10f, 100f) / 10f; + + GUILayout.Space(10f); + + + GUILayout.Label(new GUIContent(string.Format("Post Exposure {0:F2} ", settings.colorGradingPostExposure), "Adjusts the overall exposure of the scene in EV units. This is applied after HDR effect and right before tonemapping so it won't affect previous effects in the chain."), new GUILayoutOption[0]); + settings.colorGradingPostExposure = GUILayout.HorizontalSlider((float)settings.colorGradingPostExposure * 100f, -600, 2100f) / 100f; + + GUILayout.Space(10f); + + + GUILayout.Label(new GUIContent(string.Format("Temperature {0:F1} ", settings.colorGradingTemperature), "Sets the white balance to a custom color temperature."), new GUILayoutOption[0]); + settings.colorGradingTemperature = GUILayout.HorizontalSlider((float)settings.colorGradingTemperature * 10f, -1000, 1000f) / 10f; + + GUILayout.Space(10f); + + + GUILayout.Label(new GUIContent(string.Format("Tint {0:F1} ", settings.colorGradingTint), "Sets the white balance to compensate for a green or magenta tint."), new GUILayoutOption[0]); + settings.colorGradingTint = GUILayout.HorizontalSlider((float)settings.colorGradingTint * 10f, -1000f, 1000f) / 10f; + + GUILayout.Space(10f); + + GUILayout.Label(new GUIContent(string.Format("Hue Shift {0:F0} ", settings.colorGradingHueShift), ""), new GUILayoutOption[0]); + settings.colorGradingHueShift = GUILayout.HorizontalSlider((float)settings.colorGradingHueShift, -180f, 180f); + + GUILayout.Space(10f); + + + GUILayout.Label(new GUIContent(string.Format("Saturation {0:F2} ", settings.colorGradingSaturation), "Pushes the intensity of all colors."), new GUILayoutOption[0]); + settings.colorGradingSaturation = GUILayout.HorizontalSlider((float)settings.colorGradingSaturation * 100f, 0f, 100f) / 100f; + + GUILayout.Space(10f); + + + GUILayout.Label(new GUIContent(string.Format("Contrast {0:F2} ", settings.colorGradingContrast), "Expands or shrinks the overall range of tonal values."), new GUILayoutOption[0]); + settings.colorGradingContrast = GUILayout.HorizontalSlider((float)settings.colorGradingContrast * 100f, 0f, 100f) / 100f; + + GUILayout.Space(10f); + + + GUILayout.EndVertical(); + GUILayout.EndHorizontal(); + + } + + GUILayout.Space(20f); + + GUILayout.EndVertical(); + GUILayout.EndHorizontal(); + + } + + + // Called when the mod is turned to on/off. + static bool OnToggle(UnityModManager.ModEntry modEntry, bool value /* active or inactive */) + { + enabled = value; + return true; // Permit or not. + } + + } +} diff --git a/PostProcessing/Patches.cs b/PostProcessing/Patches.cs new file mode 100644 index 0000000..b7b44c8 --- /dev/null +++ b/PostProcessing/Patches.cs @@ -0,0 +1,203 @@ +using Harmony12; +using NovaEnv; +using Pathea; +using Pathea.WeatherNs; +using System; +using System.Collections.Generic; +using System.ComponentModel.Design.Serialization; +using System.Linq; +using System.Reflection; +using System.Security.Policy; +using System.Text; +using UnityEngine; +using UnityEngine.PostProcessing; + +namespace PostProcessing +{ + static partial class Main + { + + + private static bool defaultPostProcessingSet = false; + private static VignetteModel.Settings defaultVignetteSettings; + private static BloomModel.Settings defaultBloomSettings; + private static EyeAdaptationModel.Settings defaultEyeAdaptSettings; + private static MotionBlurModel.Settings defaultMotionBlurSettings; + private static DepthOfFieldModel.Settings defaultDepthOfFieldSettings; + private static ColorGradingModel.Settings defaultColorGradingSettings; + + [HarmonyPatch(typeof(PostProcessingBehaviour), "OnEnable")] + static class PostProcessingBehaviour_OnEnable_Patch + { + + static void Prefix(PostProcessingBehaviour __instance) + { + if(__instance.profile != null && !defaultPostProcessingSet) + { + defaultVignetteSettings = __instance.profile.vignette.settings; + defaultBloomSettings = __instance.profile.bloom.settings; + defaultEyeAdaptSettings = __instance.profile.eyeAdaptation.settings; + defaultMotionBlurSettings = __instance.profile.motionBlur.settings; + defaultDepthOfFieldSettings = __instance.profile.depthOfField.settings; + defaultColorGradingSettings = __instance.profile.colorGrading.settings; + defaultPostProcessingSet = true; + } + } + } + + [HarmonyPatch(typeof(PostProcessingBehaviour), "OnPreCull")] + static class PostProcessingBehaviour_OnPreCull_Patch + { + static void Postfix(PostProcessingBehaviour __instance, PostProcessingContext ___m_Context, ref VignetteComponent ___m_Vignette, ref BloomComponent ___m_Bloom, ref EyeAdaptationComponent ___m_EyeAdaptation, ref DepthOfFieldComponent ___m_DepthOfField, ref MotionBlurComponent ___m_MotionBlur, ref ColorGradingComponent ___m_ColorGrading) + { + PostProcessingContext postProcessingContext = ___m_Context; + + if (enabled && settings.customVignette) + { + + VignetteModel.Settings vSettings = new VignetteModel.Settings + { + mode = VignetteModel.Mode.Classic, + intensity = settings.vignetteIntensity, + color = new Color(settings.vignetteColorRed, settings.vignetteColorGreen, settings.vignetteColorBlue, settings.vignetteColorAlpha), + center = new Vector2(settings.vignetteX,settings.vignetteY), + smoothness = settings.vignetteSmoothness, + roundness = settings.vignetteRoundness, + rounded = settings.vignetteRounded + }; + ___m_Vignette.model.settings = vSettings; + } + else + { + ___m_Vignette.model.settings = defaultVignetteSettings; + } + + if (enabled && settings.customBloom) + { + BloomModel.BloomSettings bbSettings = new BloomModel.BloomSettings + { + intensity = settings.bloomIntensity, + threshold = settings.bloomThreshold, + softKnee = settings.bloomSoftKnee, + radius = settings.bloomRadius, + antiFlicker = settings.bloomAntiFlicker + }; + + BloomModel.LensDirtSettings blSettings = new BloomModel.LensDirtSettings + { + texture = ___m_Bloom.model.settings.lensDirt.texture, + intensity = settings.bloomLensDirtIntensity + }; + BloomModel.Settings bSettings = new BloomModel.Settings + { + bloom = bbSettings, + lensDirt = blSettings + }; + + ___m_Bloom.model.settings = bSettings; + } + else + { + ___m_Bloom.model.settings = defaultBloomSettings; + } + + if (enabled && settings.customEyeAdapt) + { + EyeAdaptationModel.Settings eSettings = new EyeAdaptationModel.Settings + { + lowPercent = settings.eyeAdaptLowPercent, + highPercent = settings.eyeAdaptHighPercent, + minLuminance = settings.eyeAdaptMinLuminance, + maxLuminance = settings.eyeAdaptMaxLuminance, + keyValue = settings.eyeAdaptKeyValue, + dynamicKeyValue = settings.eyeAdaptDynamicKeyValue, + adaptationType = settings.eyeAdaptAdaptationFixed?EyeAdaptationModel.EyeAdaptationType.Fixed: EyeAdaptationModel.EyeAdaptationType.Progressive, + speedUp = settings.eyeAdaptSpeedUp, + speedDown = settings.eyeAdaptSpeedDown, + logMin = settings.eyeAdaptLogMin, + logMax = settings.eyeAdaptLogMax, + }; + + ___m_EyeAdaptation.model.settings = eSettings; + } + else + { + ___m_EyeAdaptation.model.settings = defaultEyeAdaptSettings; + } + + if (enabled && settings.customMotionBlur) + { + MotionBlurModel.Settings mSettings = new MotionBlurModel.Settings + { + shutterAngle = settings.motionBlurShutterAngle, + sampleCount = settings.motionBlurSampleCount, + frameBlending = settings.motionBlurFrameBlending + }; + + ___m_MotionBlur.model.settings = mSettings; + } + else + { + ___m_MotionBlur.model.settings = defaultMotionBlurSettings; + } + + if (enabled && settings.customDepthOfField) + { + DepthOfFieldModel.Settings dSettings = new DepthOfFieldModel.Settings + { + focusDistance = settings.depthOfFieldFocusDistance, + aperture = settings.depthOfFieldAperture, + focalLength = settings.depthOfFieldFocalLength, + useCameraFov = settings.depthOfFieldUseCameraFov, + kernelSize = (DepthOfFieldModel.KernelSize)settings.depthOfFieldKernelSize, + }; + + ___m_DepthOfField.model.settings = dSettings; + } + else + { + ___m_DepthOfField.model.settings = defaultDepthOfFieldSettings; + } + + if (enabled && settings.customColorGrading) + { + ColorGradingModel.TonemappingSettings ctSettings = new ColorGradingModel.TonemappingSettings + { + tonemapper = (ColorGradingModel.Tonemapper)settings.colorGradingTonemapper, + neutralBlackIn = settings.colorGradingNeutralBlackIn, + neutralWhiteIn = settings.colorGradingNeutralWhiteIn, + neutralBlackOut = settings.colorGradingNeutralBlackOut, + neutralWhiteOut = settings.colorGradingNeutralWhiteOut, + neutralWhiteLevel = settings.colorGradingNeutralWhiteLevel, + neutralWhiteClip = settings.colorGradingNeutralWhiteClip + }; + + ColorGradingModel.BasicSettings cbSettings = new ColorGradingModel.BasicSettings + { + postExposure = settings.colorGradingPostExposure, + temperature = settings.colorGradingTemperature, + tint = settings.colorGradingTint, + hueShift = settings.colorGradingHueShift, + saturation = settings.colorGradingSaturation, + contrast = settings.colorGradingContrast + }; + + ColorGradingModel.Settings cSettings = new ColorGradingModel.Settings + { + tonemapping = ctSettings, + basic = cbSettings, + channelMixer = ___m_ColorGrading.model.settings.channelMixer, + colorWheels = ___m_ColorGrading.model.settings.colorWheels, + curves = ___m_ColorGrading.model.settings.curves + }; + + ___m_ColorGrading.model.settings = cSettings; + } + else + { + ___m_ColorGrading.model.settings = defaultColorGradingSettings; + } + } + } + } +} diff --git a/PostProcessing/PostProcessing.csproj b/PostProcessing/PostProcessing.csproj new file mode 100644 index 0000000..85d11b9 --- /dev/null +++ b/PostProcessing/PostProcessing.csproj @@ -0,0 +1,96 @@ + + + + + Debug + AnyCPU + {5AD3331E-8F85-4E91-96F0-C65972137ADA} + Library + Properties + PostProcessing + PostProcessing + v3.5 + 512 + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + H:\tmp\ga\MTAP\Portia_Data\Managed\UnityModManager\0Harmony12.dll + + + H:\tmp\ga\MTAP\Portia_Data\Managed\Assembly-CSharp.dll + + + H:\tmp\ga\MTAP\Portia_Data\Managed\Assembly-CSharp-firstpass.dll + + + + + + + + + H:\tmp\ga\MTAP\Portia_Data\Managed\UnityEngine.dll + + + H:\tmp\ga\MTAP\Portia_Data\Managed\UnityEngine.AnimationModule.dll + + + H:\tmp\ga\MTAP\Portia_Data\Managed\UnityEngine.AudioModule.dll + + + H:\tmp\ga\MTAP\Portia_Data\Managed\UnityEngine.CoreModule.dll + + + H:\tmp\ga\MTAP\Portia_Data\Managed\UnityEngine.IMGUIModule.dll + + + H:\tmp\ga\MTAP\Portia_Data\Managed\UnityEngine.ParticleSystemModule.dll + + + H:\tmp\ga\MTAP\Portia_Data\Managed\UnityEngine.UI.dll + + + H:\tmp\ga\MTAP\Portia_Data\Managed\UnityEngine.UIModule.dll + + + H:\tmp\ga\MTAP\Portia_Data\Managed\UnityEngine.UnityWebRequestAudioModule.dll + + + H:\tmp\ga\MTAP\Portia_Data\Managed\UnityEngine.UnityWebRequestModule.dll + + + H:\tmp\ga\MTAP\Portia_Data\Managed\UnityEngine.UnityWebRequestWWWModule.dll + + + H:\tmp\ga\MTAP\Portia_Data\Managed\UnityModManager\UnityModManager.dll + + + + + + + + + + + call $(SolutionDir)copyDll.bat PostProcessing + + \ No newline at end of file diff --git a/PostProcessing/Settings.cs b/PostProcessing/Settings.cs new file mode 100644 index 0000000..55af8bb --- /dev/null +++ b/PostProcessing/Settings.cs @@ -0,0 +1,77 @@ +using UnityModManagerNet; +namespace PostProcessing +{ + public class Settings : UnityModManager.ModSettings + { + + public bool customVignette = false; + public bool customBloom = false; + public bool customEyeAdapt = false; + public bool customMotionBlur = false; + public bool customColorGrading = false; + public bool customDepthOfField = false; + + public float vignetteColorRed = 0f; + public float vignetteColorGreen = 0f; + public float vignetteColorBlue = 0f; + public float vignetteColorAlpha = 0f; + + public float vignetteIntensity = 0f; + public float vignetteX = 0.5f; + public float vignetteY = 0.5f; + public float vignetteSmoothness = 1f; + public float vignetteRoundness = 0f; + public bool vignetteRounded = false; + + public float bloomIntensity = 0.5f; + public float bloomThreshold = 1.1f; + public float bloomSoftKnee = 0.5f; + public float bloomRadius = 4f; + public bool bloomAntiFlicker = false; + public float bloomLensDirtIntensity = 3f; + + public float eyeAdaptLowPercent = 45f; + public float eyeAdaptHighPercent = 95f; + public float eyeAdaptMinLuminance = -5f; + public float eyeAdaptMaxLuminance = 1f; + public float eyeAdaptKeyValue = 0.25f; + public bool eyeAdaptDynamicKeyValue = true; + public bool eyeAdaptAdaptationFixed = false; + public float eyeAdaptSpeedUp = 2f; + public float eyeAdaptSpeedDown = 1f; + public int eyeAdaptLogMin = -8; + public int eyeAdaptLogMax = 4; + + public float motionBlurShutterAngle = 270f; + public int motionBlurSampleCount = 10; + public float motionBlurFrameBlending = 0f; + + public float depthOfFieldFocusDistance = 10f; + public float depthOfFieldAperture = 5.6f; + public float depthOfFieldFocalLength = 50f; + public bool depthOfFieldUseCameraFov = false; + public int depthOfFieldKernelSize = 1; + + public int colorGradingTonemapper = 2; + public float colorGradingNeutralBlackIn = 0.02f; + public float colorGradingNeutralWhiteIn = 10f; + public float colorGradingNeutralBlackOut = 0f; + public float colorGradingNeutralWhiteOut = 10f; + public float colorGradingNeutralWhiteLevel = 5.3f; + public float colorGradingNeutralWhiteClip = 10f; + + public float colorGradingPostExposure = 0f; + public float colorGradingTemperature = 0f; + public float colorGradingTint = 0f; + public float colorGradingHueShift = 0f; + public float colorGradingSaturation = 1f; + public float colorGradingContrast = 1f; + + public string ToggleKey = "page down"; + + public override void Save(UnityModManager.ModEntry modEntry) + { + Save(this, modEntry); + } + } +} \ No newline at end of file diff --git a/repository.json b/repository.json index 61f675c..790858f 100644 --- a/repository.json +++ b/repository.json @@ -9,7 +9,7 @@ {"Id": "CustomTextures", "Version": "0.5.0"}, {"Id": "DeeDeeAnywhere", "Version": "0.1.3"}, {"Id": "DialogueEdit", "Version": "0.1.0"}, - {"Id": "Environment", "Version": "0.3.2"}, + {"Id": "Environment", "Version": "0.3.3"}, {"Id": "FasterPiggy", "Version": "0.1.0"}, {"Id": "FishBowlMod", "Version": "0.3.2"}, {"Id": "InfiniteLevels", "Version": "0.1.0"}, @@ -25,6 +25,7 @@ {"Id": "MusicBox", "Version": "0.4.0"}, {"Id": "NoWiggle", "Version": "0.1.0"}, {"Id": "PennyComeBack", "Version": "0.1.0"}, + {"Id": "PostProcessing", "Version": "0.1.0"}, {"Id": "SaveAnyTime", "Version": "0.8.5"}, {"Id": "StorageAnywhere", "Version": "0.6.0"}, {"Id": "Teleport", "Version": "0.0.1"},