Jump to content

Modular Shader Library for ENBSeries [Skyrim]

Recommended Posts

While chatting with some folks at the STEP forum in the enbseries.ini guide, we, myself, Aiyen, Matso and TechAngel, agreed that it would be helpful to newcomers to the ENBSeries "world" to supply them with easy and highly configurable shader files. And that it had a clean look with good amount of info in them, letting the "reader" of the code see what each code line actually do to achieve that particular visual effect.
So I started whipping up my own shader library, borrowing the base template, sort of anyway, from Aiyen's Skylight ENB.
This is however not an extension of Aiyen's Skylight ENB preset, rather something totally different. A base code library for anyone to configure and expand how they see fit.

Highly customizable and easy customization and addition of various effects for the purpose of altering the visuals.
All ENBSeries default shader effects in easy accessible and injectable .fxh files
Entirely new effects, compared to what is available in the default ENBSeries shader files
Currently only effects for enbeffect.fx, enbbloom.fx and effect.txt

List of effects

ENBSeries Game Color-Correction effect, also known as APPLYGAMECOLORCORRECTION

ENBSeries Post-Process methods, v1, v2, v3, v4

ENBSeries Palette

ENBSeries Procedural Color-Correction


7 most common tone-mapping methods easily accessible from the GUI window "Technique" drop down menu

Bloom controls, control max white color and limit the appearance of bloom with a threshold

Fully customizable ENBSeries AGCC code, allows you to customize the Imagespaces in game instead of in the Creation Kit

Local Reinhard tone-mapping combined with Filmic Unsharted2D tone-mapping

Night eye effect that does not need the Game Color-Correction to function, and is very small in size, few code rows.

Control of Shadows and Highlights

SweetFX Vibrance and Saturation controls

SweetFX Split Screen control

Clip Mode, to display over and underexposed colors

Ability to utilize the Dungeon feature implemented in ELE, to allow dungeon seperation for controls

Multiple helper functions such as Yxy, HSV, HSL color space conversion, Time and Location factors"control splitters", Average/percieved luminance calculations.

And more...


First you need to include the files into the enbeffect.fx, you do that with this code line;
NOTE1: elepHelpers.fxh and enbAGCC.fxh will be used for this example.
NOTE2: You will need to have the Modular Shader folder inside of the enbseries folder and all the files in it for this function
#include "/Modular Shaders/msHelpers.fxh" // This code line needs to be added after the register section inside enbeffect.fx
#include "/Modular Shaders/enbeffect/enbAGCC.fxh"
There, you have now successfully added/included the helper function library and the APPLYGAMECOLORCORRECTION effect library into your file.

Now you need to include it into the rendering stage so it will have an effect on the render output.

For that you need to add this code line for the AGCC code to take affect;
color.rgb = enbAGCC(color, vadapt, vbloom); // This code line goes into the Pixel shader (PS_D6EC7DD1) after all initialization code is done
Like this;
float4 PS_D6EC7DD1(VS_OUTPUT_POST IN, float2 vPos : VPOS) : COLOR
// Initialize various variables used in this shader file
  float4 color   = 0.0;
  float4 _v0     = 0.0;
  _v0.xy         = IN.txcoord0.xy;        /// Texture coordinates
if (ENABLE_SPLITSCREEN==-2) color = tex2D(_s0, float2(_v0.x - fSplitPos / 2.0f, _v0.y));    /// ENBSeries color output, for Splitscreen only
else                        color = tex2D(_s0, _v0.xy);                                     /// ENBSeries color output, for regular color processing
  float4 vbloom  = tex2D(_s1, _v0.xy);    /// Vanilla bloom
  float4 vadapt  = tex2D(_s2, _v0.xy);    /// Vanilla adaptation
  float4 ebloom  = tex2D(_s3, _v0.xy);    /// ENBSeries bloom
  float4 eadapt  = tex2D(_s4, 0.5);       /// ENBSeries adaptation, xyz = average screen color, w = curved max screen color
  float4 Gcolor  = color;                 /// For use in split screen effect, unaltered ENBSeries render output
  float4 blurTex = tex2D(_s3, _v0.xy);    /// For use in Local Operators

// Main ENBSeries Post-Processing computations and injections
color.rgb = enbAGCC(color, vadapt, vbloom); // AGCC injection code line color.w = 1.0f; return color; }


Now you should see that the AGCC effect is active and in use after you have saved the enbeffect.fx file changes and in game you have pressed the >>>> button found at the of the GUI window.

To make it so you can easily enable or disable the AGCC effect, add this code into the file;
// Add the below GUI annotation at the top of the file
string UIName = "Enable Game Post-Processing";
> = {true};


if (ENABLE_AGCC==true)
color.rgb = enbAGCC(color, vadapt, vbloom); // AGCC injection code line



Share this post

Link to post
Share on other sites

Thought a bit of advertising here would be good for ENB newcomers to get a better hold on this than on Nexus and ENBDev ;)

Though I forgot that I had a experiment going on in the msAGCC.fxh file, which makes it not functional in it's current unfinished state. I will upload a an updated version later on.

Share this post

Link to post
Share on other sites

rev7 will be released momentarily, I just need to go ver it one last time to see that everything is at should be.
And I made a video on how you can go about switching ebtween the effects, and installation of this library as well as file requirments from the inital ENBSeries binary download.


And here is a installation video for the Modular Shader Library, I'm Swedish who don't get to talk much with other english speaking folks, so bare with me ;)

And the thumbnail pixelation is due the Bandicut Free version, the video in itself isn't however.


Edited by JawZ

Share this post

Link to post
Share on other sites

Yeah I figured it would become even more obvious how simple it really is to switch between the effects with a video than just plain text.

Next video, if all goes well, will cover how to customize a "empty" shader file with only the effects one wants in it, just to keep the file amount down and what not.

Share this post

Link to post
Share on other sites

nice looking... audio a bit low on my end.. not sure if that was the bandy thingy or what, but figured I would mention it. 

Share this post

Link to post
Share on other sites

It's the recording in itself. Using my C920 cam mic, going to use my Blue Snowball next time.

My brother users it as I have yet to have a use for it. Bought it almost a year ago to make videos :P Much better audio quality and levels wit that mic.

Edited by JawZ

Share this post

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By sheson
      This is a beta of [FNV|FO3|FO4|FO4VR|TES5|SSE|TES5VR|ENDERAL|ENDERALSE]LODGen/Edit with terrain LOD meshes and textures generation.
      This is for experienced mod authors and users that know how to use xEdit, xLODGen or DynDOLOD already.
      Installation and Setup
      xLODGen beta 83 - based on 4.1.3g
      Unzip into a dedicated folder outside of any game and Steam folders or special Windows folders like Program Files.
      (Pro users can merge with existing xEdit installation. Make sure to overwrite older LODGen.exe/LODGenx64.exe TexConv.exe/TexConvx64.exe in Edit Scripts. All other files with the same filenames are the same as the latest version of xEdit.)
      Rename xLODGen.exe to [game mode]LODGen.exe (TES5LODGen.exe for example) or start with command line parameter -fnv, -fo3, -fo4, -fo4vr, -tes5, tes5vr, -sse, -enderal, -enderalse
      Use -o:"c:\OutputPath\" command line parameter to change where files are generated to, default is the game folder. Use this if a mod manager with a virtual file system (like MO) is used.
      Do not generate into any game or any mod manager folders that are part (direct or indirect) of the virtual file system.
      Microsoft Visual C++ Redistributable for Visual Studio 2015, 2017 and 2019 - Required by LODGen.exe/LODGenx64.exe and Texconv.exe/Texconvx64.exe. Get matching platform x86/x64 depending on which xLODGen.exe (x86) or xLODGenx64.exe (x64) is used.
      RTFM and Share Results
      See the included Skyrim-Occlusion-Readme.txt for a brief explanation of the Skyrim TVDT Occlusion data generation. Read the hints that are shown when the mouse pointer rests on a setting. Ask specific questions or give feedback in the dedicated Skyrim TVDT - Occlusion Data thread.
      See the included Terrain-LOD-Readme.txt for a brief explanation of the settings for terrain LOD generation. Read the hints that are shown when the mouse pointer rests on a setting. Ask specific questions about terrain LOD in this thread for a more in-depth explanation if required and share feedback (with screenshots) about results or problems.
      These tools generate LOD meshes and textures "exactly" like CK, but not like the meshes and textures which are shipping with the games (they are often manually edited).
      However, these tools provide more options and higher resolutions (use the x64 version if there are memory errors because you believe you require 4k or higher) and can be updated to add more useful features and options.
      I did some testing in the different games, but finding the best combinations of options and settings requires lots of testing and are a matter of personal opinion and which game is used, the load order, mods, even different worldspaces probably.
      That means, I am only able to give generic guidelines and hints to send you off to find and test for yourself and share your results. My main interested is that generations works correctly and without problems for now.
      Check out the thread xLODGen Terrain Settings Compare. Also refer to any modding guide which has a list of relevant mods close to your load order.
      The object and tree LOD generation is the same as the current versions of xEdit / xLODGen. Refer to their respective descriptions and explanations.
      Obviously, users of Skryim/Enderal/Skyrim SE/Skyrim VR/EnderalSE continue to use the easier and more comprehensive DynDOLOD for drastically improved object and tree LOD generation and only use xLODGen for terrain LOD (and maybe Occlusion) generation.
      First Time
      Here are suggestion to start without going crazy and that should be quick enough to generate:
      Set quality of meshes for LOD4 to 5 and then +5 for each next level. Or just set levels 8/16/32 to 10.
      Check protect cell borders (yes it fixes the ugly terrain drops at outer cell borders that still exist in Fallout 4).
      Use the max vertices setting only if you want to hard limit max file size.
      In Skyrim Special Edition or Skyrim VR, if you notice terrain briefly flickering when new areas are loading in, set [Display] bEnableLandFade=0 in Skyrim.INI
      Set Optimize Unseen to off for LOD4 for first generation. Start experimenting with a value of 550 with a quality setting of 10 or lower for LOD32 (used for map) and compare coastlines and file size to other settings.
      To quickly generate terrain LOD meshes just for the map, check only terrain LOD Meshes, check the Specific Chunk checkbox and set drop down to 32. Leave SW fields empty for complete map or set SW cell coordinates to same values as a *.btr filename to test a specific area with lots of water, river etc.
      Set texture sizes to 512 for a start. Larger sizes and large world spaces will take a considerable time (like 15 to 30 minutes or more easily). Each higher resolution means quadruple the work.
      Use DXT1 for diffuse and 565 (DXT1 if on Windows 7) for normal maps. If generating for Skyrim Special Edition use BC7. Uncheck mipmaps, raise steepness and Bake normal maps.
      For now, leave the Brightness, Contrast and Gamma at 0 and 1.0 respectively. It seems that only Skyrim CK and Skyrim SE CK are manipulating the intensity of the textures to adjust for the noise.dds and the god awful "improved" snow shader of Skyrim SE (just turn that thing off, really). If textures seem too dark in the game, brighten the noise.dds instead or vice versa. That way you can get perfectly matching LOD textures that look just like the textures in the loaded cells. For Skyrim a good average color of the noise texture seems to be around #C0. See below for a couple noise texture downloads.
      If you want to test larger texture sizes, use the chunk option to limit the number of textures that need to be generated. For example, check [x] Specific chunk, leave the drop down empty and set WS to the lower left cell coordinate of an 32x32 area, like 0, 0. It will then generate all textures up to 31,31. Not all worldspaces have their origin at 0,0 so you will have to check already generated meshes/texture filenames for their lower left coordinates.
      Questions and Feedback
      Obliviously anything related to terrain LOD should be posted in this thread.
      Posts related to Occlusion should be made here.
      Recommended Optionals
      TES5-Terrain-Tamriel.esm, SSE-Terrain-Tamriel.esm
      TES5-Terrain-Tamriel-Extend.esm, SSE-Terrain-Tamriel-Extend.esm - These extend the sea of ghost further to the north (see screenshots)
      SSE-Terrain-Tamriel-Full-Extend.esm - Entire map from -96,-96 to 95,96 with northern ocean extension. Useful for mod authors.
      Put in game data folder obviously. Adds back terrain for Skyrim (Tamriel worldspace) at the outer edges so there is no missing terrain meshes/textures when generating terrain LOD for Skyrim.
      Load as early with lowest priority as possible, so that any other plugins overwriting or adding land records or cells with the same coordinates take precedence.
      Only required to be loaded when generating terrain LOD. No harm done when loaded in-game but typically the player can not get close to these areas. There are no effects outside the far away added cells.
      Single color flat noise, Adjusted vanilla noise, HD Terrain Noise Texture SE
      Examples for Skyrim. Install to game folder like any other texture mod. The noise texture is applied in-game on top of terrain LOD textures, so no effect for LOD generation.
      Only the red channel is used in case the textures is not a grey channel format. MipMaps are ignored. The textures is tiled 3x3 per LOD quad, e.g. for LOD level 4, the noise texture is repeated 3 times to cover 4 cells, for LOD level 8, the noise texture is repeated 3 times to cover 8 cells and so on.
      For testing terrain LOD distances. Plain color terrain LOD textures for Tamriel with coordinates for every LOD quad. Green for LOD 4, yellow for LOD8, blue for LOD 16 and red for LOD 32.
    • By Lili_Cakez
      So I've noticed that rain drops appear black when falling over certain terrain backgrounds. From my own research, I can see that this is somewhat common, and people have said to install weather mods to fix this. The only thing is that I am using Snapdragon ENB, and the author says its incompatible with other weather mods. Is there a way to prevent the rain from looking black without installing other weather mods? I love this ENB, so I am hoping I wont have to find another one. I also don't want to just entirely disable rain in ENB.

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Create New...

Important Information

By using this site, you agree to our Terms of Use.