static bool Prefix(SSAOPro __instance, ref int __result) { var depthTextureMode = Traverse.Create(__instance).Field("m_Camera").Property("depthTextureMode"); depthTextureMode.SetValue(depthTextureMode.GetValue <DepthTextureMode>() | DepthTextureMode.Depth | DepthTextureMode.DepthNormals); var keywords = new string[] { HarmonyPatch_Config.SSAOSettings.SSAOSamples, "HIGH_PRECISION_DEPTHMAP_OFF" }; Traverse.Create(__instance).Field("keywords").SetValue(keywords); __instance.Material.shaderKeywords = keywords; int num = 0; if (__instance.NoiseTexture != null) { num = 1; } if (__instance.LumContribution >= 0.001f) { num += 2; } __result = 1 + num; return(false); }
public static void SSAOEnable(bool enable) { // if (null == m_Controller || null == m_Controller.m_TargetCam) // { // return; // } SSAOEffect ssao = Camera.main.GetComponent <SSAOEffect>(); if (null != ssao) { ssao.enabled = enable; } }
void Start() { m_SSAOPro = GetComponent <SSAOPro>(); }
void Start() { m_SSAOPro = GetComponent<SSAOPro>(); }
static bool Prefix(ref RenderTexture source, ref RenderTexture destination, SSAOPro __instance) { if (__instance.ShaderSSAO == null) { Graphics.Blit(source, destination); return(false); } var m_Camera = Traverse.Create(__instance).Field("m_Camera"); __instance.Material.SetMatrix("_InverseViewProject", (m_Camera.Property("projectionMatrix").GetValue <Matrix4x4>() * m_Camera.Property("worldToCameraMatrix").GetValue <Matrix4x4>()).inverse); __instance.Material.SetMatrix("_CameraModelView", m_Camera.Property("cameraToWorldMatrix").GetValue <Matrix4x4>()); __instance.Material.SetTexture("_NoiseTex", __instance.NoiseTexture); __instance.Material.SetVector("_Params1", new Vector4((!(__instance.NoiseTexture == null)) ? ((float)__instance.NoiseTexture.width) : 0f, __instance.Radius * HarmonyPatch_Config.SSAOSettings.SSAORadius, __instance.Intensity * HarmonyPatch_Config.SSAOSettings.SSAOIntensity, __instance.Distance * HarmonyPatch_Config.SSAOSettings.SSAODistance)); __instance.Material.SetVector("_Params2", new Vector4(__instance.Bias * HarmonyPatch_Config.SSAOSettings.SSAOBias, __instance.LumContribution * HarmonyPatch_Config.SSAOSettings.SSAOLumContribution, HarmonyPatch_Config.SSAOSettings.SSAOCutoffDistance, HarmonyPatch_Config.SSAOSettings.SSAOfalloffDistance)); __instance.Material.SetColor("_OcclusionColor", __instance.OcclusionColor); int num = Traverse.Create(__instance).Method("SetShaderStates").GetValue <int>(); if (__instance.Blur != SSAOPro.BlurMode.None) { int num2 = 7; RenderTexture temporary = RenderTexture.GetTemporary(source.width, source.height, 0, RenderTextureFormat.ARGBHalf); RenderTexture temporary2 = RenderTexture.GetTemporary(source.width, source.height, 0, RenderTextureFormat.ARGBHalf); Graphics.Blit(temporary, temporary, __instance.Material, 0); Graphics.Blit(source, temporary, __instance.Material, num); __instance.Material.SetFloat("_BilateralThreshold", __instance.BlurBilateralThreshold * HarmonyPatch_Config.SSAOSettings.SSAOBlurBilateralThreshold); for (int i = 0; i < HarmonyPatch_Config.SSAOSettings.SSAOBlurPasses; i++) { __instance.Material.SetVector("_Direction", new Vector2(1f / (float)source.width, 0f)); Graphics.Blit(temporary, temporary2, __instance.Material, num2); __instance.Material.SetVector("_Direction", new Vector2(0f, 1f / (float)source.height)); Graphics.Blit(temporary2, temporary, __instance.Material, num2); } if (!__instance.DebugAO) { __instance.Material.SetTexture("_SSAOTex", temporary); Graphics.Blit(source, destination, __instance.Material, 8); } else { Graphics.Blit(temporary, destination); } RenderTexture.ReleaseTemporary(temporary); RenderTexture.ReleaseTemporary(temporary2); return(false); } RenderTexture temporary3 = RenderTexture.GetTemporary(source.width, source.height, 0, RenderTextureFormat.ARGBHalf); Graphics.Blit(temporary3, temporary3, __instance.Material, 0); if (__instance.DebugAO) { Graphics.Blit(source, temporary3, __instance.Material, num); Graphics.Blit(temporary3, destination); RenderTexture.ReleaseTemporary(temporary3); return(false); } Graphics.Blit(source, temporary3, __instance.Material, num); __instance.Material.SetTexture("_SSAOTex", temporary3); Graphics.Blit(source, destination, __instance.Material, 8); RenderTexture.ReleaseTemporary(temporary3); return(false); }
public void Setup(Camera source, Portal portal, Portal otherPortal, int[] remove, int[] add, PortalCameraControl par = null, float nearclipoffset = 0f, bool ignoreFog = false) { if (par) { hasParent = true; parentCamera = par; } setUp = true; this.source = source; this.portal = portal; this.otherPortal = otherPortal; this.nearClipOffset = nearclipoffset; if (portalDummy == null) { portalDummy = new GameObject(portal.name + " Dummy").transform; portalDummy.parent = portal.transform; } if (otherDummy == null) { otherDummy = new GameObject(otherPortal.name + " Dummy").transform; otherDummy.parent = otherPortal.transform; } camera = gameObject.AddComponent <Camera>(); camera.CopyFrom(Camera.main); int i; for (i = 0; i < remove.Length; i++) { camera.cullingMask = VidyaMod.RemoveFromLayerMask(camera.cullingMask, remove[i]); //camera.cullingMask = camera.cullingMask & ~(1 << remove[i]);//remove layer } for (i = 0; i < add.Length; i++) { camera.cullingMask = VidyaMod.AddToLayerMask(camera.cullingMask, add[i]); //camera.cullingMask = camera.cullingMask | (1 << add[i]);//add } camera.depth = -2; sourceBloom = Camera.main.GetComponent <BloomAndLensFlares>(); sourceSsao = Camera.main.GetComponent <SSAOPro>(); sourceAa = Camera.main.GetComponent <AntialiasingAsPostEffect>(); sourceFog = Camera.main.GetComponent <ColorfulFog>(); bloom = ModUtility.CopyComponent <BloomAndLensFlares>(sourceBloom, gameObject); ssao = ModUtility.CopyComponent <SSAOPro>(sourceSsao, gameObject); aa = ModUtility.CopyComponent <AntialiasingAsPostEffect>(sourceAa, gameObject); fog = ModUtility.CopyComponent <ColorfulFog>(sourceFog, gameObject); bloom.enabled = false; ssao.enabled = sourceSsao.enabled; aa.enabled = sourceAa.enabled; fog.enabled = sourceFog.enabled; layer = add[0]; ignored = ignoreFog; ProcessFog(); UpdateFOV(); ReferenceMaster.onFOVChanged += UpdateFOV; }