ZZMI RabbitFX - Glow FX + Censor Remover
!Important Warning!
Having multiple RabbitFXs will cause unexpected behaviours and game crashes.
You should only ever have one instance of RabbitFX anywhere in your mods folder as that is how it is designed to work. If you see creators including RabbitFX with their mods, please let them know it is dangerous to do so.
Please read the pinned comment for details.
RabbitFX is also INCOMPATIBLE with other decensoring mods, which is why there is a decensor function included.
FAQ Regarding stuttering
As RabbitFX encounters new shaders for the first time, it will try to read them and rewrite them in order for the decensoring, texture replacement, and glow effect to work.
This can be alleviated by turning on the ShaderCache feature of 3DMigoto which means, it will only do it once and the rewritten shader will be saved for the next time you run the game.
There is a small ReadMe file included that explains this in further detail.
However, game updates or changes / fixes / additions made to RabbitFX will reset the shader cache and require it to be rebuilt again.
ーーーーーーーーーーーーーーーーーーーー
Default Keybinds:
Toggle Censor Filter - \
ーーーーーーーーーーーーーーーーーーーー
Hey everyone!
Incompatible with other Censor Filter removers
If you've seen my mods, you know I love adding glow effects to my mods and the biggest enabler for me to do that is TexFX. Because of the of how successful the WuWa version had been, I thought I'd make a version for ZZZ as well. Once again with help from Sins and borrowing the code for hue-shifting from the upcoming update for TexFX.
It's probably not as well written as it would be if Sins was in charge but it works relatively well and allows glowing patterns to be made for mods.
It also comes with a Censor Filter remover due to it conflicting with the removers that already exists on GB.
ーーーーーーーーーーーーーーーーーーーー
For the average user, place the files into your mod folder and that's all you need to know.
For modders wishing to use RabbitFX for glow related effects read on.
Please be aware that some level of knowledge on how to make texture mods for Wuthering Waves is required as this is not a guide on how to make mods for Wuthering Waves, rather a guide on how to use this tool to further enhance your mods.
ーーーーーーーーーーーーーーーーーーーー
There is a fundamental change in how RabbitFX works compared to TexFX for Genshin. Iinstead of using just the blue and green channel for controlling luminence and bloom, an entire RGBA texture is dedicated for glow.
What each channel does is relatively straight forward, RGB dictates the colour of the glow and the alpha channel dictates the brightness.
Once created, attach this texture to the 17th pixel shader slot of whatever component this effect is to be used on using
Resource\RabbitFX\Glowmap = ref ResouceName
and call the run command.
run = CommandList\RabbitFX\Run
This is the bare minimum needed to activate RabbitFX.
Another feature RabbitFX has is the ability to shift colours through the use of HSV courtesy of SinsOfSeven. Just like in picture editing softwares, Hue is shifted with by a value ranging from 0 - 360 with it fully wrapping around at 360. Saturation and brightness can also be adjusted with S and V respectively. These values can be set with the following values
$\rabbitfx\h$\rabbitfx\s$\rabbitfx\v$\rabbitfx\brightness
Another thing you can do is set an Interpolation value from 0 - 1 that lets you transition towards your target colour for better special FX modding with 0 being the original colour and 1 being the target colour. This can be set using the following value
$\rabbitfx\interpolate
Here is a snippet from my Ambi mod to give you a better idea on how it works, note all values other than Resource\RabbitFX\Glowmap = ref ResourceSwordFX and run = CommandList\RabbitFX\Run are optional.
[TextureOverrideAnbiTestSwordA] hash = 5bb510c6 match_first_index = 0 run = CommandListSkinTexture ib = ResourceAnbiTestSwordAIB $\RabbitFX\H = 0 $\RabbitFX\S = 0 $\RabbitFX\V = 0 $\RabbitFX\brightness = 20 $\RabbitFX\interpolate = 1 Resource\RabbitFX\Glowmap = ref ResourceSwordFX run = CommandList\RabbitFX\Run
Here is an example of how the effect mask is made.
This is the texture for the sword Anbi uses
I want to make the blade of it glow a nice green to match her motif so I make a seperate texture that is completely black with the parts I want to glow coloured in like so.
Next, on the alpha channel I colour in the same parts in white to show that I want these areas to be bright.
Next I set the brightness of the mod to 20, pass the texture to RabbitFX as a Glowmap and run the RabbitFX command.
$\RabbitFX\brightness = 20 Resource\RabbitFX\Glowmap = ref ResourceSwordFX
run = CommandList\RabbitFX\Run
And this is the result.
Happy modding!
** V4.0 NEW FEATURES ** GUIDE UPDATED FOR 4.5 **
I'm adding the ability to change the colour of the special W Engine glow effect colours, change their intensity/brightness, and then set your glow sync up with the special W Engine glow effect colours! Many, many, many thanks to SinsOfSeven for helping me get this feature working!!!
Here is a small example of this working in game.
The method of doing this is rather complicated, so this will take some dedication!
First, follow all the steps above to get your glow to work.
Next we need to add a special variable to retrieve the W Engine glow colour, it looks like this:
[ResourceFXBuffer]
[Constant] ResourceFXBuffer = copy Resource\RabbitFX\FXBuffer
This can also be used to reset the buffer if the values become stuck when switching characters or when the effect ends abrupty.
ResourceFXBuffer = copy Resource\RabbitFX\FXBuffer
It looks a little bit intimidating but you don't need to think about it that much, you can place this wherever you want in your ini.
Next, just below where you've entered
Resource\RabbitFX\Glowmap = ref ResourceFX
Enter
ps-u4 = ResourceFXBuffer
There is now an additional blend mode that will do a comparison to see if the glow is bright enough to be displayed. This will imitate the normal engine glow effect where it only shows up conditionally.
To use this mode, simply paint the part black in the FX texture and set this following line.
$\rabbitfx\blendmode = 1
Following the earlier examples, it should now look something like this
[ResourceFXBuffer]
[Constant] ResourceEngineRGB = copy Resource\RabbitFX\FXBuffer [TextureOverrideAnbiTestSwordA] hash = 5bb510c6 match_first_index = 0 run = CommandListSkinTexture ib = ResourceAnbiTestSwordAIB $\RabbitFX\H = 0 $\RabbitFX\S = 0 $\RabbitFX\V = 0 $\RabbitFX\brightness = 20 $\RabbitFX\interpolate = 1 $\rabbitfx\blendmode = 1 Resource\RabbitFX\Glowmap = ref ResourceSwordFX ps-u4 = ResourceEngineRGB run = CommandList\RabbitFX\Run
Now for this to work properly, you must also add the following lines to below the ib = line
ps-u4 = ResourceEngineRGB run = CommandList\RabbitFX\UpdateFXBuffer run = CommandList\RabbitFX\ERun
To the part that actually has the W Engine glow in order to extract the colour.
This is usually the part that contains the hair... However, since it is different for every character, I'm afraid I can't really provide any concrete methods, but I believe in you!
** 4.1 new feature **
Patterned discarding (Cut outs)
I realize the character I'm using as a demo might be slightly controversial... Please ignore it, I wasn't really thinking when I picked her, she's just AGMG's ZZZ mascot character...
But with patterned discards, you can cut holes and shapes out of textures and meshes without having to do them perfectly in blender, here is an example.
As you can see, I (perfectly) cut out my name and you can see right through it.
This is a step towards adding in transparency which I am slowly working towards.
Here is how it works.
You must first prepare an extra texture, right now the RGB values doesn't really do anything, you should leave it black as I can't guarantee they won't be used for other things in the future. However for demonstration purposes I've left the original texture in so you can see what I've done.
As you can see, I wrote caverabbit (in reverse) into the texture, but the important part is in the alpha channel.
Anything that's black (0 in value) in this channel will be discarded (cut out). This means you can cut out complex patterns such as lace designs or fishnet meshes or intricately shaped holes with very minimal effort.
Next we need to pass this texture to RabbitFX as FXMap, similar to how the glow texture is passed and run RabbitFX as per usual.
[TextureOverrideKarinDress] hash = e74620b5 Resource\RabbitFX\FXMap = ref ResourceTransparencyMask run = CommandList\RabbitFX\Run
Following the earlier examples, it would look something like this
[TextureOverrideAnbiTestSwordA] hash = 5bb510c6 match_first_index = 0 run = CommandListSkinTexture ib = ResourceAnbiTestSwordAIB $\RabbitFX\H = 0 $\RabbitFX\S = 0 $\RabbitFX\V = 0 $\RabbitFX\brightness = 20 $\RabbitFX\interpolate = 1 $\rabbitfx\blendmode = 1 Resource\RabbitFX\Glowmap = ref ResourceSwordFX Resource\RabbitFX\FXMap = ref ResourceTransparencyMask ps-u4 = ResourceEngineRGB run = CommandList\RabbitFX\Run
In the future, I'd like to expand this into true transparency with help from SilentNightSound and SinsOfSeven.
I've included the Karin demo for everyone to look at to see how it is done.
Happy Modding!
** V5.0 NEW FEATURES ** Stable texture slots
Hello everyone!
Version 5.0 introduces the ability to mod textures through RabbitFX which should automatically apply the new textures to your mods regardless of the LOD.
In simpler terms, textures should no longer break due to low VRAM with this new method (LOD for the character models is still required).
I originally developed this system for the ZZMI library, but sadly due to the fact that this method would not work if shaderfix mods are used, it has been determined that it cannot be used as a universal fix.
However, I still see potential usefulness for this system, specifically it can be used in conjuctions with masks to create simple color shift mods. I plan to add this function in the next update once I have determined that this system is stable.
To use this new feature, you must take note of all the textures being used in the mod and which parts of your mod it corresponds to.
For example:
[TextureOverrideCharacterBodyA] hash = Match_first_Index = 0 run = CommandListSkinTexture ib = ResourceCharacterBodyAIB Drawindexed = 1000, 0, 0 ; 2048 [TextureOverrideCharacterBodyADiffuse.2048]
hash = this = ResourceCharacterBodyADiffuse [TextureOverrideCharacterBodyANormalMap.2048]
hash = this = ResourceCharacterBodyANormalMap [TextureOverrideCharacterBodyAMaterialMap.2048]
hash = this = ResourceCharacterBodyAMaterialMap [TextureOverrideCharacterBodyALightMap.2048]
hash = this = ResourceCharacterBodyALightMap ; 1024 [TextureOverrideCharacterBodyADiffuse.1024] hash = this = ResourceCharacterBodyADiffuse [TextureOverrideCharacterBodyANormalMap.1024] hash = this = ResourceCharacterBodyANormalMap [TextureOverrideCharacterBodyAMaterialMap.1024] hash = this = ResourceCharacterBodyAMaterialMap [TextureOverrideCharacterBodyALightMap.1024] hash = this = ResourceCharacterBodyALightMap ; 512 [TextureOverrideCharacterBodyADiffuse.512] hash = e826a564 this = ResourceCharacterBodyADiffuse [TextureOverrideCharacterBodyANormalMap.512] hash = Part2Normal this = ResourceCharacterBodyANormalMap [TextureOverrideCharacterBodyAMaterialMap.512] hash = 23f2a4cf this = ResourceCharacterBodyAMaterialMap [TextureOverrideCharacterBodyALightMap.512] hash = b24f1752 this = ResourceCharacterBodyALightMap
This then becomes
As you can see, it significantly simplifies the textures sections and there isn't a need to get 3 sets of hashes for all the LOD textures.
Also, all characters actually have special built in FX textures, most of these are triggered when they have their special balls equipped and they look something like this
I have extended the stable slots to be able to handle these as well.
Most characters have only one, but some characters like Astra has 2.
For a lack of a better name and not knowing if this number may increase, I have named these:
CharFXMap0 CharFXMap1
And you can set them similarly like so
Resource\RabbitFX\CharFXMap0 = ref ResourceCharacterFXMap0 Resource\RabbitFX\CharFXMap0 = ref ResourceCharacterFXMap1
Going back to the earlier example, the full thing might look something like this.
[TextureOverrideCharacterBodyA] hash = Match_first_Index = 0 ib = ResourceCharacterBodyIB Resource\RabbitFX\Diffuse = ref ResourceCharacterBodyADiffuse Resource\RabbitFX\Normalmap = ref ResourceCharacterBodyANormalMap Resource\RabbitFX\Materialmap = ref ResourceCharacterBodyAMaterialMap Resource\RabbitFX\Lightmap = ref ResourceCharacterBodyALightMap Resource\RabbitFX\CharFXMap0 = ref ResourceCharacterFXMap0
Resource\RabbitFX\CharFXMap0 = ref ResourceCharacterFXMap1 run = Commandlist\RabbitFX\SetTextures Drawindexed = 1000, 0, 0
====== Version 6.0 =====
A lot of changes were made with the jump to version 6, please use the fixer to fix older mods that were made by attaching textures to the t17 and t18 slots.
But it wouldn't be a new version without any new features.
You can now selectively edit and shift colors on character textures!
I've been planning on adding this for a while and with all the upgrades I made, I thought it would be time to finally implement it.
It functions similar to the glow color shifter, except this will retain all the shading and post processing effects applied on the character.
This effect uses the same texture as the cutout pattern, now named as FXMap since each channel will hopefully eventually have a different function.
To mask the parts of the texture you wish to apply the color shift to, simply fill in the RED channel of the FXMap, and then set the HSV value for how much you want to shift the colors by, and then apply it using Run = CommandList\RabbitFX\ColorShift.
Here is an example snippet of what it looks like
[TextureOverrideCharacterIB] hash = IB hash
Resource\RabbitFX\FXMap = ref ResourceFXMap
$\RabbitFX\H = Hue shift
$\RabbitFX\S = Saturation shift
$\RabbitFX\V = Value shift
run = CommandList\RabbitFX\ColorShift
draw = 100,100,0
I'll walk you through how Karin's hair is shifted as shown in the GIF above.
This is Karin's hair texture with the UVs overlain on top for visual reference.
We need to make sure the red channel is filled for all the parts we want to recolor and the other parts are set to 0 (pure black).
Remember, that is just the red channel, in color view it would look something like this.
Next, we just need to set the values needed to change her hair color from green to the color you would like.
For demonstration purposes, let's make her hair a nice pink color. We'll need to shift the color -105 degrees from her original green color and increase the Saturation by 30 and the Value by 50.
[TextureOverrideKarinHair] hash = 5a839fb2
Resource\RabbitFX\FXMap = ref ResourceFXMap
$\RabbitFX\H = -105
$\RabbitFX\S = 30
$\RabbitFX\V = 50
run = CommandList\RabbitFX\ColorShift
draw = 12345, 0, 0
This will turn Karin's hair from green to this lovely shade of pink.
Requirements
Dependencies and prerequisites required to use this Mod