IntegrityChaos-GraphicsAPI icon

GraphicsAPI

Made this tool for Diversity.

Last updated 9 months ago
Total downloads 856462
Total rating 8 
Categories Mods Tools Libraries BepInEx Client-side
Dependency string IntegrityChaos-GraphicsAPI-1.0.0
Dependants 829 other packages depend on this package

This mod requires the following mods to function

BepInEx-BepInExPack-5.4.2100 icon
BepInEx-BepInExPack

BepInEx pack for Mono Unity games. Preconfigured and ready to use.

Preferred version: 5.4.2100

README

GraphicsAPI

Made this tool for Diversity.

Graphic Settings (EXPERIMENTAL)

Usage:

  • Add the following namespaces:
using GraphicsAPI;
using UnityEngine.Rendering.HighDefinition;
using UnityEngine.Rendering;
using static UnityEngine.Rendering.HighDefinition.RenderPipelineSettings;
  • Fetch the current HDRP Render Pipeline Settings with the following:
RenderPipelineSettings settings = HDRPGraphicSettings.GetCurrentSettings();
  • Then make changes to the settings:
settings.customBufferFormat = CustomBufferFormat.R11G11B10;
  • Finally apply the new settings:
HDRPGraphicSettings.ApplySettings(settings);

Full example:

using GraphicsAPI;
using HarmonyLib;
using UnityEngine.Rendering.HighDefinition;
using UnityEngine.Rendering;
using static UnityEngine.Rendering.HighDefinition.RenderPipelineSettings;
using UnityEngine;

namespace SuperAwesomeMod.Patches
{
    [HarmonyPatch(typeof(PreInitSceneScript))]
    public class PreInitPatch
    {
        [HarmonyPatch(typeof(PreInitSceneScript), "Awake")] // This patch happens as soon the game opens.
        [HarmonyPrefix]
        static void Awake()
        {
            RenderPipelineSettings settings = HDRPGraphicSettings.GetCurrentSettings();

            settings.customBufferFormat = CustomBufferFormat.R11G11B10;

            HDRPGraphicSettings.ApplySettings(settings);
        }
    }
}

CustomPostProcessing

Usage:

  • Create A full screen shader and apply it to a material for later use. Note: We're back at using the custom color buffer. Please use it in your shaders from now on!
  • In your script make sure to include GraphicsAPI.CustomPostProcessing and Unity's rendering namespaces!
using UnityEngine.Rendering.HighDefinition;
using UnityEngine.Rendering;
using GraphicsAPI.CustomPostProcessing;

Create a new PostProcess

  • Create a new PostProcess and give it a name and assign your previously created material. A PostProcess will define and set up both "Custom Pass Volume" and the "Full Screen Pass".
PostProcess myNewPass = new PostProcess("PassName", material);

Note: You can't have 2 PostProcess of the same name!

Apply the new PostProcess

  • Simply add the newly created PostProcess into the CustomPostProcessingManager!
CustomPostProcessingManager.Instance.AddPostProcess(myNewPass);

Note: This method returns a FullScreenCustomPass.

Enable / Disable

  • If you wish to enable or disable a pass you can simply use .EnablePass(pass); or .DisablePass(pass); to do so!
CustomPostProcessingManager.Instance.EnablePass(myPass);
  • Or you can get a pass from its name:
FullScreenCustomPass myPass = CustomPostProcessingManager.Instance.GetPass("MyPass");

CustomPostProcessingManager.Instance.EnablePass(myPass);

Example 1:

using UnityEngine;
using UnityEngine.Rendering.HighDefinition;
using UnityEngine.Rendering;
using System.Collections;
using GraphicsAPI.CustomPostProcessing;
using GameNetcodeStuff;

namespace SuperAwesomeMod
{
    public class AddPostProcessing : MonoBehaviour
    {
        private FullScreenCustomPass vignetteFSPass;

        public PlayerControllerB player;

        public Material myFullscreenMaterial;

        void Start()
        {
            // Creating the PostProcess.

            PostProcess vignettePass = new PostProcess("VignettePass", myFullscreenMaterial)
            {
                InjectionType = InjectionType.AfterPostProcess, // You can predefine the PostProcess on creation.
                Enabled = false // Disabling it on creation for example.
            };

            // Adding the PostProcess and assigning it to 'vignetteFSPass'.

            vignetteFSPass = CustomPostProcessingManager.Instance.AddPostProcess(vignettePass);

            // Note that you can't 'remove' a pass. You can simply disable it.
        }

        void Update()
        {
            // Simple if statement to enable/disable the pass according to the dead value of the player.

            if (player.isPlayerDead && vignetteFSPass.enabled)
            {
                vignetteFSPass.enabled = false;
            }
            else if (!vignetteFSPass.enabled)
            {
                vignetteFSPass.enabled = true;
            }
        }
    }
}

Example 2:

using UnityEngine;
using UnityEngine.Rendering.HighDefinition;
using UnityEngine.Rendering;
using System.Collections;
using GraphicsAPI.CustomPostProcessing;
using GameNetcodeStuff;
using BepInEx;

namespace SuperAwesomeMod
{
    [BepInPlugin(modGUID, modName, modVersion)]
    public class Plugin : BaseUnityPlugin
    {
        public const string modGUID = "Chaos.SuperAwesomeMod";
        public const string modName = "SuperAwesomeMod";
        public const string modVersion = "1.0.0";

        public FullScreenCustomPass myFsPass;

        public PlayerControllerB player;

        void Awake()
        {
            // Subscribing to the OnLoad event.

            CustomPostProcessingManager.OnLoad += OnLoad;
        }

        private void OnLoad(object sender, System.EventArgs e)
        {
            // The sender will always be 'CustomPostProcessingManager'.

            CustomPostProcessingManager manager = (CustomPostProcessingManager)sender;

            Material myFullscreenMaterial = manager.dither; // Using a premade fullscreen material that comes with the API.

            PostProcess myPostProcess = new PostProcess("MyFsPass", myFullscreenMaterial)
            {
                InjectionType = InjectionType.AfterPostProcess // You can predefine the PostProcess on creation.
            };

            // Adding the PostProcess and assigning it to 'myFsPass'.

            myFsPass = CustomPostProcessingManager.Instance.AddPostProcess(myPostProcess);
        }
    }
}