WWMI RabbitFX - Glow FX + Censor Remover
Forgotten update 7.3
Fixed pattern for diffuse
Turned off motorbike check temporarily to stop glitches until more testing can be done
Sorry for the odd update, I apparently worked on and fixed a few issues right before a short trip and completely forgot I had done this...
There is a new pinned comment briefly talking about what I'm working on and I see that quite a few people have found it already.
There is a bit of progress, and there could be a small patchwork fix soon for what I think I will call the material map (taken from ZenZero's texture naming scheme) so maybe everyone can look forward to that in the upcoming weeks.
RabbitFX has mostly been completely rewritten thanks to a discovery I made that helps improve shader matching logic.
This should cut down a lot of the random stuttering (a little might still occur due to how rewriting shaders work).
There could be futher optimizations that can be done, but for now I believe this is benefitial enough on its own.
As this is a complete rewrite, a lot of the maturity built up over the past updates may have been lost, so be aware there might be minor glitches for the initial releases.
Detailed bug reports including GPU used as well as a screenshot are greatly appreciated!
!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. The majority of the stuttering is caused by reading and matching the shaders, writing less / removing features will not improve performance.
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!
If you've seen my Genshin mods, you know I love adding glow effects to my mods and the biggest enabler for me to do that is TexFX. However, due to circumstances, Sins is unavailable to make a WuWa version, so I thought I'd try my hand at making my own version with a bit of guidance from Sins and the code for hue-shifting taken 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 remover that already exists on GB. There is an upgraded functionality with my version in that it doesn't break when upgrading weapons while in the character menu.
ーーーーーーーーーーーーーーーーーーーー
For the average user, just put the files into your mods folder, 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.
ーーーーーーーーーーーーーーーーーーーー
*Version 6.4+ Stable Textures*
This is a pretty useful feature for any mod so I've put this at the top of the guide for anyone who wants to convert their mods to use it.
With how annoying and unstable textures have become after game update 2.x and since 2.6 broke every single texture in the game, I've decided to properly develop this feature.
Usage is rather simple, there are 3 commonly used textures in the game, all you have to do is set them through RabbitFX through the following method.
Resource\RabbitFX\Diffuse = ref ResourceDiffuse Resource\RabbitFX\Lightmap = ref ResourceLightmap Resource\RabbitFX\Normalmap = ref ResourceNormalmap run = Commandlist\RabbitFX\SetTextures
Note that not all textures needs to be set, just set the ones you need to change.
This is what it will look like inside a mod
[TextureOverrideComponentX] hash = xxxxxxxx match_first_index = xxx match_index_count = xxx ... handling = skip Resource\RabbitFX\Diffuse = ref ResourceDiffuse Resource\RabbitFX\Lightmap = ref ResourceLightmap Resource\RabbitFX\Normalmap = ref ResourceNormalmap run = Commandlist\RabbitFX\SetTextures drawindexed = xxx, xxx, 0 run = CommandListCleanupSharedResources ...
With this, the checktextureoverrides 0 ~ 7 are no longer necessary, removing them is optional but it can improve performance just a little bit...
[CommandListTriggerResourceOverrides]
CheckTextureOverride = ps-t0
CheckTextureOverride = ps-t1
CheckTextureOverride = ps-t2
CheckTextureOverride = ps-t3
CheckTextureOverride = ps-t4
CheckTextureOverride = ps-t5
CheckTextureOverride = ps-t6
CheckTextureOverride = ps-t7
CheckTextureOverride = vs-cb3
CheckTextureOverride = vs-cb4
Becomes:
[CommandListTriggerResourceOverrides]
CheckTextureOverride = vs-cb3
CheckTextureOverride = vs-cb4
(Side note: it has come to my attention that some UI mods have a universal CheckTextureOverride check which has hurt a lot of people's performance, so double check if you have any UI mods that are doing this.)
Hopefully this can help stabilize textures a little bit more and allow mod makers to be a bit more creative with multitexture 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, pass this resource to RabbitFX
Resource\RabbitFX\GlowMap = ref ResouceName
and call the command
run = CommandList\RabbitFX\Run
This is the bare minimum needed to activate RabbitFX.
By default, the brightest value, 1, isn't very bright and is ignored by the bloom calculations in wuthering waves.
An additional boost value is needed to properly create the glow effect, this value can be set using the following value.
$\RabbitFX\Brightness = value
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\interpolation
Here is a snippet from my Verina mod to give you a better idea on how it works, note all values other than ps-t17 and run = CommandList\RabbitFX\Run are optional.
[TextureOverrideComponent4]
hash = 83ced9f7
match_first_index = 101256
match_index_count = 42738
if $mod_enabled
local $state_id_4
if $state_id_4 != $state_id
$state_id_4 = $state_id
$\WWMIv1\vg_offset = 135
$\WWMIv1\vg_count = 60
run = CommandListMergeSkeleton
endif
if ResourceMergedSkeleton !== null
handling = skip
run = CommandListTriggerResourceOverrides
run = CommandListOverrideSharedResources
$\rabbitfx\h = 0
$\rabbitfx\s = 0
$\rabbitfx\v = 0
$\rabbitfx\brightness = 10
$\rabbitfx\interpolate = 1
Resource\RabbitFX\GlowMap = ref ResourceLegEffectMap
run = CommandList\RabbitFX\Run
drawindexed = 28770, 106563, 0
if $cape == 0
drawindexed = 19230, 135333, 0
endif
run = CommandListCleanupSharedResources
endif
endif
Here is an example of how the effect mask is made.
This is the texture for the sword my Taoki uses
I want to make the blade of it glow a nice pink to match her slash effects so I make a seperate texture that is completely black with the parts I want to glow coloured in pink 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 50, set the texture in the ps-t17 slot and run the RabbitFX command.
$\rabbitfx\brightness = 50
Resource\RabbitFX\GlowMap = ref ResourceSwordEffectMask
run = CommandList\RabbitFX\Run
And this is the result.
Happy modding!
** Patterned cutouts - 4.0 New **
Hey everyone! I've added new functionality to RabbitFX to allow patterend cutouts, in theory, this should allow patterend meshes such as fishnet, lace patterns, and patterned frills to be added to mods through textures.
So here's Taoki, let's say I want to cut out the little dragon pattern on her chest and turn it into a hole.
You can see the dragon on her texture at the bottom right.
To cut out the dragon, we must create an entirely new texture for the patterned cutouts.
In the alpha channel of this new texture, you simply need to paint the area you're cutting out black and everything else white. In this case, we're painting the dragon black.
Next, pass this texture to RabbitFX and then run it.
Resource\RabbitFX\FXMap = ref ResourceSwordEffectMask
run = CommandList\RabbitFX\Run
It can be used in conjunction with glow masks. Following the earlier example it should look something like this.
[TextureOverrideComponent4]
hash = 83ced9f7
match_first_index = 101256
match_index_count = 42738
if $mod_enabled
local $state_id_4
if $state_id_4 != $state_id
$state_id_4 = $state_id
$\WWMIv1\vg_offset = 135
$\WWMIv1\vg_count = 60
run = CommandListMergeSkeleton
endif
if ResourceMergedSkeleton !== null
handling = skip
run = CommandListTriggerResourceOverrides
run = CommandListOverrideSharedResources
$\rabbitfx\h = 0
$\rabbitfx\s = 0
$\rabbitfx\v = 0
$\rabbitfx\brightness = 10
$\rabbitfx\interpolate = 1
Resource\RabbitFX\GlowMap = ref ResourceLegEffectMap
Resource\RabbitFX\FXMap = ref ResourceCutoutMask
run = CommandList\RabbitFX\Run
drawindexed = 28770, 106563, 0
if $cape == 0
drawindexed = 19230, 135333, 0
endif
run = CommandListCleanupSharedResources
endif
endif
And here is how it looks, unfortunately, there is just an empty void under her clothes.
I believe in you! Happy modding!