コード例 #1
0
            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);
            }
コード例 #2
0
    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;
        }
    }
コード例 #3
0
 void Start()
 {
     m_SSAOPro = GetComponent <SSAOPro>();
 }
コード例 #4
0
 void Start()
 {
     m_SSAOPro = GetComponent<SSAOPro>();
 }
コード例 #5
0
            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);
            }
コード例 #6
0
        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;
        }