public ScreenSpaceReflections(VolumetricShadingMod mod)
        {
            _mod = mod;

            _game     = mod.CApi.GetClient();
            _platform = _game.GetClientPlatformWindows();

            RegisterInjectorProperties();

            mod.CApi.Event.ReloadShader += ReloadShaders;
            mod.Events.PreFinalRender   += OnSetFinalUniforms;
            mod.ShaderPatcher.OnReload  += RegeneratePatches;

            _enabled            = ModSettings.ScreenSpaceReflectionsEnabled;
            _rainEnabled        = ModSettings.SSRRainReflectionsEnabled;
            _refractionsEnabled = ModSettings.SSRRefractionsEnabled;
            _causticsEnabled    = ModSettings.SSRCausticsEnabled;

            mod.CApi.Settings.AddWatcher <bool>("volumetricshading_screenSpaceReflections", OnEnabledChanged);
            mod.CApi.Settings.AddWatcher <bool>("volumetricshading_SSRRainReflections", OnRainReflectionsChanged);
            mod.CApi.Settings.AddWatcher <bool>("volumetricshading_SSRRefractions", OnRefractionsChanged);
            mod.CApi.Settings.AddWatcher <bool>("volumetricshading_SSRCaustics", OnCausticsChanged);

            mod.CApi.Event.RegisterRenderer(this, EnumRenderStage.Opaque, "ssrWorldSpace");
            mod.CApi.Event.RegisterRenderer(this, EnumRenderStage.AfterOIT, "ssrOut");

            _textureIdsField =
                typeof(ChunkRenderer).GetField("textureIds", BindingFlags.Instance | BindingFlags.NonPublic);

            mod.Events.RebuildFramebuffers += SetupFramebuffers;
            SetupFramebuffers(_platform.FrameBuffers);
        }
        public ShadowTweaks(VolumetricShadingMod mod)
        {
            _mod            = mod;
            ExcludedShaders = new HashSet <string> {
                "sky", "clouds", "gui", "guigear", "guitopsoil", "texture2texture"
            };

            _mod.CApi.Settings.AddWatcher <int>("volumetricshading_nearShadowBaseWidth", OnNearShadowBaseWidthChanged);
            _mod.CApi.Settings.AddWatcher <bool>("volumetricshading_softShadows", OnSoftShadowsChanged);
            _mod.CApi.Settings.AddWatcher <int>("volumetricshading_softShadowSamples", OnSoftShadowSamplesChanged);

            NearShadowBaseWidth = ModSettings.NearShadowBaseWidth;
            _softShadowsEnabled = ModSettings.SoftShadowsEnabled;
            _softShadowSamples  = ModSettings.SoftShadowSamples;

            _mod.ShaderInjector.RegisterFloatProperty("VSMOD_NEARSHADOWOFFSET",
                                                      () => ModSettings.NearPeterPanningAdjustment);

            _mod.ShaderInjector.RegisterFloatProperty("VSMOD_FARSHADOWOFFSET",
                                                      () => ModSettings.FarPeterPanningAdjustment);

            _mod.ShaderInjector.RegisterBoolProperty("VSMOD_SOFTSHADOWS", () => _softShadowsEnabled);
            _mod.ShaderInjector.RegisterIntProperty("VSMOD_SOFTSHADOWSAMPLES", () => _softShadowSamples);

            _mod.CApi.Event.ReloadShader += OnReloadShaders;
            _mod.Events.PostUseShader    += OnUseShader;
        }
示例#3
0
        public UnderwaterTweaks(VolumetricShadingMod mod)
        {
            _mod = mod;

            mod.CApi.Settings.AddWatcher <bool>("volumetricshading_underwaterTweaks", SetEnabled);
            SetEnabled(ModSettings.UnderwaterTweaksEnabled);

            mod.Events.PostWaterChangeSight += OnWaterModifierChanged;
        }
        public OverexposureEffect(VolumetricShadingMod mod)
        {
            mod.CApi.Settings.AddWatcher <int>("volumetricshading_sunBloomIntensity", OnSunBloomChanged);
            _currentBloom = ModSettings.SunBloomIntensity;

            mod.Events.PreSunRender += OnRenderSun;

            RegisterInjectorProperties(mod);
        }
        private void RegisterInjectorProperties(VolumetricShadingMod mod)
        {
            var injector = mod.ShaderInjector;

            injector.RegisterFloatProperty("VSMOD_OVEREXPOSURE",
                                           () => ModSettings.OverexposureIntensity * 0.01f);

            injector.RegisterBoolProperty("VSMOD_OVEREXPOSURE_ENABLED",
                                          () => ModSettings.OverexposureIntensity > 0);
        }
        public VolumetricLighting(VolumetricShadingMod mod)
        {
            _mod  = mod;
            _game = _mod.CApi.GetClient();

            _dropShadowIntensityField = typeof(AmbientManager)
                                        .GetField("DropShadowIntensity", BindingFlags.NonPublic | BindingFlags.Instance);

            _enabled = ClientSettings.GodRayQuality > 0;

            _mod.CApi.Settings.AddWatcher <int>("shadowMapQuality", OnShadowMapChanged);
            _mod.CApi.Settings.AddWatcher <int>("godRays", OnGodRaysChanged);

            _mod.Events.PreGodraysRender += OnSetGodrayUniforms;
            _mod.Events.PostUseShader    += OnPostUseShader;

            RegisterPatches();
        }
        public DeferredLighting(VolumetricShadingMod mod)
        {
            _mod      = mod;
            _platform = _mod.CApi.GetClientPlatformWindows();

            _mod.CApi.Settings.AddWatcher <bool>("volumetricshading_deferredLighting", OnDeferredLightingChanged);
            _mod.CApi.Settings.AddWatcher <int>("ssaoQuality", OnSSAOQualityChanged);

            _enabled = ModSettings.DeferredLightingEnabled;

            _mod.CApi.Event.RegisterRenderer(new DeferredLightingPreparer(this), EnumRenderStage.Opaque,
                                             "vsmod-deferred-lighting-prepare");

            _mod.CApi.Event.RegisterRenderer(new DeferredLightingRenderer(this), EnumRenderStage.Opaque,
                                             "vsmod-deferred-lighting");

            _mod.ShaderInjector.RegisterBoolProperty("VSMOD_DEFERREDLIGHTING", () => _enabled);

            _mod.CApi.Event.ReloadShader    += OnReloadShaders;
            _mod.Events.RebuildFramebuffers += SetupFramebuffers;
            SetupFramebuffers(_platform.FrameBuffers);
        }
示例#8
0
        public ScreenSpaceDirectionalOcclusion(VolumetricShadingMod mod)
        {
            var injector = mod.ShaderInjector;

            injector.RegisterBoolProperty("SSDO", () => ModSettings.SSDOEnabled);
        }