From 0246eacfe7dae1c8279219bfd11f3bfff1c76bc5 Mon Sep 17 00:00:00 2001 From: JC Yuan Date: Fri, 10 May 2024 15:02:48 -0500 Subject: [PATCH 1/4] Adding Doppler Effect --- .../Assets/Scripts/BlackHole.cs | 17 ++++++++++++ .../Shaders/BlackHoleAccretionDisk.shader | 25 ++++++++++++------ Singularity/Singularity/Singularity.cs | 2 +- Singularity/Singularity/SingularityObject.cs | 10 +++++++ Singularity/Singularity/SingularityUI.cs | 2 +- .../Singularity/bin/Debug/Singularity.dll | Bin 0 -> 32256 bytes .../Singularity/obj/Debug/Singularity.dll | Bin 0 -> 32256 bytes 7 files changed, 46 insertions(+), 10 deletions(-) create mode 100644 Singularity/Singularity/bin/Debug/Singularity.dll create mode 100644 Singularity/Singularity/obj/Debug/Singularity.dll diff --git a/Singularity/Shaders/SingularityShaders/Assets/Scripts/BlackHole.cs b/Singularity/Shaders/SingularityShaders/Assets/Scripts/BlackHole.cs index d3354c6..2ed172f 100644 --- a/Singularity/Shaders/SingularityShaders/Assets/Scripts/BlackHole.cs +++ b/Singularity/Shaders/SingularityShaders/Assets/Scripts/BlackHole.cs @@ -42,6 +42,18 @@ public class BlackHole : MonoBehaviour [SerializeField] float rotationSpeed; + [SerializeField] + float dopplerIntensityRate; + + [SerializeField] + float dopplerIntensityFactor; + + [SerializeField] + float dopplerIntensityOffset; + + [SerializeField] + float dopplerColorFactor; + RenderTexture screenBuffer; CommandBuffer screenCopyCommandBuffer; @@ -79,6 +91,11 @@ void Update() blackHoleMaterial.SetFloat("diskInnerRadius", DiskInnerRadius); blackHoleMaterial.SetFloat("diskOuterRadius", DiskOuterRadius); + blackHoleMaterial.SetFloat ("dopplerIntensityRate", dopplerIntensityRate); + blackHoleMaterial.SetFloat ("dopplerIntensityFactor", dopplerIntensityFactor); + blackHoleMaterial.SetFloat ("dopplerIntensityOffset", dopplerIntensityOffset); + blackHoleMaterial.SetFloat ("dopplerColorFactor", dopplerColorFactor); + //gameObject.transform.position = new Vector3(Mathf.Sin(0.53f*Time.time), 2f+3f*Mathf.Cos(0.74f*Time.time), Mathf.Cos(0.22f*Time.time)); sceneCam.transform.RotateAround(gameObject.transform.position, Vector3.up, 10 * Time.deltaTime); diff --git a/Singularity/Shaders/SingularityShaders/Assets/Shaders/BlackHoleAccretionDisk.shader b/Singularity/Shaders/SingularityShaders/Assets/Shaders/BlackHoleAccretionDisk.shader index 2e50441..d77598d 100644 --- a/Singularity/Shaders/SingularityShaders/Assets/Shaders/BlackHoleAccretionDisk.shader +++ b/Singularity/Shaders/SingularityShaders/Assets/Shaders/BlackHoleAccretionDisk.shader @@ -66,6 +66,11 @@ uniform float diskInnerRadius; uniform float diskOuterRadius; + uniform float dopplerIntensityRate; + uniform float dopplerIntensityFactor; + uniform float dopplerIntensityOffset; + uniform float dopplerColorFactor; + uniform float rotationSpeed; uniform float universalTime; @@ -91,30 +96,29 @@ return o; } - float3 accretionDiskColor(float3 pos, float3 base1, float3 base2, float3 blackHoleOrigin) { - pos = pos - blackHoleOrigin; - + float3 posOrigin = pos - blackHoleOrigin; + float dist = length(posOrigin); #if defined (RADIAL_DISK_MAPPING_ON) //TODO: make this rotate, move TWOPI to defines //need to rotate base1 and base2? - float dist = length(pos); + float v = clamp((dist - diskInnerRadius) / (diskOuterRadius - diskInnerRadius), 0.0, 1.0); // float3 base = cross(blackholeDisk.xyz, float3(0.0, 0.0, 1.0)); - float angle = acos(dot(normalize(base1), normalize(pos))); - if (dot(cross(base1, pos), diskNormal) < 0.0) angle = -angle; + float angle = acos(dot(normalize(base1), normalize(posOrigin))); + if (dot(cross(base1, posOrigin), diskNormal) < 0.0) angle = -angle; angle-= universalTime * rotationSpeed; float u = 0.5 - angle / TWOPI; float4 color = tex2Dlod(AccretionDisk, float4(u, v,0.0,0.0)); #else - float u = dot (base1,normalize(pos)) * (length(pos)-diskInnerRadius) / (diskOuterRadius-diskInnerRadius); - float v = dot (base2,normalize(pos)) * (length(pos)-diskInnerRadius) / (diskOuterRadius-diskInnerRadius); + float u = dot (base1,normalize(posOrigin)) * (length(posOrigin)-diskInnerRadius) / (diskOuterRadius-diskInnerRadius); + float v = dot (base2,normalize(posOrigin)) * (length(posOrigin)-diskInnerRadius) / (diskOuterRadius-diskInnerRadius); float2 UV = float2(u,v); @@ -133,6 +137,11 @@ float4 color = tex2Dlod(AccretionDisk, float4(UV,0.0,0.0)); #endif + float3 posCamera = pos - _WorldSpaceCameraPos.xyz; + float dopplerIntensity = dot(diskNormal, cross(normalize(posOrigin), normalize(posCamera))) / pow(dist / diskInnerRadius, 0.25); + color.r *= ((dopplerIntensityFactor - dopplerColorFactor) * tanh(dopplerIntensityRate * dopplerIntensity) + dopplerIntensityOffset); + color.g *= (dopplerIntensityFactor * tanh(dopplerIntensityRate * dopplerIntensity) + dopplerIntensityOffset); + color.b *= ((dopplerIntensityFactor + dopplerColorFactor) * tanh(dopplerIntensityRate * dopplerIntensity) + dopplerIntensityOffset); return color.rgb*color.a; } diff --git a/Singularity/Singularity/Singularity.cs b/Singularity/Singularity/Singularity.cs index 47f33a4..25b4e47 100644 --- a/Singularity/Singularity/Singularity.cs +++ b/Singularity/Singularity/Singularity.cs @@ -5,7 +5,7 @@ using System.Reflection; using UnityEngine; -[assembly: AssemblyVersion("0.991.*")] +[assembly: AssemblyVersion("0.992.*")] namespace Singularity { [KSPAddon(KSPAddon.Startup.AllGameScenes, false)] diff --git a/Singularity/Singularity/SingularityObject.cs b/Singularity/Singularity/SingularityObject.cs index 2b947e9..210fc18 100644 --- a/Singularity/Singularity/SingularityObject.cs +++ b/Singularity/Singularity/SingularityObject.cs @@ -30,6 +30,11 @@ public class SingularityObject : MonoBehaviour [Persistent] public bool depthWrite = true; + [Persistent] public float dopplerEffectIntensityRate = 0f; + [Persistent] public float dopplerEffectIntensityFactor = 0.8f; + [Persistent] public float dopplerEffectIntensityOffset = 1.0f; + [Persistent] public float dopplerEffectColorFactor = 0f; + float scaledRadius = 1f; float enclosingMeshRadius = 1f; @@ -160,6 +165,11 @@ void ConfigureAccretionDisk () singularityMaterial.SetFloat ("diskInnerRadius", accretionDiskInnerRadius / 6000f); //change to scaledSpace scale singularityMaterial.SetFloat ("diskOuterRadius", accretionDiskOuterRadius / 6000f); + singularityMaterial.SetFloat ("dopplerIntensityRate", dopplerEffectIntensityRate); + singularityMaterial.SetFloat ("dopplerIntensityFactor", dopplerEffectIntensityFactor); + singularityMaterial.SetFloat ("dopplerIntensityOffset", dopplerEffectIntensityOffset); + singularityMaterial.SetFloat ("dopplerColorFactor", dopplerEffectColorFactor); + //convert from RPM to rad/s singularityMaterial.SetFloat("rotationSpeed", accretionDiskRotationSpeed * (Mathf.PI * 2) / 60); diff --git a/Singularity/Singularity/SingularityUI.cs b/Singularity/Singularity/SingularityUI.cs index 2757837..5895058 100644 --- a/Singularity/Singularity/SingularityUI.cs +++ b/Singularity/Singularity/SingularityUI.cs @@ -62,7 +62,7 @@ void OnGUI () { if (uiVisible) { - windowRect = GUILayout.Window (windowId, windowRect, DrawWindow,"Singularity 0.991"); + windowRect = GUILayout.Window (windowId, windowRect, DrawWindow,"Singularity 0.992"); //prevent window from going offscreen windowRect.x = Mathf.Clamp(windowRect.x,0,Screen.width-windowRect.width); diff --git a/Singularity/Singularity/bin/Debug/Singularity.dll b/Singularity/Singularity/bin/Debug/Singularity.dll new file mode 100644 index 0000000000000000000000000000000000000000..97371d0ff5d4fd713d13f6e610223a92ad26a2da GIT binary patch literal 32256 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 Date: Tue, 14 May 2024 23:18:14 -0500 Subject: [PATCH 2/4] v0.992 --- .../Assets/Editor/ExportAssetBundle.cs | 4 ++-- .../Assets/Shaders/BlackHoleAccretionDisk.shader | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/Singularity/Shaders/SingularityShaders/Assets/Editor/ExportAssetBundle.cs b/Singularity/Shaders/SingularityShaders/Assets/Editor/ExportAssetBundle.cs index 4dbb970..fa6f0d6 100644 --- a/Singularity/Shaders/SingularityShaders/Assets/Editor/ExportAssetBundle.cs +++ b/Singularity/Shaders/SingularityShaders/Assets/Editor/ExportAssetBundle.cs @@ -14,8 +14,8 @@ public class CreateAssetBundles static void BuildAllAssetBundles () { // Put the bundles in a folder called "AssetBundles" - //var outDir = "Assets/AssetBundles"; - var outDir = "C:/Steam/steamapps/common/Kerbal Space Program/GameData/Singularity/shaders"; + var outDir = "Assets/AssetBundles"; + //var outDir = "C:/Steam/steamapps/common/Kerbal Space Program/GameData/Singularity/shaders"; var outDir2 = "C:/Steam/steamapps/common/Kerbal Space Program 1.8.1/GameData/Singularity/shaders"; if (!Directory.Exists (outDir)) diff --git a/Singularity/Shaders/SingularityShaders/Assets/Shaders/BlackHoleAccretionDisk.shader b/Singularity/Shaders/SingularityShaders/Assets/Shaders/BlackHoleAccretionDisk.shader index d77598d..63e2b66 100644 --- a/Singularity/Shaders/SingularityShaders/Assets/Shaders/BlackHoleAccretionDisk.shader +++ b/Singularity/Shaders/SingularityShaders/Assets/Shaders/BlackHoleAccretionDisk.shader @@ -139,9 +139,23 @@ #endif float3 posCamera = pos - _WorldSpaceCameraPos.xyz; float dopplerIntensity = dot(diskNormal, cross(normalize(posOrigin), normalize(posCamera))) / pow(dist / diskInnerRadius, 0.25); + /* color.r *= ((dopplerIntensityFactor - dopplerColorFactor) * tanh(dopplerIntensityRate * dopplerIntensity) + dopplerIntensityOffset); color.g *= (dopplerIntensityFactor * tanh(dopplerIntensityRate * dopplerIntensity) + dopplerIntensityOffset); color.b *= ((dopplerIntensityFactor + dopplerColorFactor) * tanh(dopplerIntensityRate * dopplerIntensity) + dopplerIntensityOffset); + */ + if (dopplerIntensity>=0) + { + color.r *= ((dopplerIntensityFactor - dopplerColorFactor) * (-1.0f/(dopplerIntensityRate * dopplerIntensity + 1.0f) + 1.0f) + dopplerIntensityOffset); + color.g *= (dopplerIntensityFactor * (-1.0f/(dopplerIntensityRate * dopplerIntensity + 1.0f) + 1.0f) + dopplerIntensityOffset); + color.b *= ((dopplerIntensityFactor + dopplerColorFactor) * (-1.0f/(dopplerIntensityRate * dopplerIntensity + 1.0f) + 1.0f) + dopplerIntensityOffset); + } + else + { + color.r *= ((dopplerIntensityFactor - dopplerColorFactor) * (-1.0f/(dopplerIntensityRate * dopplerIntensity - 1.0f) - 1.0f) + dopplerIntensityOffset); + color.g *= (dopplerIntensityFactor * (-1.0f/(dopplerIntensityRate * dopplerIntensity - 1.0f) - 1.0f) + dopplerIntensityOffset); + color.b *= ((dopplerIntensityFactor + dopplerColorFactor) * (-1.0f/(dopplerIntensityRate * dopplerIntensity - 1.0f) - 1.0f) + dopplerIntensityOffset); + } return color.rgb*color.a; } From 99bb9847bac83e58a2b008ad45d8bd6b12a0a47c Mon Sep 17 00:00:00 2001 From: JC Yuan <75869853+jcyuan06@users.noreply.github.com> Date: Fri, 24 May 2024 18:12:02 -0500 Subject: [PATCH 3/4] v0.993 Added a parameter `schwarzschildRadius` to replace `gravity` to control the Schwarzschild radius of the black hole. Old configs are still compatible. --- .../Assets/Scripts/BlackHole.cs | 4 +++ .../Shaders/BlackHoleAccretionDisk.shader | 4 ++- Singularity/Singularity/Singularity.cs | 4 +-- Singularity/Singularity/SingularityObject.cs | 23 +++++++++++++++--- Singularity/Singularity/SingularityUI.cs | 2 +- .../Singularity/bin/Debug/Singularity.dll | Bin 32256 -> 32768 bytes 6 files changed, 29 insertions(+), 8 deletions(-) diff --git a/Singularity/Shaders/SingularityShaders/Assets/Scripts/BlackHole.cs b/Singularity/Shaders/SingularityShaders/Assets/Scripts/BlackHole.cs index 2ed172f..074ed43 100644 --- a/Singularity/Shaders/SingularityShaders/Assets/Scripts/BlackHole.cs +++ b/Singularity/Shaders/SingularityShaders/Assets/Scripts/BlackHole.cs @@ -27,6 +27,9 @@ public class BlackHole : MonoBehaviour [SerializeField] float gravity; + [SerializeField] + float schwarzschildRadius; + [SerializeField] Camera sceneCam; @@ -86,6 +89,7 @@ void Update() //blackHoleMaterial.SetVector("blackhole", new Vector4(gameObject.transform.position.x,gameObject.transform.position.y,gameObject.transform.position.z,radius)); blackHoleMaterial.SetFloat("blackHoleRadius",radius); blackHoleMaterial.SetFloat("gravity", gravity); + blackHoleMaterial.SetFloat("schwarzschildRadius", schwarzschildRadius); blackHoleMaterial.SetVector("blackholeDisk", new Vector4(DiskInnerRadius*DiskNormal.x,DiskInnerRadius*DiskNormal.y,DiskInnerRadius*DiskNormal.z,DiskOuterRadius)); blackHoleMaterial.SetVector("diskNormal", DiskNormal); blackHoleMaterial.SetFloat("diskInnerRadius", DiskInnerRadius); diff --git a/Singularity/Shaders/SingularityShaders/Assets/Shaders/BlackHoleAccretionDisk.shader b/Singularity/Shaders/SingularityShaders/Assets/Shaders/BlackHoleAccretionDisk.shader index 63e2b66..313d4b1 100644 --- a/Singularity/Shaders/SingularityShaders/Assets/Shaders/BlackHoleAccretionDisk.shader +++ b/Singularity/Shaders/SingularityShaders/Assets/Shaders/BlackHoleAccretionDisk.shader @@ -43,6 +43,7 @@ uniform float enclosingMeshRadius; uniform float blackHoleRadius; uniform float gravity; + uniform float schwarzschildRadius; uniform sampler2D _CameraDepthTexture; uniform sampler2D SingularityDepthTexture; @@ -286,7 +287,8 @@ // 0.05: rate of smaller steps when approaching blackhole stepSize = rayDistance - (blackHoleRadius *0.05); - rayAccel = normalize(gravityVector) * gravity / (rayDistance * rayDistance); + //rayAccel = normalize(gravityVector) * gravity / (rayDistance * rayDistance); + rayAccel = normalize(gravityVector) * schwarzschildRadius*schwarzschildRadius/1.04976E9 / (rayDistance * rayDistance); float accelFadeOut = clamp( ( length(rayAccel) - 0.001 ) / 0.001, 0.0, 1.0); //we fade out acceleration over the last 0.001 so we can have a smaller enclosing mesh rayAccel = lerp(0.0, rayAccel, accelFadeOut); diff --git a/Singularity/Singularity/Singularity.cs b/Singularity/Singularity/Singularity.cs index 25b4e47..0b8afa7 100644 --- a/Singularity/Singularity/Singularity.cs +++ b/Singularity/Singularity/Singularity.cs @@ -5,7 +5,7 @@ using System.Reflection; using UnityEngine; -[assembly: AssemblyVersion("0.992.*")] +[assembly: AssemblyVersion("0.993.*")] namespace Singularity { [KSPAddon(KSPAddon.Startup.AllGameScenes, false)] @@ -178,7 +178,7 @@ void LoadSingularities() void AddSingularityObject (ConfigNode _cn) { - if (_cn.HasValue ("name") && _cn.HasValue ("gravity")) + if (_cn.HasValue ("name") && (_cn.HasValue ("gravity") || _cn.HasValue ("schwarzschildRadius"))) { Transform scaledBodyTransform = ScaledSpace.Instance.transform.FindChild (_cn.GetValue ("name")); if (!ReferenceEquals (scaledBodyTransform, null)) diff --git a/Singularity/Singularity/SingularityObject.cs b/Singularity/Singularity/SingularityObject.cs index 210fc18..c5ba166 100644 --- a/Singularity/Singularity/SingularityObject.cs +++ b/Singularity/Singularity/SingularityObject.cs @@ -11,6 +11,7 @@ public class SingularityObject : MonoBehaviour [Persistent] public string name; [Persistent] public float gravity = 1f; + [Persistent] public float schwarzschildRadius = 0f; [Persistent] public bool hideCelestialBody = true; @@ -63,13 +64,20 @@ public void Init(ConfigNode _cn) singularityMaterial = new Material(Singularity.LoadedShaders ["Singularity/BlackHoleAccretionDisk"]); - scaledRadius = Mathf.Sqrt (Mathf.Max(gravity,0f)) * 5f; // The apparent radius (in scaled Space) of the black hole (or event horizon), not physically correct + if (!_cn.HasValue ("schwarzschildRadius")) + { + schwarzschildRadius = 32400f * Mathf.Sqrt(Mathf.Abs(gravity)); + } + //scaledRadius = Mathf.Sqrt (Mathf.Max(gravity,0f)) * 5f; // The apparent radius (in scaled Space) of the black hole (or event horizon), not physically correct + scaledRadius = schwarzschildRadius / 6000f * 0.926f; // The apparent radius (in scaled Space) of the black hole (or event horizon), not physically correct singularityMaterial.SetFloat("blackHoleRadius", scaledRadius); - enclosingMeshRadius = scaleEnclosingMesh * Mathf.Sqrt (Mathf.Abs(gravity)) * 120f; // The radius (in scaled Space) at which the gravity no longer warps the image + //enclosingMeshRadius = scaleEnclosingMesh * Mathf.Sqrt (Mathf.Abs(gravity)) * 120f; // The radius (in scaled Space) at which the gravity no longer warps the image + enclosingMeshRadius = schwarzschildRadius / 27f; // The radius (in scaled Space) at which the gravity no longer warps the image // Serves as the radius of our enclosing mesh, value finetuned manually singularityMaterial.SetFloat("enclosingMeshRadius", enclosingMeshRadius); singularityMaterial.SetFloat("gravity", gravity); + singularityMaterial.SetFloat("schwarzschildRadius", schwarzschildRadius); singularityMaterial.renderQueue = 2501; //No need to be same renderqueue as scatterer atmos, i's treated as an opaque object, when atmos/clouds are behind it they are included in the re-rendered scaledSpace scene //Otherwise they are handled by depth-testing @@ -297,10 +305,16 @@ public void ApplyFromUI(ConfigNode _cn) return; } - scaledRadius = Mathf.Sqrt (Mathf.Max(gravity,0f)) * 5f; + //scaledRadius = Mathf.Sqrt (Mathf.Max(gravity,0f)) * 5f; + if (!_cn.HasValue ("schwarzschildRadius")) + { + schwarzschildRadius = 32400f * Mathf.Sqrt(Mathf.Abs(gravity)); + } + scaledRadius = schwarzschildRadius / 6000f * 0.926f; singularityMaterial.SetFloat("blackHoleRadius", scaledRadius); singularityMaterial.SetFloat("gravity", gravity); + singularityMaterial.SetFloat("schwarzschildRadius", schwarzschildRadius); ConfigureAccretionDisk (); @@ -313,7 +327,8 @@ public void ApplyFromUI(ConfigNode _cn) UnHideCelestialBody(); } - enclosingMeshRadius = scaleEnclosingMesh * Mathf.Sqrt (Mathf.Abs(gravity)) * 120f; + //enclosingMeshRadius = scaleEnclosingMesh * Mathf.Sqrt (Mathf.Abs(gravity)) * 120f; + enclosingMeshRadius = schwarzschildRadius / 27f; singularityMaterial.SetFloat("enclosingMeshRadius", enclosingMeshRadius); singularityGO.transform.localScale = new Vector3 (enclosingMeshRadius / gameObject.transform.localScale.x, enclosingMeshRadius / gameObject.transform.localScale.y, enclosingMeshRadius / gameObject.transform.localScale.z); diff --git a/Singularity/Singularity/SingularityUI.cs b/Singularity/Singularity/SingularityUI.cs index 5895058..b53bbab 100644 --- a/Singularity/Singularity/SingularityUI.cs +++ b/Singularity/Singularity/SingularityUI.cs @@ -62,7 +62,7 @@ void OnGUI () { if (uiVisible) { - windowRect = GUILayout.Window (windowId, windowRect, DrawWindow,"Singularity 0.992"); + windowRect = GUILayout.Window (windowId, windowRect, DrawWindow,"Singularity 0.993"); //prevent window from going offscreen windowRect.x = Mathf.Clamp(windowRect.x,0,Screen.width-windowRect.width); diff --git a/Singularity/Singularity/bin/Debug/Singularity.dll b/Singularity/Singularity/bin/Debug/Singularity.dll index 97371d0ff5d4fd713d13f6e610223a92ad26a2da..84f4658fae7456556a366bc38ad92a80c0dc5651 100644 GIT binary patch literal 32768 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 OKb-UbXZXLs0{;&$vT&CG literal 32256 zcmeHw4SZZxweLD-J~Nq2GBe3c(yyfSgK3h6eo{(nY4g!EkbWlpq*x}&G#xsb6V4=U zLkK1!)v72(M9ULx5w29>KH;i>7q}D!#S04FtB3-(sBlF^t={VcE|&LSYo9Y8X^QCc z{(kTMes9uQXRo!_UVH7e*Is+=b7rP%cicb@B68yW_S;1FoqB>Ch^#FaP z=&9-VYwb@>@7$Bj)byK1uNm*F>5iw<#z0M1qQ)Fd*Cf+5&FedA`i!1LLrIBmrX_kq z3sJk~pd(kW*lqWAlFq3q*5(oI1I4YV_kI%B8oZC7iIf3G)|DQ?n`K>%ciw9yQDYt| z#hci!c(HCexoBk@(JwA0(uDe#gYZ0!iqQ=1gLDm`(^p6CTC(X-3v|FdI_nJ62T32s z=u|~`o=!>7K?v%Z2$65Z15B@BtB#c9iUBT0M@sn;i-M0-x8<=)AU=0}1?i)#hY8Rh zD;JNdD<^XXqZN$mu_|d-i~hp%9JB{l7wZ$71iCR<cypN3)v zMrsp`I+SPY!)!pGd+F~m_WWKV@7M`cLnjQgoiJj{FzuuYtSA&IgwXYX3EeHcn#+&}%MWsY?L{!(bT! zzcY`y{%p)}sL85vu|CX=>fP@0(~deV;`i3?#6&XfnhPN}wv2mN4nUETx(ad^-J)uZ z_b`o$qT5P}+#gGxc7~ln=iGl&8ev>Y{P0C6#a03stAw9koEmnKxdxgAT}C6DN)&h7u3rW0BL2uq)`QUrKt=8M!5P zF)C)83&5ja&C10t;WnQUoP&elF)T2jQm3w%ywPobujgaQ1xIQ*&Lp4<*2dX%S)H%T z_j9^X&>40`!tT1tpeyLUCG3Gho)|m_(-U+@w}st7chH4iPUbrNN-g?g|2csxmPe2r z=IbnSE%d7|ahSTpLNMD{j<7Y!Sg{xM&7jZyw--x8bUK32 zH`zc)^3n4uZW$ONhb#^$##WRuYQKeARlH_lj*_DK02pNj!>ciHTSuJ&G;1M2EYE>P zSU0>^jn^@lry~L_1lY>Ga)xr^+bnll{a++^)_;@S+5b&)&;3i~^14FM<9r0`YB45E zALbakeXryL4Vi5q$zE8yj?72lR=Nr`+j*Xu_L~W4mCh{R4&lQ*I%tMQgq0s85n3F( z6jhZAgRz~sn$2ipT!xYgp8?(61d8HwOHOMXbht9FnO`?w z%(8ln_p&PHOc(XLMQ&yn2#BKyp_g+Balk-KuS0|gdcxjFxTtP*&>JkeCG4Z1&*%b= zxd^RM?q>etP;smW1+~y%MJyAG4;Mr$URVh2;i6zs(2D?bZ_phvb~7Da_DcPWB?ysT zplT6$!u~o6`fFva>hy7XUqFM&INx#6|G*WI6877Jw!TPl-D1*>B+4G+3P8WxJG>WH zb0?Ja4yU--gQ5ggqYvn8@V&(>H(HWM)yOV)D+BX|Ca}O(( zBRS2KP2fSb7Y@p?Ve<7W5v^uL+_%k&suA8ct5ODe+pH=z&f8{9lA+!f8|0qeVXU|D zSdqdy+<$gxKW1G`sHUvQ;Z%(Qfod{xzvJ*{Y?(nS_vw=k7kjF&KCMOIh~A*L9*OHd z9+X6Bcev<+5isl3C5LM`<=&xJ`wwsP>(#+5UUqm}NzEuM7k26&O9q|Wug410!Y*u{ zL03ePV*8*1q)a)iS5G}Wt?P2VdfMUYGQL(HuCDC5JnXKn2z&JE&coHsP{bGX)z^c6 z>*4D8K#POL^!N2Rug}NA2f6!m=rfNT^aQo^CkV=9j_0?ofb@LX~1emv#@L2AF zn%FtP83+dIOR2~k^h7fIp_~u9nxIh&h4;X@53t@yT4s~EON3r|hR_#xxs4%an`X_n zc?3L|aR*QK15&OEIV4Nq*?veUlS8^inPQ$0%G8isQN$BeDgmA0okf^7YY&{NmDFle zk<}x|aS+Y~m_+v1b6#plH13eJeeVw4X#eOj!`tmaR9!r)8mlEFCD^1FB(Bm;8PDyGfq7+0%zb$gfFqH(Q*U_A*aQPg(k(L zD@UrVVt?bvBrcji!O%vqW!uFm76W=f&cHoPvnV)pVK@-<)RXNOjnw4$u-rsE7@(Tn z>5Nr+bk^C!$!Cuk`q77Z zQgLoA!Z8dcN05}A5v)q4$BT7?weD8g_6J#*!Vw#t#h&^llsmIUjSuDZ9!1jvby}Gq z>QLQ9b_YY*4v-W(4e7w@Tln+GBNCMWYnqO;$lNr|mLV}T{~a~@Fgui-RHMcrr5ab} zn@;Crv3)k?vjTE?&L#N%fJ~>S$ky5-)G@(Qi`N1Y=e=kHes<{ChtUu0Qc31UFsjgL zt(ps(z$ez@9olU*fKU5k9|1trMV=WW^LJ>dD$OomLEN$hy@@HYntv26%}+Di^(Y~= zI1f|EGj>KFA49#>2y4?laxT;*-hHFd%*RnD1bvvvXBQB=0i3hZIkV}*90le&qDXg) z!>F*0b{q6jEcT2tqa-)nRt)jLdH}Ua=$KQcvvBM znx8f1sCdp#N}pKCp`gF9P&e_i{BesPs&UIX60U9Cvl-@l8_nl+(H{7Yy!1%ylMpg82lDh`1rb1<=7rE+B|Z?(Q_gkOKI7&bW_$`|E7)++ z_%wqf@4#?NUY!f!NuAV`Y$a`YCM%+Do`_6jlD^^309>k1TzBg`)P0ugGM@u9jskF$ z=3y944viQWhO8j_s&PzMgc31s%SS$+Lo7quk`PPlM(RY8f-GrdevU9Q4`sd|hn$S> z$8|7@`Ets67J->#kQJXjR(Q5tzLTeb7kTdPjBz_OG44?6a98F4GyNS1v6T$I08kv# zVt3+d90!1Oj$ep5lP$3~*u~aM_gq<_^n3p zdfRV#mxj~w0eUVoEkLK1&$?&`!-KnFzy30`I@^AYm zXKcCF{wdRe=w6)NF0oGaSdA$Df3new@5!Q>*p>fgZq9db&$>GnY=)R8jvY&Jm3dGL zM8z4NGFI8TpQ3^es$d#B1m%Sl$Z=2;fUwi0Z=djTpjy5*G8kF zf9xL_aVr{(49%?ENgrk{%Z&$_frHvMR3WHs1+^A?eq>|;mw28WbP&D}<#~!d1ooV9 z?WZW6P>q9Qu7>q;W1Aek=(G+e<3$H~h!$$trC>%JtFqcz;fP~xtX0^kt`c=jxMmRm zB*76LW?j`D=^%(xacR6x{{$|?nDOmLFDh)0uu7HUd&4|Z2~10|CE6+$gJ@jD${dt0N-_G<>;`FY2tgjEh$<2RvN?xmxx_ zcO&UF5ItJ+_SYX zDj`dt7-xP4ie#ElHy`ti9SftN^g!y9k zD=Auf5$g=K*!d#Ss7%eQ2xj2srr3|cd0Xr!EP|`S#gZy5o@nfOuAha7`GPRM$c)Sp z`!|$qL!9KY`TfF?$pH!Xy56<=Wd3}d1b$cr38GT$C3F(bbJaX!;4U%3J_3RHyKxdc zL64+lqVi8!O)|>^S^wl2keh=z;WmJ5bu}Gi>v?zVXVM6_pvl~sYbY~Kv7d8gZ6j7X zf}tHk;7A;gFhT02o1aF*%*)^%S)pvq7XxdtZsa{o7-pE=LK%@AGH=H~gTiyiS($EO zm6Swfc`u85P^d~^Gs{BA^TkkAH?mSR5IBM=i~@1idN|HpMiFzZ5-x!wEhzIC9RxGj zv4IVs_K8P%*f}A&lJV~l7rorhMR*8#mA^oxrFb@7VU{X8@nEFDNaM#RxKYBMpvPW? zxDnn$^nwjX?Dk9571yebNVN<|%c#sHsePVDReJ^0V*A*~IJSZ+*Urv{@e9Gk<}<*F zC*2nVWjiT78d0i+RoG^`ag|rz*xAlc!#8z#7;gLu=m4XmtI_Zp2I@}Uci>2Qw}@H` zYxUBC+BK?E-YYhv!^s@eMAmQ{YIOC~^Hbxpi;Oo= z#uHxAlpmp(2eVzt>KWG+7`~Qe$ZD(92)c4A${;2hw(%xw6m*50vHwEJcniQT|A`5w zx!$AHHQoji-Hs0;;AvQWE1Knr%xb1+Ib|m3K_6z1P_hfmg~tJT_5vmb z@VV1(zx`ryQN5?gdMYN}aUFtgEzznea8}GUP9xL+ll~ZQVHQz4DdU5p)eezI-Acy(Q0!Uy zFuO%TTENmzyX!HeOfiPRp9HBJ>6DHcmdm~50GX9#_I(kkou^Y5==w0T4%aa_55T@x zo6}r$JVSFCPoCy^az^Gtj_M~WPhm(e7q!IhY^d5igCoXfWBd?CSR*!P>V!7u3ftye zP=?K!BsS-QKD-rBPI>10Wqg9?4=u}J9|P@Uoao0w^Yz=tIP~H@=t^9bzcO{4e#&3D zg8lVUTyy@q9T+s_O3_qt4KtJSS1##-PqF=V2S~A{S$|~_tVd(V#kjcz=fn#On)WSf znAfmy-op7{7&4RB6QDaO!0>VVR1(JSOy7b%@L?egAwY`) z*Lpf=C+KeawU;%&F~SlyxERJE-%YzQ7B`KQFDs4EEd5%~Bs%6|ne&6wtA?o`(gJjs z#(nuB4EKU3KtCgfhe{aUC7R5aTCZ@PE9Gws&kBqYtuVR}-7Y;|Pg4T{`gCwbv70_A zW4sakZhEz989ws#K|kx(=nv>VdIb~XrlDfyzX^5-&=^MKql+;40VEnsnd)Wu2`AH& zu&s|yORFzWCcPYbm@C4{> zl-)EKm>L+S)0l-}`YoWFT6`>jafsm;s~Ap^+1XLScHWJCF*`nP`;aT3PoqDIw0+PM zN{SAj#fZ+Kn9TcR=ZfM0{YiR1>0q8)${F4-*85C=Ykw=PP6>S`q|K&hK=~(aE!=%J zT?aj9ledcP@H9NrN2f4%wG;v+KtF=a*|cI3*Zw0Ez--E_Ef2BeCo5MJH&6>csN<#% znUPPys+b-4l^b`&rlN()1bB_`Um2~Rw0_ciq&$Xgcv8jsNrylUOWg+}To=OU#F;Zt z##jT*73?LAvBh-0U=M^C<3Hwn$j?|aKAg?i_XKMJ&RASHR}->lEXgH!AEI{rInevl z(C!eewXk0awvjeTT}U`L(>B3)H6KFxy-1$F=lHlgNd8HmK&H^@--6WS+2So&5uY#n zjN46Hw4;Cn6}JQ4Q+5~Nw*@{Cyhc5|y%XgnULLV;wI$*Nm zpHTY~H_N|%zWEBOZC{S{pMjKDW^E+2_-tDlQLUo2+IOJ3%` z+RNpGVTLb681|v8(WlT>quT{uQ}S)-wngB#JWrwgq0sjMNq-g+j-l+PrDe~9^0ezd zz&TRhrr&^3+#q9Yn{*O9O3p+A#4p>#eARP$34W1P; ziYo;EPJ^@a+ForMC{IE+jqa?R4v(dZkE2x`F{O}x67+?{u#nDnD5T7U zOqQ^r2F^k^dmnYgK-ptqYbxdf8x`!J_wnMr=;_l6tL(+fhp$dYGa92x7h@l=u>H{` zXm^u^T@&THMKcuV6=jSK%v9J5<%|&ya4h9q!3Hes1CiyB(m7kzyLHawa zUY$0a%XJ57Dcb3Dr-f~CGA1`wQTMQ5+hU5d*7KmQ(|*AYSAIVHq*JGB1-qG!6~6`S zQx^8WO5bui=t~yX9Dd8`q(?05R#&43`)V!AyqW&pxfZi=r-k(vcX&K>1ClweyWjI( zM4@fS#u&TJ*X!}qwSuYMOX+sO4vIZX=|BT>9;9oc%RQxZbRJ`4^p@X^sIX?C!tRA7 z%4opCzAV^L3#*TCUHM|g`KW7&r;KI_c98D#a@|)gY(M6qj2^SF<(R)R`k{q2!DeOj zD+{|@Fa$BY4$||&$%lQ$exNN!4_{uQFrK3zy>4N?ihfU!S})+bF)FA1*cEqL82d|@ zUX^@ljMkSg@r3Dh!IYk1a$cxpc40(e`m}`&3icxldktO?rjIVm^&X~26ejiz)3bsp zTZicv1$ApUMZy@AE`5TH5&LeK_-;3A&AuC^pIg}XG|>e&Vu-F4dxq&>1v^Mal?G1V zO0HA0Sx!?FCQ`6Xt&%!=8PTqsPFmO>5CzKVmlpOr%t|@A8uO);DvaKX(T=a1X4P$y zxgXbe7Yd7IxA-;wdLTZW-~2m@`7L7KO3Q2z^tqgT(U}q3GItR&YO=2S8(3uIPNrPRHov7S|QtHMNPRe{W09m}kuJMv^!708@K z_vgu+M2m6ww)LD;ATw9TGI0<Ea-NOX?1sAvC&9 z=Q{xS^d8C&AcNEC%@Eg?i8LisK}GQ)@8#5zQw?E7X);}PQCa{^Bll3nlEsvz*Pd<1a1_#U0_^b z60id20hUmti5zVQyy^t;Ecxj(mFJ@TEWGCg%Jnoyc-o6_tFEXEdzWAyVk2(XR$%2w1?aVy`i1wAHXxLKUEx{A^N!I8r=HW=06B{ zY4jjf>5n=-3|JPpfs$IKK821$&L?S({#oZy^zy8`43vkxiv9)ApT()^IE~`)f1LVo z@H$TIW%mFstYA0-$}_Y)@-;f7-4%V1mg-fWZ&9265!a6Z_c>moRr=$OU(t5G&-Xiu z>(THV_$2VN-nZxoEeq?~6Lie))1ILffii8C{?p0|EvfI0PSW0>>e3lnP}`5u9fpRr zT9uwa?vd1Xlr7YTFp4(7ua~daUZq!jTeMSDUVbUyGrlfuOy^c?fg~tBzQfuf@ZXGb zpYJn}{65Dqt(+d#@6wp(UX-_ozopHT8JQ`wbDS>1OdY3njww_xvv62HQhZ7~tT%^G zX-D*(fyw%D{rLdfxyyf8t0zC=%u>u<8Q|Tn>G~?|{T1ix&uQOv@8uj7a_$kW>e25) z)ZVAx15WmbHktQRc=pkzKcJTf*6SNJ&NDY^`+QsUHtmpOJLo^Eyj(v;Q_Fkw6X3Z* z*Yv%UwxF!&%-^OR@N5VDPZh)ZGrB(M7JWM;e*w_c?*aThVqa1_zv@B#RsCqyBl?xv zt7YHO>#02O1APdb&+BjK2djPx_{+*)fKnNG4dw5KxqLD1U=3+EILZJ&3wTI-7;`a{G`)LLsY7$zP*LhQrF}1e8;JVMN#&p<$|pHkpBhJz!|R&un4=$b zp694??2exA7}CBNzR2+e&2roW$v6619fvdrR>2{Sz2XhpTe`vV1|2Bf0{G9-%K)dj zHaM=-ZmdcIegN6{mD)jpz2OvU=eo8)+KnX{z`4$=0DlQzJwgk@A46Zu!k=_3)kCGX zIu2`(c|Q->@4XB34_Dm_IrXI{0N->zh;jWIzMa&H{XcRfwWN@~5H zU!%N0%FR;#Qu!&zaV->l3$3PwUw3SD@QCK zqc_~`JnYC+CBbtQX7-4-&Ho@~?a{JfP)4hM?Kq;{B=k$8Tzd;sVEgwwk2!u=^+D%x z$4^T?3JLQ{jsiYYawp&($31{QDSgO!iY|#f?$mV8B!dn+W|lk&`o`$ffSpy(0=D~K z0c?&kJYRneaCH^)oPe}b)aCu7^8v@Xp|?Q!2ech>^q}?-#!^Nn91lb_7gndE9I!4h z$(3}R6J@*gU>$KJneJMIb+=GoF6-q9wBq&nLhx$WGw_-ByPnX@=trb{#C4pap{qf8 z-g6tIjRn8xYL?agl4FneL03Cg_y2Nr%IbbXyE77X@1z~R1@1-oa`L&fh#sZ|?kBX@ zLQC+NoNe1I(V$28liH1t)*~^YS=RV+3$i}V5*dP`+bPV2o8AzZ0=?V$lH=NFpSuC~ zpg!wqK<4xXz{&JD;0*d6U>%(V#3=@FnZPE2m(VMqbV&J9dehT{J72BdZwQ>BeTg=D zyR{58dao6DOxug{=cRl?%HNRkOH%%slvnA@6Bjrp@R-080$&oSIhbd=a% z6L>=4O9C~g@C#feaMZ?$fi-^STq*E!f%9+|;v#(ZYZv`9E!7YYv zc*;@ZT;Sa1{DgCk>k`*W_cr%?-S2nn$Qb;%SID_R0N{h1Jx)BHqs!na zI`R*EzZ)|ig-*BN2?4SNnhy9`_>P~B;yCH2+u*$=^mnK&p*vAqLSIB}37+%J0{nZ_ z2IyYY;?5*$1N1f2;vN)g1N3#&mcsL^0UtqaDLsnXQu-!pOX+dc)=(?`C+v}>|ANNtX?b%Z6(36Uw55{+D|&YA znm>=0cO(V|`?nfq-yS2CSkbj>*TO}+Ku)e$jCxwW->T`1o4tvF4%}WJOvTOQz>unM zYe^6GCCqqNDslOIvatcf1lFF+4B&!hyV?d4eW*?kEL=dV2h-h`FQCrBezaLYmn4R^ z#8ZQb4e_K2w8Jn55FlRnHAI-X{6R}Xrz`4mM%Ge!J-RVmdw9k{*uM>T9z(Y zvS88TRjZdSU4+a0<_nh0Tex^$W6OM$7dJ0lIB&s{^MNl~Jil>aQ%e(d;%6)d&BTIc zvh*72H1P0Z;~;CB=Kg7Y8qYImReyhKXtindp`158z*^fW)162sn&Lb|t?Mb1n>}D1 zLmA9UL)&_>Y&?}R_OEH)L|eCRrM2su+g7)=Y}$26%XZOZm6?cBM|V7x=uy)0C6m#0 z1!lymu*@NSQo9lF*%aSz4W>Ch5T_mneVJ~3L-G9OhYSFHj~}7Kbh_^ z_P6!W=5z{TXjM-SbsK$s@pMn);O^ZCGXqMZhs;E}Ct+sMO@emtz}t4OOC*>j-ra2` zWYUtEy_*a*fgSy*v|7V3EopY*9?HO76Ly)UD1oTy#uTrO_iygU5P-I2nqUO5+%$Tv?SFf762Am51c*28rZ0^c1M4_ zJ3&2IN%1ravIf!?lC%qG(uALXq2@&Yz#hxia9+jUGoHu;JcHP=Ck|sb#WMpig|ub1 z%o)^<{mFsuJ)OongoSuY7!@h!dRRaO^_D_g&3J!S@O~RvolL=>v-I6L)b6Rt=pQJWc z#Sik(O$jwym^3@!Q5&YL-;i0O!Q_@?CW-l@O@rxyWM4w&d<~p6N9r8vPgoQ<1!KH! zEeb2ODg&!G4oVxI>UbUwOC{i0dBK|Y#4~o_CgqhXO6Q0e@K8&-H(7fFTjm zu%dEwDQ``5ZAx4@n8*xZ`A@)oYQyB8OInSeN=jgPqZX8PiT#R@ z#LyA!F=|#Tp6bL@vFt(uj4u^D3F$=KY)U2jH>BcetFrCrU&uGQdYz#e`U5I2R9ZL4M| zDbtS-W?-L6m@Nq0-2+f5kHqDQ&0gxbD%|7rxkPQ#+9XiE~l z6SREA{9U^c2+^K3-oFQHo+PZv@~0-FuOBPMl--1*^r``D`dx$IYEEzNb_32W8?otPOQRG! zT)G!)u6r-zmJ?fJZP=n>6xR%95}V>Zh!NI`z?R?7^!%Wy){~-QzT*9|O4P?s)c(VJ zkA-&{R)MV+$L6pqm5j48l<2{N$F&_lE|J0;SMeTXS4g#5(%mV8`PL@z0}?!}4H&-^ z>~*OK)*=<8Al0!(AQf4avqIDaLcUOPQ)*MVN6s#j-OBN>qY7s~YteE5PSdkB*<)$6 zUrG|vGFy`%vb=pp3Y(>*C4$TP#QY_BCi9c-A$$_2doOQqcDAbsO2svXfx5h0%oNJ1 zzOE#)@pg7=A;c9y%G`bTU@FDti)Z#C9&mnujJhCt@?;khTGBo6g#nB?MU4sUoLQ_J zOGxFoG9Y^d1dr|Bi@ccg6l+wrw-wNMCatqmmXEdUvl|smol3BfZS<@$%;Z%#S=b8Y z;qCFRL`p0hPbV`*dtx8ZOFA}e9!RG04+9N7sT5-QxN{11$NR*a_;hA12+oLl@N*oj zIjC5s>nYmX0M&tESwp4J%y*^@)dfo^2$EY3Po;lzP$a8n|Kg{0(WC$W&;I5;q% zOoEu#Z0t|tw1G26TY9&_QAMsQn@NCM+Wyp?dfbi*QHS(ByW2jpw;;mV_~3 z@vKeua|0DzIt{LcV!V(C`)ve4oi|%-@v?^3n|8%GvD`3sm}U${g}4poL0$+K|@_BzGqVp2gNXT(e7g}oq z2|8E8p;ZBksl_xw$-CDjkw_g2abJoW`0i9;!Ygf&&7M(_&4jJWhHl|Ocj_h=tu@j{ zV`5KyU(y&fv-g79nlrSjD`R^!a;4rhoDZ?jCfSLN${Z7BN5bTwn6a{77#im)pco;i zDj8V{d{)j#R#o7Aa8q^oEu=z8dn3!;I|DDyv8fcNiAt#Cf4DKP60y~(I6k0jX5*;B z)xOH>)l>xbL0Omzm3iO|JcDUUsbvY>F{x03Qz)giO7>G(nwtMCx_rf=UAqQwHsn!r zLWxr*=aw1b4Kr&xOqP8!N}M7-IAGYv2*f)zDn70!dQ`y3*k}GVi4<-jW^fKk@mY?G zeCsOFqqZ)kB#guHY9NCg3h6FJBtFbJ=U|2s`AMHeD@Y95(zrb~QN?+#VCP;9JqN5?ZkupIQxQD3>xz5yW;bC{iMvXwI8RUm zL=4=TOr@0Bv!ntPAu#7fLl%#{->C4yeXBM$uHtsyyfoykz6NZMiGjlPmR(lsckkv( zW#asVk&sm(yNjm^h`q3zl|@QgspdZ~&$RO1H3?2SX>BrXmAK&^MMUPncZ!qU$pLD_ z*$FEyd(&Mu-Be<|Y3&c}&3uy(`tqpxf@Ol}YHbz$M%qHw<0Oj^)MrsJs9pVWlPj%V zE#ErUE!2D~Ew|W|#aA>m4Vq_bop0NBV0#yxuvOkcLVid2tjkv{*oEX>DaaLec>|x) zaMv26RuQ9RAD5*qf;Jm3Ie>hQI<7RqlD#F!j}u5vqf*MIV0a>d+f0bD`x5K0B5YG~ zE=n8=rNGj$*QI*a@7|J3?B|pmdnsasU~)#t!?Er3s??Bp2eOJRK=Nd5ToM-mMbbB)yH3#%7#d(gg{_M(h|pp}UdOHrID$f%*+ zsA2j9W5`M#kEu@xXKd+F}F2m2Ff5d&Qww z9KUKl1k9GR78I`Sma((ZyU`*A9=2NxxOqZYqa--eps{W|3;Tgx2wYppHn1f(S^D)^ za(PrqY0W%IOt(yEw8I+jptLlFX9yolo|wK%^h?8*_z)XWl1FM|HIQJSH=dIo(V9n* z0WAexY`rt0YrYK%HD!B_Z-dX7E@mqju=o|IXUn{+R%abWz9cG2Lu>XOD(!_uBhQh+Gc)Ji&LLHAhCSmLXA1h*?b+JwV>S3bCQHhQm-fRO zl&{v{YZv@Sb(hk_^L80NM8F>1g_-EZM+qQl&O7n8$*dZR^BtwOz+&u$rs6GG53P7b zwBn-x)N~$n-DCL#uT#dA&V~L~$Tb(EXRbkbz1I5I%GhsNjaNv9w3feC4zD0yl^NEi zl;?uy=0c1GG3MMtuWx{5JD@ku4ckP8O?)5SQ-d$R!0HZsc*HS`@21rVHiD3PM<+~_ zg!mdvQ8SwJv?tIR2Mk_993Z)tO|lQluyNQK=Hfk(yKozJQxzh(JsX`DJcpND09LXF zg}z%Ru`jO;^Qpy*qZ59obF~bJjlluUKnOTfPnui|pcOmFDqw2&v_oGr`sbxf)x5k5xi`u9lCT9f zvvb*Y-QZ!TQ(CTtL|!BXe08npr5*2W_+6PM_yRuQfbU1Gq7C>g(K^&@$ETjwlYE77{ zGNMju6HD@_@i7j%#2(|UKgT2E8ol*QC*Z6`xj~JnXLrlXm7_B+F5G7XU#)PjrSKHJ!SRjr0 zGz%AKwtl_L>>2fQdc-L?bLKjh!q!zz%NYnScc#$XKgYQmoSYZ2c7L9GJ;L&CSd_C; znpG&97Yc_S6M-X7=49UGd3o94tOLs_fj=Az5P0onR=9+zIzQ86dAu>?dZ6lVScbhu z1)ELd`k={bJJ|;g&L7z7omfATtu0;!4cKEo5r;Ik zK1Q)@;;_OVu5{#C=goz;1s(^V8Mp@yDjc}+4BlF?XN0U7XOle-o9j~iEkKUjgaB{g zk0qVWqP+cabYP8nJEO@hR*5r@gp7s#Kt>egY?`fQXCqXc8$HdiL!vE{w;bL+yU+s% zMV{FWxN5yV4WH(p ztyKorW=pHYM&^Cs5ete$li{@kcKp>ZzlqUcs^X`8U#*5KNn+qSDFqRTecwiUC% zBWLgAwZfjj{(&du;upMMv48Nno!6^6{i)cPzaLTc{&AA*R70&S{2wUrz40eJ6&Z-= z`{zx+=RN=Rbjw!8a=E{an|6I z)4-=VJzB_H^c0#0 zoTLQ;{PO|$#C9MM@YHCbF;^%KikF$jN}TS{=vRF;E`0gL8ypLI-K^DERZ)%8qOgKG zGXK!%W3G7`e#^t@(?U}qpv3QSPYoqPN!_c5`n&|mvw~xDifZ)G*xW#H^awL3rx5mMI_jtjmhuTWHw?X{# zG91!H{r7+uqyS49lJXFK6+qXggoZri#DD{Va*sE^9h!PWLq3m74~^)dvQQrs)L|Xi zq6Ni30KJ7q0zAkv)-a6EMmtzeiN{$H932BWRHo}iH6&P=JQfxIvqrWaGvxPJGv*{s zn=;c=60mTcXYAI{=&`Ax7X0&uT6C)hN(9F?im8veVd|;M)-7zXFom@ek0&&Ghc`5O z92SS3Q28>98Ms$>!-r71BY;VV!B7?Ffed+l9(TZM;({+s4ODtcL!)=QFx^vKY+h({ zH+0fCydu$o9kIm@7Co#OjVdfC^nl-(jf8tRehV16chS zw%_l9<^jJ8wj4ddqX>k?Dum|sU;_9BHnzSF=Y)DwT^JU;!|N5lzI&<*lHnDH#5b-- zcOoS?c0Ie>=wrdL!x$^b!Z!MVC@{kPjeSyg``z#$sKS+@(T9|%BRsR^9*;v0jy}PP z!xOzqDqNChKpb)O3HYMOe!{AJ!tFtm2mJV=11{v9bKq)G3= zu{)$@^aqOJZYTV0GX{+2Uc&dxAX2S|%`RxBi*t`cCT!tn3*(D*umd-T_iXmUYF?~m zCy&k#>%m~)^734TdHQv2N@b8-!O^EM!%v0AP6Vcg#vX$sGe0lOXP_FU4aN_SJ?Hln z$z14IRk{ZqF*9ZW-hx6ge%H)9HGoAVL|uqbJv78Y0N=2Nu^;o}Cr^T-&)}b~tFD-; zLr5UU&%sCwc*`_x8b=eJh#Cen#dgQoG>AnUqLK(DE)NF$fDhsDB^^;_^r12oU(o$I z!aNVg92$LDA|}?}tNE4Vaqw{z3y!@kzVs>zB`_cyGC1}sq{HRlXs-gdTWB&>LtxL$Kjqj*Js>V|}UT|O!6Y6n2vz|MHR5vfwY#9a8Sg2&yF_>E2-2fR9PX(OEjSxn#s^IEyCwLWK&=dxd;5B-JHTSZ3uPxpYqX6Dh@RMu! zwl!YU_?Kil^$35`e4UZbewe0nkBJAM8u&aK^Ob2-od4_sF_g(+jRLLsNOdNWu4#|& z!KXcOUlu>&-mtEvGy5^mdh1g~@8RF0LT`ccY!!b777zOPv&m)LrY2icv&hLk;3wVw z3%}xv5>)BoF0GgSf3)hr`6maPZ^C;Y(WZ{(j#%*@1H(g~XuR|3_~Z5Gf9`uMsP)2~ zt$5Cr=r?xejpM9kqw9*D^0C5vj)wl8F1!E#7q1_}cfjn|ZCtLgvBInU|F9}5KI&mM zr&4R<$+Y?oN+KbjjpN$4XF*0;4IU^g!}sIIg@L~8RKJD5#}0K& z>&4-Iyd?fso`zA|e~XZe!v^@}2DS$u_xj}c!-qlKjFHzld3F8hH;u#9I$Y&|Zt<+d zH{`Tze|#|EgB$CSdz{6r6CZpC_x^%;?YE#k-wIHV!MI)S2;D#z;BP6Nk3;nWz@@-= z1Vk$_)0$X~kH#kSUSWvChB8wrYMFIw8KHKOl&u~IMkQ2N?)#+b73pVM2-4 Date: Mon, 27 May 2024 10:01:09 -0500 Subject: [PATCH 4/4] v0.994 Adjustments related to `schwarzschildRadius`. --- .../Assets/Scripts/BlackHole.cs | 4 --- .../Shaders/BlackHoleAccretionDisk.shader | 4 +-- Singularity/Singularity/Singularity.cs | 2 +- Singularity/Singularity/SingularityObject.cs | 26 +++++++----------- Singularity/Singularity/SingularityUI.cs | 2 +- .../Singularity/bin/Debug/Singularity.dll | Bin 32768 -> 32768 bytes 6 files changed, 13 insertions(+), 25 deletions(-) diff --git a/Singularity/Shaders/SingularityShaders/Assets/Scripts/BlackHole.cs b/Singularity/Shaders/SingularityShaders/Assets/Scripts/BlackHole.cs index 074ed43..2ed172f 100644 --- a/Singularity/Shaders/SingularityShaders/Assets/Scripts/BlackHole.cs +++ b/Singularity/Shaders/SingularityShaders/Assets/Scripts/BlackHole.cs @@ -27,9 +27,6 @@ public class BlackHole : MonoBehaviour [SerializeField] float gravity; - [SerializeField] - float schwarzschildRadius; - [SerializeField] Camera sceneCam; @@ -89,7 +86,6 @@ void Update() //blackHoleMaterial.SetVector("blackhole", new Vector4(gameObject.transform.position.x,gameObject.transform.position.y,gameObject.transform.position.z,radius)); blackHoleMaterial.SetFloat("blackHoleRadius",radius); blackHoleMaterial.SetFloat("gravity", gravity); - blackHoleMaterial.SetFloat("schwarzschildRadius", schwarzschildRadius); blackHoleMaterial.SetVector("blackholeDisk", new Vector4(DiskInnerRadius*DiskNormal.x,DiskInnerRadius*DiskNormal.y,DiskInnerRadius*DiskNormal.z,DiskOuterRadius)); blackHoleMaterial.SetVector("diskNormal", DiskNormal); blackHoleMaterial.SetFloat("diskInnerRadius", DiskInnerRadius); diff --git a/Singularity/Shaders/SingularityShaders/Assets/Shaders/BlackHoleAccretionDisk.shader b/Singularity/Shaders/SingularityShaders/Assets/Shaders/BlackHoleAccretionDisk.shader index 313d4b1..63e2b66 100644 --- a/Singularity/Shaders/SingularityShaders/Assets/Shaders/BlackHoleAccretionDisk.shader +++ b/Singularity/Shaders/SingularityShaders/Assets/Shaders/BlackHoleAccretionDisk.shader @@ -43,7 +43,6 @@ uniform float enclosingMeshRadius; uniform float blackHoleRadius; uniform float gravity; - uniform float schwarzschildRadius; uniform sampler2D _CameraDepthTexture; uniform sampler2D SingularityDepthTexture; @@ -287,8 +286,7 @@ // 0.05: rate of smaller steps when approaching blackhole stepSize = rayDistance - (blackHoleRadius *0.05); - //rayAccel = normalize(gravityVector) * gravity / (rayDistance * rayDistance); - rayAccel = normalize(gravityVector) * schwarzschildRadius*schwarzschildRadius/1.04976E9 / (rayDistance * rayDistance); + rayAccel = normalize(gravityVector) * gravity / (rayDistance * rayDistance); float accelFadeOut = clamp( ( length(rayAccel) - 0.001 ) / 0.001, 0.0, 1.0); //we fade out acceleration over the last 0.001 so we can have a smaller enclosing mesh rayAccel = lerp(0.0, rayAccel, accelFadeOut); diff --git a/Singularity/Singularity/Singularity.cs b/Singularity/Singularity/Singularity.cs index 0b8afa7..392cd6c 100644 --- a/Singularity/Singularity/Singularity.cs +++ b/Singularity/Singularity/Singularity.cs @@ -5,7 +5,7 @@ using System.Reflection; using UnityEngine; -[assembly: AssemblyVersion("0.993.*")] +[assembly: AssemblyVersion("0.994.*")] namespace Singularity { [KSPAddon(KSPAddon.Startup.AllGameScenes, false)] diff --git a/Singularity/Singularity/SingularityObject.cs b/Singularity/Singularity/SingularityObject.cs index c5ba166..4e0efa2 100644 --- a/Singularity/Singularity/SingularityObject.cs +++ b/Singularity/Singularity/SingularityObject.cs @@ -11,7 +11,7 @@ public class SingularityObject : MonoBehaviour [Persistent] public string name; [Persistent] public float gravity = 1f; - [Persistent] public float schwarzschildRadius = 0f; + [Persistent] public float schwarzschildRadius = 32400f; [Persistent] public bool hideCelestialBody = true; @@ -64,20 +64,17 @@ public void Init(ConfigNode _cn) singularityMaterial = new Material(Singularity.LoadedShaders ["Singularity/BlackHoleAccretionDisk"]); - if (!_cn.HasValue ("schwarzschildRadius")) + if (_cn.HasValue ("schwarzschildRadius")) { - schwarzschildRadius = 32400f * Mathf.Sqrt(Mathf.Abs(gravity)); + gravity = schwarzschildRadius * schwarzschildRadius / 32400f / 32400f; } - //scaledRadius = Mathf.Sqrt (Mathf.Max(gravity,0f)) * 5f; // The apparent radius (in scaled Space) of the black hole (or event horizon), not physically correct - scaledRadius = schwarzschildRadius / 6000f * 0.926f; // The apparent radius (in scaled Space) of the black hole (or event horizon), not physically correct + scaledRadius = Mathf.Sqrt (Mathf.Max(gravity,0f)) * 5f; // The apparent radius (in scaled Space) of the black hole (or event horizon), not physically correct singularityMaterial.SetFloat("blackHoleRadius", scaledRadius); - //enclosingMeshRadius = scaleEnclosingMesh * Mathf.Sqrt (Mathf.Abs(gravity)) * 120f; // The radius (in scaled Space) at which the gravity no longer warps the image - enclosingMeshRadius = schwarzschildRadius / 27f; // The radius (in scaled Space) at which the gravity no longer warps the image + enclosingMeshRadius = scaleEnclosingMesh * Mathf.Sqrt (Mathf.Abs(gravity)) * 120f; // The radius (in scaled Space) at which the gravity no longer warps the image // Serves as the radius of our enclosing mesh, value finetuned manually singularityMaterial.SetFloat("enclosingMeshRadius", enclosingMeshRadius); singularityMaterial.SetFloat("gravity", gravity); - singularityMaterial.SetFloat("schwarzschildRadius", schwarzschildRadius); singularityMaterial.renderQueue = 2501; //No need to be same renderqueue as scatterer atmos, i's treated as an opaque object, when atmos/clouds are behind it they are included in the re-rendered scaledSpace scene //Otherwise they are handled by depth-testing @@ -304,17 +301,15 @@ public void ApplyFromUI(ConfigNode _cn) Utils.LogError("Apply failed"); return; } - - //scaledRadius = Mathf.Sqrt (Mathf.Max(gravity,0f)) * 5f; - if (!_cn.HasValue ("schwarzschildRadius")) + if (_cn.HasValue ("schwarzschildRadius")) { - schwarzschildRadius = 32400f * Mathf.Sqrt(Mathf.Abs(gravity)); + gravity = schwarzschildRadius * schwarzschildRadius / 32400f / 32400f; } - scaledRadius = schwarzschildRadius / 6000f * 0.926f; + + scaledRadius = Mathf.Sqrt (Mathf.Max(gravity,0f)) * 5f; singularityMaterial.SetFloat("blackHoleRadius", scaledRadius); singularityMaterial.SetFloat("gravity", gravity); - singularityMaterial.SetFloat("schwarzschildRadius", schwarzschildRadius); ConfigureAccretionDisk (); @@ -327,8 +322,7 @@ public void ApplyFromUI(ConfigNode _cn) UnHideCelestialBody(); } - //enclosingMeshRadius = scaleEnclosingMesh * Mathf.Sqrt (Mathf.Abs(gravity)) * 120f; - enclosingMeshRadius = schwarzschildRadius / 27f; + enclosingMeshRadius = scaleEnclosingMesh * Mathf.Sqrt (Mathf.Abs(gravity)) * 120f; singularityMaterial.SetFloat("enclosingMeshRadius", enclosingMeshRadius); singularityGO.transform.localScale = new Vector3 (enclosingMeshRadius / gameObject.transform.localScale.x, enclosingMeshRadius / gameObject.transform.localScale.y, enclosingMeshRadius / gameObject.transform.localScale.z); diff --git a/Singularity/Singularity/SingularityUI.cs b/Singularity/Singularity/SingularityUI.cs index b53bbab..ea44871 100644 --- a/Singularity/Singularity/SingularityUI.cs +++ b/Singularity/Singularity/SingularityUI.cs @@ -62,7 +62,7 @@ void OnGUI () { if (uiVisible) { - windowRect = GUILayout.Window (windowId, windowRect, DrawWindow,"Singularity 0.993"); + windowRect = GUILayout.Window (windowId, windowRect, DrawWindow,"Singularity 0.994"); //prevent window from going offscreen windowRect.x = Mathf.Clamp(windowRect.x,0,Screen.width-windowRect.width); diff --git a/Singularity/Singularity/bin/Debug/Singularity.dll b/Singularity/Singularity/bin/Debug/Singularity.dll index 84f4658fae7456556a366bc38ad92a80c0dc5651..e3bd19d23ccd00c9a99ad24c0fc0ec5c21f6f267 100644 GIT binary patch delta 6761 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