Toolbox & Website Changelogs
v2.19.1 - 2026-10-02
A comprehensive web overhaul, bringing full AI-search indexing, expanded site navigation, and pristine Google Knowledge Graph mapping to the VixForge ecosystem.
Added
- Expanded site navigation. Added dedicated page to the website Planned Features to properly index VixForge's scope.
- Full AI crawler support. The
robots.txtfile has been explicitly configured to welcome major LLM indexers (GPTBot, ClaudeBot, PerplexityBot, xAI-Bot, and Google-Extended), ensuring Vixens Toolbox and VixenWear shaders are fully discoverable in modern RAG-based AI search engines. - Knowledge Graph structured data. Injected comprehensive JSON-LD schemas (
Organization,TechArticle,SoftwareApplication) to explicitly define VixForge Interactive's technical competencies (UdonSharp, HLSL, Built-in Render Pipeline) to search engines.
Changed
- The sitemap is optimized for crawl budgets. Deprecated legacy
<changefreq>and<priority>tags. The sitemap now strictly relies on<lastmod>timestamps to guarantee Googlebot immediately recognizes and indexes new releases. - Consolidated creator entity mapping. "Vixenlicious" is now strictly mapped to the Founder/Lead Developer entity, perfectly separating personal creator aliases from the overarching VixForge Interactive studio brand.
- Streamlined SEO metadata. Trimmed
<title>tags to prevent truncation on mobile SERPs, consolidated description payloads, and purged redundant meta tags to lighten the raw HTML payload for faster parsing. - Refined social authority signals. Pruned dead links from the brand's identity graph, hyper-focusing domain authority strictly onto active GitHub repositories and the primary YouTube channel.
Fixed
- Resolved Google Search Console schema warnings. Cleared missing offers errors by explicitly defining a zero-dollar price for the VPM registry software, and bound article schemas strictly to their
mainEntityOfPageURLs. - Prevented Open Graph layout shifts. Social sharing assets now utilize explicit
ImageObjectdictionaries with defined 1200x630 dimensions, ensuring preview images render immediately on platforms like Discord and Google Discover. - Secured FOUC guard crawlability. Explicitly allowed
/*.js$and/*.css$in the robots directives, guaranteeing Google's Web Rendering Service can execute the Fluent UI hydration scripts without timing out or indexing a blank page.
v2.19.0 - 2026-09-27
The World Engine understands VRC Light Volumes 3, converting a material leaves the original alone, and ImageMagick runs on Linux.
Added
- ImageMagick works in the Linux editor. Badge Studio's badge and template creation, texture resizing in the Avatar Validator and the Quest converter, and the World Engine's Convert To PNG all run on Linux now. macOS still goes without.
Changed
- ImageMagick is updated to 7.1.2-32 (Magick.NET 14.17.2), which fixes six security problems in how some image files are read.
- Converting a material keeps the original. Fix on a finding in SHADERS & REPLACER now saves a copy under
Assets/VixenTools/Converted/Materials/, converts the copy, and moves everything in the open scenes that used the original onto it, inside prefabs and nested prefabs too: renderers, particle trails, terrain, UI, projectors, Udon variables and script fields. Skyboxes are left alone. With VixForge in the project, the copy goes through VixForge's own translation, so the colour, maps, metal, smoothness, occlusion, glow and cutout of a Unity Standard or REDSIM Light Volume PBR material come across. Ctrl+Z puts everything back on the original. - The Light Volumes checks follow Light Volumes 3. They read the Light Volume Manager, where Light Volumes 3 keeps its settings, and its volume and point light components. New checks cover more than 32 active volumes or 128 active point lights (Light Volumes 3 leaves the rest out), volumes with no baked lighting, Clustering off with many point lights, volume tracking or texture refreshing with nothing to follow, a light that redraws its shadow without moving, and Light Volumes 2 components still in the scene. Brightness Cutoff is checked on the manager, where it lives now.
- The performance score counts Light Volumes 3. It looked for the Light Volumes 2 components, so a Light Volumes 3 world scored as if it had none.
- Light Volumes fixes also update the Udon behaviour behind each component, the way the Light Volumes editor does.
Fixed
- The World Engine no longer changes files inside packages. A fix for a mesh, texture, audio clip or material under
Packages/is left out, and the finding says why. Before, a fix could change the import settings of another creator's package or switch the shader on a material inside it. - Scanning again picks up changes to the scene. The World Engine kept the objects from its first scan until you closed the window, so objects you added afterwards, or a scene you opened later, were missing from later scans and fixes.
- TextMesh Pro font materials are no longer offered for shader conversion. Converting one breaks the text it draws.
v2.18.1 - 2026-09-24
Linux and macOS editors can load the toolbox.
Fixed
- The toolbox would not load in the Linux or macOS editor. ImageMagick is only included for Windows, and the tools that use it stopped every other tool from loading. Everything else works on Linux and macOS now. Badge Studio's badge and template creation, texture resizing in the Avatar Validator, and the World Engine's Convert To PNG need ImageMagick, so they're turned off there and say why. Quest conversion still shrinks textures there, using Max Size instead of resizing the image file.
v2.18.0 - 2026-09-23
See what is slowing the editor down, find what a tool left in memory, World Engine texture fixes that never touch your image files, and a safer ImageMagick.
Added
- Scene View Enhancer, at
VixenTools/Unity Engine/Scene View Enhancer, for world and avatar projects. It caps the editor's frame rate through Unity's own Interaction Mode setting, and puts your previous setting back when you turn it off. Its Vixen Scene Stats panel in the Scene view shows how often the Scene view redraws, the frame cap, script memory, engine memory and graphics driver memory. It refreshes once a second, so it adds at most one redraw a second of its own. - Memory Diagnostics, at
VixenTools/Unity Engine/Memory Diagnostics. Press Take Snapshot, repeat the task you want to test, press Free Unused Memory, then Compare With Snapshot to see which textures, materials and meshes a tool made and never freed. Only objects that are not saved in your project are counted, so loaded assets never show up as leaks. Largest Textures lists the 50 textures using the most editor memory and marks the ones made at runtime, by a tool or by Unity itself. - Convert To PNG, in the World Engine's new TEXTURES: SOURCE FILES section. For a texture stored as a PSD, a JPG, or a TIF, TGA or BMP file over 15 MB, it saves a PNG copy to
Assets/VixenTools/Converted/<Material>/, gives the copy the same import settings, and points your materials at it. Your original file is never changed or deleted. Files underPackages/are left alone, and a texture is only offered when every use of it in the scene is a material the tool can change, so the copy never loads alongside the original.
Changed
- The performance map is a tab in the World Engine. It used to open in a window of its own after every scan. Now FINDINGS and PERFORMANCE MAP sit side by side in the World Engine window, and one scan fills both.
- The World Engine checks textures the way the VixForge Texture Check does. Every texture fix changes import settings only. A texture that imports bigger than your target size gets a lower Max Size, where before its image file was overwritten at the smaller size. New findings cover normal maps that are not on BC5, mipmaps switched off, a texture in the wrong colour space for its slot, a normal map imported as a colour texture, and bent normal maps bigger than they need to be. A fix that makes a texture bigger in memory says so and is left out of Toggle All Fixes. Uncompressed textures are reported with advice, and the compression choice is left to you.
- Findings show which objects a nested object sits under, below the description, so two objects with the same name can be told apart.
Removed
- The Massive Raw File Bloat check. It flagged image files over 15 MB and re-saved them. VRChat never gets your source file, only the texture Unity imports from it, so the file's size on disk costs nothing in game.
- The non-power-of-two check. Its fix stretched the texture to a new size, and Unity already imports those sizes as they are.
Fixed
- World Engine checks that had stopped working. Newer ProTV, TXL, LTCGI and UdonSharp releases renamed what these checks looked for, so they found nothing. They now read the current names, and older versions are still checked the old way: ProTV 3 speakers (the AudioLink link check and the 3D speaker distance check), ProTV 3's audio adapter, TXL 2's Audio Manager AudioLink link (now with a one-click fix), LTCGI screens that take their colour from AudioLink in a scene without AudioLink, and the sync mode an UdonSharp script declares.
- The compute score counted things that cost nothing. A baked reflection probe counted as much as a realtime one, and a camera with its Culling Mask set to Nothing counted like one that renders the world. Only realtime reflection probes and cameras that draw something count now.
- The heavy script check counted code that does not run every frame. It added up every instruction in a script, so scripts that only react to clicks and events were flagged. Across 732 real Udon programs, 25 of the 33 over its limit run nothing every frame, among them TXL's player controls, playlist queue, audio manager and video manager. It now counts only what Update, LateUpdate, FixedUpdate, PostLateUpdate and the render events can reach, times the number of active objects running the script.
- Continuous sync was flagged on scripts with nothing to sync. A script with no synced variables sends nothing, however it is set, and a pickup or Rigidbody on a parent or child object was missed. AudioLink's controller, whose pickups are its two handles, was flagged for both reasons. Both are checked now.
- The texture size fix overwrote original image files. It shrank a texture by rewriting its source file, including files from other creators' packages, and it could set Max Size higher than you had it. It now only ever lowers Max Size.
- The player data check fired for any script with an Update. It now fires only when saving player data can happen from an event that runs every frame.
- A scan logged an error for every TXL screen material. The missing texture repair looked for an emission texture by name and found TXL's Emission Scale, a number with the same name. It now only looks at texture slots, so it can no longer put a texture into a colour or number setting either.
Security
- ImageMagick updated to 7.1.2-31 (Magick.NET 14.17.1). It brings 25 upstream security fixes made since the version we shipped, among them two code injection flaws in text labels, which Badge Studio uses to draw your badge text, and a flaw in how ImageMagick enforced its own format rules.
- ImageMagick only works with the formats the toolbox needs. A security policy now blocks script formats (MSL, MVG, SVG), PostScript and PDF, web addresses, the clipboard and screenshots, and a set of rarely used formats that had recent security fixes. It also stops ImageMagick from starting any other program, and refuses images wider or taller than 32,768 pixels. The texture formats Unity imports are not blocked.
v2.17.0 - 2026-09-05
Quest conversion for worlds, and the World Engine learns collision layers, baked lighting and four more packages.
Added
- Quest World Converter, a new tool at
VixenTools/Scene/Quest World Converter. Worlds never had a Quest conversion path, only avatars did. Press Scan Open Scenes and it collects every material on your renderers, terrains and skybox, then Convert Selected Materials writes Quest-ready copies intoAssets/VixenTools/Quest World/<Scene>/. Your originals are never touched. Materials already using a Quest shader are detected and left alone. Point the scene at the new materials is off by default, and asks before it swaps anything. - Collision layers, not just collider shapes. The World Engine now reports what your colliders actually are, and reads your project's real collision matrix to find geometry players will walk straight through. It also catches a concave mesh collider under a physics Rigidbody, which Unity cannot simulate at all.
- Baked lighting checks. New findings for objects set to Contribute GI that sit under a Rigidbody, so their baked lighting stays behind when they move; for moving objects with Light Probes switched off in a baked scene; for a baked scene with no probes and no Light Volumes; and for a probe group that was never baked. If Light Volumes is in your scene, the probe findings stay quiet, because Light Volumes already covers that job.
- Post processing checks. Missing Reference Camera, a reference camera with no Post Process Layer, a volume layer set to Nothing, volumes sitting on a layer the camera is not watching, volumes with no profile, and Temporal Anti-Aliasing, which VRChat does not accept.
- GPU Particle Volumes support, covering a manager with no mesh assigned, volumes recalculating every frame, and empty include or exclude slots.
- TXL Player Audio, Portal and Misc support, covering duplicate audio managers, zones with no trigger or no settings, portals missing their station or zone, chairs with no station, and material swappers with nothing to swap.
- Light Volumes 3.0 support for the runtime shadow baker, catching one with no target assigned and one left on Realtime.
Fixed
- Two World Engine checks had quietly stopped working. The VRSL check looked for a class that no longer exists in VRSL, and the ProTV check looked for a
UrlInputcomponent that ProTV 3 removed. Both had been finding nothing at all. They now look for what those packages actually ship. - The Udon sync fix wrote a value that does not exist. Aligning an Udon behaviour's sync mode set the field to an undefined number, and VRChat's own setter then copied that number onto every other Udon behaviour on the same object. It now sets None properly.
- Udon instruction counts were inflated. The heavy script warning counted data declarations as executed instructions. Measured across 251 real Udon programs, counts were about 22 percent high and up to 43 percent on individual scripts.
- Colliders and contacts could be deleted from an avatar. The Optimization Suite only protected a PhysBone collider or contact when its Root Transform was filled in, but leaving that empty is the default and means the component uses its own transform. Those bones were left eligible for removal. Every collider and contact now protects the object it sits on.
- The Quest converter offered shaders VRChat rejects.
Mobile/Standardwas a target andStandardwas the fallback, and neither is on VRChat's mobile shader list, so uploads replaced them. Both converters now read that list from the SDK itself and offer all ten shaders on it.
Changed
- The shader replacer works with our shaders.
VixenWear/andVixForge/shaders are the replacement targets and are never flagged for conversion. RetiredVixenWorld/andVixen/shaders from earlier releases are flagged so you can move off them. - Poiyomi materials are treated as broken when Poiyomi is missing. A locked Poiyomi material still renders but its inspector will not load and it cannot be unlocked. These used to be protected from replacement by the rules covering hidden and optimized shaders. When Poiyomi is not in your project they are now offered for conversion instead.
- More third-party shaders left alone. Towel, GPU Grass, GPU Infinite Grass, QvPen, Silent and Mochie shaders are no longer flagged for conversion.
v2.16.0 - 2026-08-30
A new tool for when your materials quietly disagree with each other, and our X handle is now @VixForge.
Added
- Material Conflict Finder, a new tool at
VixenTools/Avatars/Material Conflict Finderand on the Hub's Avatar Tools grid. Drop an avatar in, press Analyze Materials & Toggles, and it reports what it found in four sections, each with the buttons to settle it. - Cross-Material Property Mismatches. Toggle properties holding different values across your materials, grouped by value so you can see which materials sit on which side. Sync All to 0.0 (OFF), Sync All to 1.0 (ON) and Align Majority settle a whole group in one press, and Select All and Ping take you to the materials involved.
- Orphaned Shader Keywords. A toggle switched off while its shader keyword is still enabled. That is the state where a feature reads as disabled in the inspector but still renders. Fix clears one, Fix All Keywords clears them all.
- Animation & VRCFury Driven Toggle Conflicts. A clip drives a toggle up to 1.0, but the keyword it needs is switched off on the material, so the animation changes nothing in game. It reads your VRC base and special playable layers, plus any clips VRCFury carries.
- Scanned Materials Inventory. Everything the scan looked at, in one list.
- Locked materials read correctly. A locked material carries no keywords, because the locker bakes them into the generated shader, so a plain keyword check calls every animated toggle broken. The finder reads the pre-lock keyword list stashed on the material instead, and leaves alone any property the lock deliberately kept animated.
Changed
- Our X handle is now @VixForge. The Hub's Twitter button, the package and VPM listing author links, and every page on this website point at
x.com/VixForge.
v2.15.1 - 2026-08-17
Every button, panel and dialog in plain English, two Hub fixes, and the PhysBone Topology Mapper is now PhysBone Blueprints.
Changed
- Fix Scene Data moved to
VixenTools/Unity Engine/Fix Scene Data, to keep the menus a little shorter. - Plainer names on everything you click. Buttons and panel headers across the toolbox lost the jargon. EXECUTE DEEP SYSTEM SCAN is now SCAN AVATAR, EXECUTE DESTRUCTIVE TOPOLOGY FIXES is APPLY SELECTED FIXES, EXECUTE TARGETED DOWNSCALE is Downscale Selected Textures, Optimization Target (px) is Max Texture Size (px), and the Optimization Suite's panels read Settings, Physics Components, Textures and Memory & Limits. The Quest engine converts with Convert To Quest, the Preset Manager's tabs are Extract From Assets and Create New Preset, and the Hub's Architecture tab is now Overview. Tool names, menu paths and every setting behave exactly as before: only the wording changed. The docs and this website match.
- The PhysBone Topology Mapper is now PhysBone Blueprints, under
VixenTools/Avatars/PhysBone Blueprints. Its two buttons are Save Blueprint and Apply Blueprint instead of Extract Master Copy and Inject Blueprint, and new blueprints are namedAvatar_PhysBonesrather thanAvatar_MasterTopology. Blueprints you already saved keep working: only the default name for new ones changed. - The Quest converter's component list dropped its "System:" prefixes. The sections are just Animators, PhysBones, Colliders and so on, and the auto-culled ones say removed for you.
Fixed
- The update badge lands on the changelog. Clicking the update notice in the Scene View opened the Hub on News the first time, because it asked for the Changelogs tab before the Hub had finished building it. It now waits and takes you where it says it will.
- Old releases stopped halfway down. Reading release 1.4.3 in the Hub's Changelogs tab cut off partway, because the Hub used to stop reading a document the moment it saw the words "Network Links", and that release happens to mention them. Every release reads to the end now.
v2.15.0 - 2026-08-15
Shrinking a texture is the blunt way to save VRAM, so the Optimization Suite now offers you the format first and only suggests resolution afterwards. The destructive tasks stop arriving pre-ticked, and they stop treating anything your animations or VRCFury reference as dead weight. The Hub also starts telling you the truth about which SDK you have.
Added
- Texture compression comes before texture shrinking. The Optimization Suite now finds textures left on Uncompressed and offers to move them to high-quality block compression, at the top of the task list, above the resize panel. An uncompressed RGBA texture costs 32 bits per pixel and a compressed one costs 8, so this is the same VRAM saving you would get by halving the resolution, without the blur. Unity picks the right block format per texture, so colour maps get BC7 and normal maps stay normal maps. Shrink the resolution afterwards if you still need to, rather than first.
- Free quality upgrade for transparent textures. A second task spots textures already compressed on the older DXT5 format and offers BC7 instead. Both are 8 bits per pixel, so memory does not move, but banding and block artifacts largely go away. It deliberately skips opaque textures: those sit on 4-bit DXT1 today, and moving them to BC7 would double their memory rather than cost nothing.
Changed
- Magick.NET updated to 14.16.0 (ImageMagick 7.1.2-29, up from 14.14.0 and 7.1.2-25). Upstream bug fixes only. Nothing about how your textures are resized or composited has changed.
- The imaging library is Editor-only now. It moved out of
Runtimeand ships with import settings that pin it to the Editor on Windows x64, so 25 MB of native imaging code can no longer be dragged into an Android or Quest build. - Animator Forge writes to
Assets/VixenTools/AnimatorForge/. Everything the toolbox generates now lives under one folder instead of a secondAssets/VixenForge/one. Clips you already have keep working exactly where they are. - New PhysBone blueprints are named
Avatar_MasterTopologyby default instead of carrying a test avatar's name.
Fixed
- Nothing in the Optimization Suite is ticked for you any more. Every task in the Destructive Optimization Engine now starts unchecked, so the execute button does nothing until you have actually chosen something. They used to arrive pre-selected, which put a one-click purge of your hierarchy behind a button you might press while still reading the list.
- Purging orphans and collapsing leaf bones now check whether anything is using them first. Both passes previously looked only at components and children, so an empty GameObject that a clip toggled, or a bone a VRCFury component pointed at, read as dead weight and got destroyed. Both now build a reference set from every animation clip on the avatar (your playable layers plus anything VRCFury carries), every object reference held by a VRCFury component, contact senders and receivers, and constraint sources, then skip anything that appears in it.
- The Hub showed the wrong VRChat SDK version. It read the SDK version out of the toolbox's own manifest, so it always printed the minimum version we build against rather than the SDK you actually have. It now reads your installed SDK.
- PhysBone Topology Mapper in projects without the VRChat SDK. It was meant to open with a friendly "SDK required" screen, but the whole tool was compiled out, so it never appeared at all. The fallback works as described now.
- Animation Workbench property categories. Shader properties starting with
_ALnever landed in the AudioLink group. They do now, without sweeping up names like_Alphaby mistake.
Removed
- Dead mesh-welding code left behind when QEM decimation replaced it, plus a duplicated property-category helper.
v2.14.0 - 2026-08-10
Animation Workbench learns to see the rest of your clip. Material swaps were invisible to it, so a clip that opened on one looked completely empty - those now list with every key. Component properties can be animated without leaving the window. And the window loads its styling again instead of opening bare.
Added
- Animation Workbench - animate components: A Component Property picker now sits beside the material one. Anything Unity can key on your avatar is reachable from it: a component's enabled toggle, Transform values, fields on a script. Set your Preview Target, hit Choose, pick the property, then Add Binding. Until now the only thing you could add was a material property, so anything else meant leaving the Workbench.
Fixed
- Animation Workbench - material swaps were invisible. A clip that swapped materials looked empty. Swap tracks are a different kind of track from the rest and were never being read, so a clip that opened on one showed nothing at all. They now list alongside everything else, marked as swaps, with each key shown as its time and the material it swaps to. Single-key swaps pinned at the start show up too, which is how most of them are written. They are there to be read rather than edited, since there is nothing to ease between two materials.
- Animation Workbench - the window opened unstyled. It was looking for its stylesheet somewhere it was never kept, so it fell back to bare layout and logged a warning every time you opened it.
v2.13.1 - 2026-08-07
Hub maintenance release focusing on ecosystem compliance. Removed legacy partnership links, deprecated code, and decoupled documentation to streamline the hub environment and maintain strict licensing standards across the board.
Removed
- Hub: Removed the Partnership tab. Due to conflicting values and morals, we are no longer partnered with Engima Industries and will no longer be supporting their needs.
- Hub: Removed the ShaderDoc tab. This is now packaged separately with the Gumroad products.
- VixForge Ecosystem: Removed TechnicallySane's integrations completely due to licensing compliance.
v2.12.0 - 2026-07-11
Adds the Animator Forge, a new avatar tool that both diagnoses broken animators and builds fully-rigged toggles for you. New avatar bases often ship with FX controllers that reference VRChat driver parameters like Seated without declaring them, which floods the SDK panel with "uses parameter which does not exist" errors. Animator Forge finds those and a whole family of related problems, and its Forge side generates a complete toggle - parameter, menu control, FX layer and states, and animation clips - in a single click, matched to your avatar's own Write Defaults convention. Editor tooling only; Built-in Render Pipeline / VRChat, as always.
Added
- Animator Forge - Doctor: A new diagnostics engine that scans an avatar's playable-layer controllers plus its Expression Parameters and Menu, then lists ranked findings with one-click fixes. It catches transitions and blend trees that reference undeclared parameters (recognizing the full set of VRChat driver parameters such as Seated, AFK, VRMode and the Gesture values, and adding them back with the correct type), a broken mix of Write Defaults, menu controls bound to missing parameters, synced-parameter cost overflow, duplicate or mismatched parameters, dead zero-weight layers, and invalid transitions. Every finding has a Locate button and, where safe, a Fix, plus a "Fix all safe issues" batch for the unambiguous ones.
- Animator Forge - Write Defaults Normalizer: The Write Defaults detection and fix follow the widely-used VRCFury model - grouping states as normal, Direct blend tree, or additive, taking the target from the FX layer's majority, and always forcing Direct blend trees and additive layers on. It reports the exact offending states and only changes anything when you ask it to.
- Animator Forge - Empty Write-Defaults-Off Clip Check: Detects the SDK's "Write Defaults disabled where the animation clip is either missing or empty" warning (using VRChat's own scan logic), and one-click fixes it by assigning a shared inert clip with a single harmless property - which is what actually clears the warning, since a truly empty clip still reads as empty to the SDK.
- Animator Forge - Rig Builder: The Forge tab builds complete, ready-to-use rigs with no manual Animator wiring. Five types are supported: GameObject toggle, blendshape toggle, blendshape slider (a radial dial), material swap, and exclusive group (a radio set where enabling one option disables the rest). Each build generates the Expression parameter, the menu control or submenu, the FX layer with states and transitions, and the animation clips, with new states matched to the avatar's Write Defaults convention. It is non-destructive - it reuses or creates the FX controller and expression assets, clones read-only sample controllers before touching them, and never deletes existing layers or parameters.
v2.11.0 - 2026-07-09
The Latex Ultra shaders reach 3.0.0 - a major overhaul. Hyper-realism gains a dedicated occlusion and baked-shadow map pair; high-gloss sparkle is gone by default; MatCaps grow to five layers with an avatar-lock Freeze, super-bright intensity and a fully reorganized panel; Emissions grow to five layers with consistent AudioLink; VRSL becomes its own tab; Light Volumes gain optional per-light speculars; and locked materials compile faster. Both shaders. Built-in Render Pipeline / VRChat only, as always. Every new feature is off or neutral by default so existing materials keep their look, but this is a big release - re-lock and spot-check your materials.
Added
- Occlusion & Baked Shadow maps - new Lighting Detail section (Both Shaders): A dedicated Occlusion Map darkens ambient / indirect light in crevices, and a Baked Shadow Map paints permanent contact shadows that also cut direct light - both for added realism on the latex. Each has a channel picker and strength, and both share the Albedo sampler, so they add no sampler-budget cost. Off by default, so existing materials are unchanged.
- Two more MatCap layers, five total (Both Shaders): MatCap 4 and MatCap 5 join 1-3, each a full matcap layer (texture, mask and channel, tint, rotation, intensity, blend mode, lighting mix, tiling, position, scroll). Off by default; no added sampler-budget cost.
- MatCap Freeze - lock a matcap to the material (Both Shaders): A per-matcap Freeze slider stops a matcap sliding as the camera moves, so it reads as baked-in detail that turns naturally with the avatar instead of a mirror-like reflection. Default off (classic reflective matcap).
- Three more Emission layers, five total (Both Shaders): Emission layers 3, 4 and 5 join 1 and 2, each with its own colour, map, mask channel and AudioLink band and amplitude. Off by default; no added sampler-budget cost.
- Optional per-light Light Volume specular (Both Shaders): A new toggle routes Point Light Volumes through the light-source-size-aware per-light specular path for sharper, more accurate point-light glints on glossy latex, alongside a new Point Light Volume Shading strength control. Off by default (keeps the prior look).
Changed
- Specular anti-aliasing on by default - no more sparkle (Both Shaders): High-gloss latex no longer shimmers or fizzes under motion. The specular anti-aliasing that already existed now defaults on, and an always-on roughness floor protects even previously-saved materials and distant surfaces. If you preferred the razor-sharp highlights, turn the anti-aliasing back down.
- MatCaps reorganized into one panel (Both Shaders): The separate matcap tabs are consolidated into a single MatCaps section with Global Settings and Matcap 1-5 as sub-sections. Each matcap now has a Tiling & Movement sub-section (holding the Freeze control) and a dedicated Offsets sub-section, with clearly labelled position controls - Offset X moves side to side, Offset Y up and down (previously present but hidden inside an unlabelled field).
- Brighter MatCaps (Both Shaders): MatCap Intensity now ranges up to 6 (was 2), so a matcap can push a strong, over-driven glow.
- Emissions reorganized, AudioLink made consistent (Both Shaders): Each emission layer is now its own sub-section, and every layer's AudioLink band and amplitude sit inline with that layer and hide unless AudioLink is enabled. Previously only the second layer showed its AudioLink controls in this panel while the first layer's lived over in the AudioLink tab.
- VRSL promoted to its own tab (Both Shaders): "Stage Lighting & VRSL" is now a top-level tab instead of being buried inside the AudioLink panel.
- Faster locked-material compiles (Both Shaders): When a procedural effect is turned off (water drips, melting goo, the AudioLink HUD ring, fracture shards / trails), locked materials now drop that effect's geometry pass entirely at lock time, so locking and in-headset shader compilation are quicker. Animated toggles are respected - a pass is kept whenever its toggle is marked animated - so runtime toggling still works. Unlocked materials are unchanged.
Fixed
- Light Volumes point-light bugfix and re-sync (Both Shaders): Re-synced the vendored Light Volumes to the current upstream revision, which fixes an off-by-one in the point-light attenuation lookup. The Light Volumes version stays 3 and every entry point the shaders use is unchanged, so the fix comes in transparently; no new samplers, keywords or variants, and existing worlds render unchanged.
v2.10.1 - 2026-07-05
A same-cycle hotfix that finishes the per-mesh bounds work from 2.10.0. The auto-fit could still mis-place the culling box on meshes carrying a Blender import scale (they would vanish up close), and its PhysBone swing inflation over-bloated body meshes genuinely weighted to a far-swinging bone. Both are resolved by fitting to Unity's own posed bounds and dropping the swing-reach heuristic entirely. Built-in Render Pipeline / VRChat only.
Added
- Automated Animated Material Swap Re-Mapping (VixForge Quest Engine): The Quest conversion pipeline now natively supports animated material swaps. It scans both standard Animators and
VRCAvatarDescriptorcustom layers (Base and Special) for animation clips that swap materials at runtime. When detected, it clones the sourceAnimatorController(saving it as_Quest.controller) and deep-copies the affected.animclips. It then rewires the object reference curves within the cloned clips to point to the new Quest-optimized materials, and recursively rebuilds the state machines and blend trees to reference the remapped clips. This completely eliminates the need for manual controller duplication and clip editing when porting avatars with material-based toggles or effects.
Fixed
- Auto-Fit Bounds No Longer Mis-Places the Culling Box (Avatar Optimization Suite): The 2.10.0 fit snapshotted each mesh through
BakeMeshand re-projected it with a hand-built matrix. On FBX meshes carrying a Blender import scale (e.g. 0.0254 or 2.54), that applied the scale a second time - collapsing the box and shoving its centre far off (a body read a centre near Y = -38 in root-bone space), so the mesh frustum-culled and disappeared the moment the camera drew close. It now reads Unity's own posedlocalBoundsdirectly (via a momentary Update-When-Offscreen toggle), which is already in the root bone's space, so the fitted box always matches what Unity actually culls against. - PhysBone Swing Inflation Removed (Avatar Optimization Suite): The swing-reach inflation added in 2.10.0 still over-bloated compact meshes: a body legitimately weighted to a bone that a chain can swing about a metre received a guaranteed-worst-case box roughly double its true size, and its centre collapsed toward the hips. Guaranteed swing coverage is too conservative for static culling bounds, and swinging appendages (tail, hair, ears) are separate meshes with their own bounds anyway, so the swing-reach pass is removed. Each renderer now fits to its posed geometry plus a small (about 10%) margin for animation range, matching Unity's default tight bounds.
v2.10.0 - 2026-07-04
A combined release. VixForge Interactive and Enigma Industries join forces; the Latex Ultra shaders gain an in-scene four-layer decal system and two realistic-lighting refinements, re-sync to the current upstream VRC Light Volumes revision, and fix two Thry-locking regressions that dropped AudioLink and the procedural effect passes; and the Avatar Optimization Suite gets a ground-up overhaul with a real QEM mesh decimator, correct per-mesh bounds fitting, precise Locate navigation, selective texture targeting, and a per-avatar state flag. Built-in Render Pipeline / VRChat only, as always.
Added
- News Tab & Enigma Industries Partnership (VixForge Hub): VixForge Interactive and Enigma Industries (the next chapter of Club Enigma) have partnered - two studios pooling tools, community, and immersive-world experience for VRChat. The VixForge Hub now opens on a new front-and-centre News tab with the full announcement and one-click buttons to the write-up, Enigma's Discord, and Enigma's VRChat group.
- QEM Mesh Decimation (Avatar Optimization Suite): A real Quadric Error Metric edge-collapse decimator (Garland-Heckbert), the same class of algorithm as Blender's Decimate, replaces the old "smoothweld" that could only merge duplicate seam vertices. It drives each heavy mesh toward a triangle target while preventing face flips, rejecting sliver triangles, and preserving UV / normal seams, material (submesh) boundaries, and open borders. It locks the eye / mouth / teeth submeshes and the hand bones, interpolates UVs, vertex colours and bone weights across every collapse, and remaps every blendshape. Applied non-destructively (a new patched mesh, reversible with undo).
- Decimation Target Slider (Avatar Optimization Suite): A new Decimation Target (tris / mesh) slider with a typed input box controls how aggressive the decimation is. Higher keeps more detail (softer); lower is smaller and more aggressive. Only meshes above the target are decimated, each down to the target.
- Selective Texture Targeting (Avatar Optimization Suite): The blanket "downscale everything" pass is replaced by a per-texture targeting panel. Every texture gets its own checkbox, dimensions, a linear/data tag, and a Locate button, plus Select All / Deselect All and a live count, so you pick exactly which textures to resize instead of processing them all. Smart defaults pre-select only textures that need it.
- Per-Avatar Optimization State Flag (Avatar Optimization Suite): A versioned per-avatar cache (mirroring the World Engine's lookup cache) records which Destructive Topology fixes have been applied, so a task clears from the list after a pass instead of re-listing forever. It only re-surfaces when the avatar actually changes or the target slider moves.
- Four-Layer Decals (Both Shaders): A new Decals section places up to four independent decals on the material, each positioned right in the Scene view by dragging the gizmo handles. Per layer you get tint, position / scale / rotation (with optional spin), side offsets, a UV source, a packed RGBA mask channel, eight colour blend modes (Normal, Darken, Multiply, Lighten, Screen, Add, Subtract, Overlay), an emission glow, a smoothness offset so a sticker can read glossier or more matte than the latex, mirror and symmetry, and a clamp-or-tile toggle. All four decals share one texture sampler, so they add no sampler-budget cost. Off by default, so existing materials are unchanged.
- Horizon Specular Occlusion (Both Shaders): A new control that fades reflections a normal map would otherwise leak through the surface at grazing angles, across reflection probes, Light Volumes, LTCGI and VRSL. Full by default; set to 0 to disable.
- Specular Highlight Clamp (Both Shaders): A new control that caps direct point-light highlight intensity to tame sparkle on very glossy latex. Effectively off by default; lower it to clamp harder.
Changed
- Realistic Lighting, Refined (Both Shaders): The Horizon Specular Occlusion and Specular Highlight Clamp controls above are surgical, opt-in additions to the existing realistic lighting model. Their defaults reproduce the previous look exactly, so nothing changes until you reach for them.
- VRC Light Volumes Re-Sync (Both Shaders): Re-synced the vendored Light Volumes include across this cycle's upstream revisions - a structural performance pass that also reworked speculars to be more physically correct and light-source-size aware (larger point, spot, and area sources fall off more softly), followed by the current early-July revision that compiles faster, folds in upstream compile-error fixes, and swaps in a cheaper fast-exp path. The one entry point whose signature changed (the point-light sampler, whose parameters were reordered) was updated at both call sites to preserve the previous look exactly; every other entry point is unchanged. No new properties, samplers, textures, keywords, or shader variants, and existing materials and worlds render unchanged.
Fixed
- "Locate" Now Jumps to the Real Offender (Avatar Optimization Suite): Every Locate button on a VRChat official performance warning used to just ping the avatar root. Each category now resolves to the actual worst offender - the heaviest renderer for the triangle count, the widest-reaching renderer for the bounding box, the renderer with the most material slots, the largest chain for PhysBone counts, the first matching component for collider / contact / light / particle / cloth / audio counts, and the heaviest texture for VRAM - so Locate takes you straight to the thing to fix.
- Per-Mesh Bounds Fit Was in the Wrong Space (Avatar Optimization Suite): On avatars whose body is skinned across a scaled armature, the auto-fit produced a culling box roughly twice the correct size and mis-centred, because it fit against the renderer's own transform while Unity stores and culls a Skinned Mesh Renderer's bounds in the root bone's space. It now resolves the true root bone and bakes the mesh through Unity's own skinner, so the fitted box matches Unity's default tight bounds.
- PhysBone Swing Inflation Over-Bloated Static Meshes (Avatar Optimization Suite): The bounds swing-reach inflation was applied whenever a mesh touched any bone in a PhysBone chain (including the anchored root) and tested against the whole skeleton, so a body would get inflated by an unrelated mane or tail chain it wasn't even weighted to. Inflation is now filtered to bones the mesh actually has vertex weight on, and scales with how far down the swinging chain that weight sits.
- AudioLink No Longer Fails to Compile on Locked Materials (Both Shaders): Locking a material with the Poiyomi / Thry optimizer (required before an avatar upload) could drop AudioLink from every shader pass except the first, so affected materials failed to compile with an "undeclared identifier" error. The optimizer inlines each shared include only once per shader, and the material had previously pulled the AudioLink helper in separately inside each pass, so only the first pass kept it. The AudioLink include is now hoisted into a single shared block that the engine applies to every pass, so all passes get it after locking. Affects both shaders; re-lock any affected material to pick it up. No new controls, no cost, and unlocked materials are unchanged.
- Locking No Longer Breaks the Procedural Effect Passes (Both Shaders): Locking a material with the Thry optimizer (required before an avatar upload, so unlocked shaders are not stripped from the build) was silently disabling the geometry stage of the procedural effect passes - the water drips, the melting goo, the AudioLink HUD ring, and the fracture shards and trails - leaving them to render incorrectly or fail to compile. The shader now tells the optimizer to keep its geometry passes when locking, so every effect survives the lock intact. No new controls, no cost, and unlocked materials are unchanged; re-lock any affected material to pick up the fix.
v2.8.1 - 2026-06-28
A behaviour-preserving refresh that tracks the latest upstream VRC Light Volumes 3.x release. Point-light shading gains light-source-size awareness, so larger point, spot, and area light sources fall off more softly across a surface. No new controls and no visible change to existing materials. Built-in Render Pipeline / VRChat only, as always.
Changed
- VRC Light Volumes 3.x Point-Light Refresh (Both Shaders): Re-synced to the latest upstream Light Volumes 3.x release. Upstream split point-light shading strength into its own control and made the falloff aware of each light's physical source size, so larger sources now blend more smoothly across the surface. The material adopts the new call signature at the previous default strength, so existing materials and worlds render exactly as before. No new properties, samplers, keywords, or shader variants.
v2.8.0 - 2026-06-26
The big lighting and integration refresh: matcaps gain a real blend model and a third layer, LTCGI gets per-lobe modes and colour tints, Light Volumes moves to upstream 3.x, AreaLit is retired, TechnicallySane lighting goes public (TSLCE-first with GlobalRGB fallback), and a stack of point-light / parallax / droplet rendering bugs are fixed. Build times are heavily optimized via dynamic branching, and the inspector is reorganised into one collapsible section per feature. Built-in Render Pipeline / VRChat only, as always.
Added
- Dynamic Branching (Both Shaders): All heavy build-time features and integrations are now locked behind Unity
[Branch], which tells the compiler not to include that feature if it is disabled, reducing build times dramatically. - Third MatCap Layer & Global MatCap Settings (Both Shaders): A third independent matcap layer with its own texture, mask, channel, tint, rotation, tiling, scroll, blend mode, and lighting mix. A new GLOBAL MATCAP SETTINGS group adds
MatCap Projection Bias, a shared 0-1 control that blends every matcap layer between camera-aligned and mesh-UV-aligned projection to dial out the "sliding" feel. - LTCGI Modes, Colour Tints & Auto-Suppress (Both Shaders): New
_UseLTCGIruntime gate, an LTCGI Mode dropdown (Both / Diffuse Only / Specular Only), and independent diffuse and specular tints. When a world bakes its LTCGI into the Light Volumes atlas, the suit's direct LTCGI sampling now auto-suppresses (asint(_UdonLightVolumesWithLTCGI) != 0) to prevent double lighting. - Global Metallic / Smoothness (Both Shaders): New sliders scale packed map metallic and smoothness across the entire surface. Metallic defaults to 0 and smoothness defaults to 0.5.
- Light Volumes Runtime Gate (Both Shaders): New
_UseLightVolumestoggle allows VRCFury to switch the entire Light Volumes path on or off at runtime without a recompile. The editor now derives the keywords from these float gates. - TechnicallySane Lighting, TSLCE-First (Both Shaders): Full TechnicallySane integration reads the modern TSLCE control texture as the primary path and falls back automatically to the legacy GlobalRGB broadcast in older worlds. Controlled by a single toggle and existing tint controls. Now fully supported in both shaders, including SPS.
- 3D Water Droplets on the SPS suit: The geometry-shader droplet pass (real water beads that swell, pinch off, fall, and dry) is now present on the SPS shader. It is a geometry stage and entirely independent of tessellation.
- Tessellation-free Melting Goo on the SPS suit: A new geometry-shader goo pass extrudes downward-hanging, billboarded melt tendrils where the Goo mask is active. The SPS suit gets these geometry tendrils instead of surface tessellation.
- Integration Attribution Help Boxes (Both Shaders): Each integration section now includes a clickable attribution box linking to the upstream project (RED_SIM, _pi_/pimaker, llealloo, AcChosen), plus a conditional reminder that TechnicallySane only functions in compatible worlds.
Changed
- Surface-Relative MatCap Blend Model (Both Shaders): The matcap layers now composite through proper multiply and add carriers (
finalColor = finalColor * MatcapMul + MatcapAdd * litEnv). Multiply and Replace now tint, darken, or overwrite the surface correctly inside the layer's mask. Add is mathematically unchanged. - VRC Light Volumes Upstream 3.x (Both Shaders): Updated to the latest upstream 3.x release and adapted the surf call sites. The regular SH excludes additive volumes. No new material properties.
- Render Mode Dropdown (Both Shaders): Rendering Mode uses Thry's
[ThryWideEnum]drawer so the Opaque, Cutout, Fade, and Transparent dropdown renders correctly in the inspector. - Sampler-Budget Headroom (Both Shaders): Five fragment-only maps now borrow
_MainTex's sampler, freeing up to five sampler registers. - Inspector Reorganised by Feature + Shader Docs Rebuild: The material inspector is now organised into one collapsible Thry section per feature instead of the previous six tabs. The public shader documentation was rebuilt to match.
Removed
- AreaLit Integration (Both Shaders): Removed AreaLit entirely including keywords, properties, includes, and broadcasters. It produced artifacts in worlds with a broadcaster but no active light data. LTCGI and VRC Light Volumes 3.x cover area lighting cleanly.
Fixed
- Parallax Depth Could Black Out the Surface (Both Shaders): The self-shadow raymarch previously started its ray below the height field and tracked the lit margin, locking flat areas to roughly 3% light. The trace was rewritten to use the raw height and accumulate true occlusion so flat surfaces return full light.
- Every 3D Droplet Discarded (Base Shader): A smooth-minimum intersection collapsed the droplet bead to zero, causing all droplets to be discarded. Switched to a smooth-maximum union so the bead and neck silhouette renders correctly.
- Duplicate Toolbar Sections: When using multiple shaders or tools under the VixForge Interactive brand, tools previously created their own redundant "VixForge Tools" editor menus. These have now been merged cleanly under
VixenTools/VixenWearandVixenTools/VixenWorldrespectively.
v2.7.0 - 2026-06-19
The material inspector moves to the Thry shader editor, and the new VRC Light Volumes V3 point / spot / area lights get a stability pass so their baked shadows and volumetrics stop smearing. Inspector and Light Volumes only - the core lighting model is unchanged.
Added
- Thry Shader Inspector (Both Shaders): The hand-written tabbed material inspector was retired in favour of the Thry shader editor. You get Thry's native per-section reset / copy / paste, presets, render-queue and instancing controls, locale and notes, plus a one-click Lock In Optimized Shader optimiser button, the VixForge title bar, and a footer link row (Website / Discord / X / GitHub / Ko-fi). ThryEditor (`de.thryrallo.thryeditor`) is now a required dependency - it is intentionally not bundled, to avoid duplicate-drawer conflicts with other Thry-based shaders such as Poiyomi (which already ships it). Editor and property-layout change only: no HLSL, lighting, pass, sampler, or variant change.
- Light Volumes V3 Stability Controls (Both Shaders): Two new runtime sliders on the Light Volumes group - `Shadow / Volumetric Normal Stability` (`_LV_Pt_Stability`, default 1.0) and `Clearcoat Specular Tightness` (`_LV_CC_Tight`, default 0.5). No new samplers, keywords, or shader variants.
Changed
- Materials Must Be Locked Before Upload: With the Thry optimiser adopted, unlocked materials carrying the optimiser button are stripped from the build and render pink. Locking happens automatically on avatar / world upload, and you can also lock manually from the inspector to preview the final result. This replaces the old bespoke build-time keyword and variant-stripping tooling.
Fixed
- Smeared V3 Point / Spot / Area Shadows (Both Shaders): The new Light Volumes V3 point, spot, and area lights - and their per-light EVSM baked shadows - read smudged because they were shaded with the parallax-raymarched, detail-perturbed normal, so surface noise leaked straight into the shadowcasting and volumetrics. They now use a stable geometric normal (set by `_LV_Pt_Stability`), while the SH diffuse and the reflective speculars keep the full bumped normal. Lower the slider to feed surface bump back into the point-light shadow mask.
- Clearcoat Light-Volume Highlight Wash (Both Shaders): A bright point or area light made the clearcoat's Light Volume specular bloom into a broad wash because the upstream lobe has a high roughness floor. `_LV_CC_Tight` now shrinks that lobe down to a tight glint; the contribution strength still comes from the existing Clearcoat Specular mix.
v2.6.0 - 2026-06-15
Realtime point and spot lights light the suit again, and VRC Light Volumes is upgraded to V3 with its full point / spot / area-light set (including the proper "TV GI" path). Built-in Render Pipeline / VRChat only, as always.
Added
- VRC Light Volumes V3 (Both Shaders, `LIGHTVOLUMES_ENABLE`): Upgraded the vendored Light Volumes include from V2 to upstream V3. The suit now receives Point Light Volumes in addition to baked volumes: point lights, spot lights (parametric / attenuation-LUT / projected cookie), cubemap-tinted point lights, and quad area lights - all projected into the same L1-SH path the volumes already used, so they flow through the existing diffuse + specular machinery and respond to the existing `_LV_*` controls. The surface now passes its shaded world normal so V3's normal-mask term applies. No new material properties.
- TV GI via LV V3 Area Lights (Both Shaders): The "TV lights the room" effect is back, now done correctly through V3 area lights instead of the old raw-texture tint that was pulled in 2.5.0. A world author points a Point Light Volume (AreaLight type) at a video screen's RenderTexture; the LV V3 runtime feeds its colour into the quad-light SH and the suit picks it up automatically, with no per-material setup. Appears only in worlds running the LV V3 runtime; older / no-LV worlds fall back to deringed light probes via the version gate.
- Point Light Volume Shadows (Both Shaders): V3's per-light EVSM shadows (cubemap and single-slice) are enabled. To stay inside the 16-sampler budget, the shadow texture array reuses the existing Light Volumes sampler, so V3 adds zero net sampler registers over V2.
Fixed
- Point / Spot Lights No Longer Leave the Surface Dark (Both Shaders): The main lighting pass carried `noforwardadd`, which deletes Unity's generated ForwardAdd pass. In the Built-in pipeline, point and spot lights are shaded per-pixel only in ForwardAdd, so with it removed the surface only picked them up as a weak per-vertex / SH approximation and read as unlit under them. Removed `noforwardadd`; the GI function and BRDF are split so the additive pass accumulates only direct-light terms, while all indirect / emissive terms (ambient, reflection probe, Light Volumes, LTCGI, AreaLit, VRSL-GI, matcap, emission) and their texture samples are gated to the base pass via `UNITY_PASS_FORWARDADD` - so the additive variant stays well under the 16-sampler cap, which is why `noforwardadd` had been used as a shortcut. Point lights illuminate without cookies / cube-shadows (those variants remain skipped to bound the variant count).
- VixenWorld Surface Ultra Parity: The world-surface shader received the same three fixes: ForwardAdd enabled (with the same base-pass guards), VRC Light Volumes V3, and the Tessellation Detail control (its `_Tess_Edge` slider had the identical inverted / uncapped problem fixed in the latex shader in 2.5.0, now `_Tess_Detail`, range 0-1, capped). Existing world materials reset to the new `0.5` tessellation default.
v2.5.0 - 2026-06-13
Full world-lighting integration pass: the latex now reacts to every supported stage / area-light system, and the legacy TV-GI tint is gone. Every integration is fail-safe - it strips or no-ops cleanly in worlds that don't have the system. Built-in Render Pipeline / VRChat only (HDRP/URP out of scope by design).
Added
- AreaLit Area-Light Support (Both Shaders, `AREALIT_ENABLE`): The latex now receives PiMaker AreaLit area lights, the same role as LTCGI. AreaLit ships no scene-wide broadcast, so the suit intercepts it at the GI level like LTCGI via a small world-side helper (`AreaLitGlobalBroadcaster.cs`, UdonSharp) that publishes the LightCam data as scene globals - every avatar in the world is lit automatically, with no per-material assignment. A per-material pair (`_AreaLit_LightMesh` / `_AreaLit_LightTex0`) remains as a manual fallback when no broadcaster is present. Zero new sampler registers; keyword-gated on `_AreaLit_Int > 0` and stripped (zero cost) when off. On the INTEGRATION tab.
- VRSL GI Wash (Both Shaders): A new additive coloured stage wash on top of the existing VRSL stage-hijack. Instead of overriding emission, it spills the DMX fixtures' colour onto the suit as real light (the stage lighting you up), decoded from the same DMX grid + channel offsets the Color Hijack reads. Controls `_VRSL_GI_Int` / `_VRSL_GI_Spec` / `_VRSL_GI_Sat` on the STAGE tab. Rides the existing `VRSL_ENABLE` keyword + `_UseVRSL` runtime gate; a TexelSize liveness probe skips it in worlds with no DMX node.
- Fail-Safe Fallback Model (All World-Lighting Integrations): Formalised the "no system in this world = no cost, no artifact" guarantee. Heavy paths (VRSL, LTCGI, AreaLit, Light Volumes) are keyword-stripped when off; cheap global reads (VRSL GI) are runtime float-gated and probe their data source for liveness. All integration includes are vendored under the package's `cginc/` folder, so the shaders compile with every package absent.
- MatCap Tiling & 3-Axis Scrolling (Both Shaders + Inspector): Both matcap layers gained a `Tiling (XY)` vector (`_MatCap_Tiling` / `_MatCap2_Tiling`) and a `Scroll (X pan, Y pan, Z spin)` vector (`_MatCap_Scroll` / `_MatCap2_Scroll`). Tiling repeats the matcap around its centre so the sphere highlight stays put as the pattern repeats; Scroll drives smooth continuous motion off real time, where `X` / `Y` pan the UV and `Z` spins the matcap in degrees per second (a matcap is a 2D sphere projection, so rotation is the only third axis that reads as a true scroll). The spin angle is wrapped so it stays precise and jitter-free over long sessions. Defaults (Tiling `(1,1)`, Scroll `(0,0,0)`) are identity, so existing materials render unchanged, with no new sampler registers. Visible repeat at tile > 1 needs the matcap texture's Wrap Mode = Repeat. New rows under each matcap layer's Intensity on the INTEGRATION tab.
- Three New Custom MatCaps (Both Shaders): Released Realistic Neutral High Gloss, Realistic Studio HDRI Latex, and Realistic High Gloss MatCaps. Each is authored for physically coherent highlight behavior and calibrated for the shader’s Fresnel‑weighted blend model. All ship in linear color, mip‑stable, and compatible with the new Tiling & Scroll system. No new sampler registers; assigned through the existing MatCap texture slots.
Removed
- Screen Glow / "Any TV GI" Feature: Removed `_UseScreenGlow` and the whole `_ScreenGlow_*` stack (plus the standalone video / LTCGI-LOD0 texture declarations and the glow block) from both shaders and the inspector. The refined lighting model is unchanged; the dedicated area-light integrations (LTCGI + AreaLit) cover screen lighting properly with real screen geometry, so the Tier-B raw-texture tint is no longer needed.
Changed
- Faster Shader Imports (Both Shaders, `only_renderers d3d11` + `SHADOWS_SOFT` skip): Every program now carries `#pragma only_renderers d3d11`, so Unity compiles a single graphics API instead of the whole desktop set (gles3 / metal / vulkan / glcore). VixenWear is PC / Built-in-RP only and PC VRChat runs DX11, so this cuts both the in-editor reimport and the VRCFury SPS patch + import (which force-synchronously compiles every pass twice) by a large factor. `SHADOWS_SOFT` was also added to the skip_variants list to roughly halve the ForwardBase shadow-receiving variant set, at the cost of slightly harder shadow edges. Heads up: because the shaders compile DX11 only, a player who force-launches VRChat in Vulkan or DX12 (experimental, uncommon) would see the material break; standard PC clients are unaffected.
- Built-in-Only Banner: Both shaders now carry a header note that they target the Built-in Render Pipeline / VRChat and that HDRP/URP are unsupported by design (a surface shader can't compile there). No functional change.
Fixed
- Tessellation Control Inverted & Uncapped (Base Shader): The old `Tessellation Edge Length` slider (`_Tess_Edge`, range 1-50) was backwards and unbounded - its value is the target edge length fed to `UnityEdgeLengthBasedTess`, which sits in the denominator of the tessellation factor, so a lower number meant denser subdivision and the GPU's 64x per-edge cap was hit on dense displaced meshes, causing severe lag. Replaced with `Tessellation Detail` (`_Tess_Detail`, range 0-1) where higher = more detail / cost and lower = cheaper, mapped via `edgeLen = lerp(40, 2, detail)`. The distance / screen-adaptive LOD is preserved (far or small-on-screen surfaces stay cheap) and the per-edge factor is now capped so the close-up worst case can't melt the GPU. The SPS variant has no tessellation, so it's unaffected. Migration: the property was renamed, so existing materials reset to the new `0.5` default and the tessellation amount should be re-set once.
- Shader Compiler Warning (POM, Both Shaders): Eliminated the "gradient instruction used in a loop with varying iteration" warning on the ForwardBase pass. The parallax-occlusion height march now samples the height channel with `tex2Dlod` (explicit LOD 0) instead of `tex2Dgrad`, so the dynamic loop no longer carries a gradient instruction; the runtime early-out and its performance are preserved.
v2.4.0 - 2026-06-08
Added
- Wet & Run-Off Layer (`_UseDrip`, Both Shaders): New POLISH-tab effect that soaks the latex like it just came out of the pool. The "Soaked Look" stack (`_Wet_Amount`, `_Wet_Darken`, `_Wet_Smoothness`, `_Wet_Sheen`, `_Wet_Flatten`) darkens the masked area for water absorption, drives reflections toward a near-mirror water film, layers a dielectric Fresnel sheen on the clearcoat, and flattens micro-detail. Layered on top, animated "Run-Off Rivulets" (`_Drip_Density`, `_Drip_Width`, `_Drip_Coverage`, `_Drip_Speed`, `_Drip_Strength`, `_Drip_Normal`) stream vertical water trails down the UV. A B&W `_DripMask` + `_DripMaskCh` channel picker scopes the whole effect. The soak and rivulets run on both the base and SPS shaders.
- Clear 3D Drips (Geometry, PC Only): On the base `VixenWear/Latex Ultra` shader, `_Drip3D_Strength` adds real water droplets emitted by a dedicated geometry stage: they swell on downward-facing wet areas, form a neck, pinch off, then fall away as free geometry and dry out. Tuned by `_Drip3D_Scale` (droplet size), `_Drip3D_Sheen` (glassiness), and `_Drip3D_Fall` (fall distance), tinted to the Clearcoat Tint. Physics: `_Drip_Sway` adds surface-tension wobble and a breeze that grows with fall distance, `_Drip_BodyFollow` makes attached drops run down along the body before detaching, and `_Drip_FloorCollide` pins drops to the shared world floor and spreads them into a fading puddle. Not present on the SPS shader or Quest.
- Goo Melting Sag (`_UseGoo`, Both Shaders): Gravity-aligned vertex melt that mimics runny/melting latex, running in the displacement stage so it benefits from tessellation on the base shader. `_Goo_Strength` is the master intensity, `_Goo_Reach` extends how far it sags in world units, and `_Goo_Variation` drives procedural FBM noise from uniform to wildly uneven strands, with `_Goo_Noise`, `_Goo_Speed`, and `_Goo_Droop` shaping the tendrils. `_Goo_ToGround` + `_Goo_GroundY` pull the melt toward the world floor regardless of avatar height. Physics: `_Goo_Sway` / `_Goo_SwaySpeed` give a per-strand pendulum swing, `_Goo_BodyFollow` flows goo along the body, `_Goo_FloorCollide` clamps to the floor height, and `_Goo_Pool` spreads landed strands into a puddle. Scoped by `_GooMask` + `_GooMaskCh`.
- Reflection / Specular Masks (Poiyomi / Mochie Compatibility): New `_UsePackedMasks` gate on the SURFACE tab with `_ReflMask_Ch/_Inv/_Str` and `_SpecMask_Ch/_Inv/_Str`. The Reflection Mask dims environment / reflection-probe specular (including clearcoat env, Light Volume, and LTCGI reflections); the Specular Mask dims direct-light highlights. Channel defaults match Mochie packing (B = reflection, A = specular); matcaps keep their own masks and are untouched.
- One-Click Poiyomi / Mochie Metallic Map Setup: New "Set Up for Poiyomi / Mochie Metallic Map" button on the SURFACE tab translates a Mochie/Poiyomi "Metallic Maps" texture (R:Metallic G:Smoothness B:Reflection Mask A:Specular Mask) onto the packed PBR in one shot - sets the four channel selectors, disables AO, and enables the reflection + specular masks.
- Polish Layer Master Gate (`_UsePolish`): New top-of-POLISH toggle (default ON) that wraps the entire polish lighting layer - clearcoat, thin film, SSS, transmission, anisotropy, rim, and multi-scatter compensation - behind a single switch. Off collapses the material to a flat GGX base for a clean matte look or a cheaper variant. A per-pixel `_PolishMask` + `_PolishMaskCh` scopes the layer to painted regions.
- Flying-Shard Fracture Engine (PC Only): The 2.3.0 single-value `_Vtx_Fracture_Str` scatter is replaced by a full shard system driven by new geometry passes. `_Vtx_Fracture_Amount` is a manual hold/animate dissolve, `_Vtx_Fracture_Dist` sets shard hover distance, `_Vtx_Fracture_Spin` tumbles them, `_Vtx_Fracture_Str` is now an AudioLink jitter, and `_Vtx_Fracture_Spiral`, `_Vtx_Fracture_Lift`, `_Vtx_Fracture_Float`, and `_Vtx_Fracture_Trail` shape the dispersal and motion trails. Shard coloring adds `_Shard_ColorMod` (hue shift) + `_Shard_ColorMod_Speed`, and `_UseShardCC` + `_Shard_CC_Str` blend the shards toward the live AudioLink ColorChord. The SPS shader dissolves via the main-pass clip only (no flying shards).
- Autocorrelator Ring Effects (PC HUD): The cyber HUD autocorrelator ring gains four independent, per-band effects - `_Cyber_Auto_Shimmer`, `_Cyber_Auto_Pop`, `_Cyber_Auto_Sizzle`, and `_Cyber_Auto_Electrify` - each with its own band selector so a different AudioLink band can drive each effect. When AudioLink isn't running, each effect falls back to a `_Time`-driven idle level so it stays visible while authoring. The SPS shader declares the props inert for inspector/copy-paste parity.
- Self-Playing AudioLink Console (VU "Console" Style): New `_Cyber_VU_Style` selector (Console / Bar) replaces the old `_Cyber_VU_Band`. The Console style renders a full self-playing AudioLink control panel (gain/threshold/hit-fade/falloff sliders, 4-band readout, theme/ColorChord swatches, and an autocorrelator scope) ported from the upstream `AudioLinkUI-Functions.cginc`, now vendored into the package's `cginc/` folder.
- Per-Widget HUD Reaction Bands: The Waveform, DMX Grid, and Autocorrelator HUD segments each gain their own band selector (`_Cyber_Wave_Band`, `_Cyber_DMX_Band`, `_Cyber_Auto_Band`) so every widget can react to a different AudioLink band instead of sharing one global selection.
Changed
- LTCGI Avatar Mode On By Default: `cginc/LTCGI_config.cginc` now enables `LTCGI_AVATAR_MODE` and `LTCGI_BLENDED_DIFFUSE_SAMPLING` out of the box, tuning the vendored LTCGI path for avatar use and smoothing diffuse area-light contribution. The LTCGI AudioLink no-op fallback `#include` was re-pointed from the upstream `at.pimaker.ltcgi` package path to the package-local `cginc/LTCGI_AudioLinkNoOp.cginc`, so the LTCGI AudioLink branch resolves even when the LTCGI package isn't installed.
- POLISH Tab Reorganization: The POLISH tab now opens with the Polish Layer gate, followed by the new "Wet & Run-Off" and "Goo (Melting Sag)" sections, then the existing Outline section. Each new effect carries inline help boxes explaining the soak-vs-rivulet split, the PC-only geometry drips, and the shader limits on true inertial physics.
v2.3.4 - 2026-06-04
Changed
- Changelog Backfill (Maintenance): Version-bump release that backfilled the `2.3.3` changelog entries that shipped late. No functional, shader, or editor changes - documentation only.
v2.3.3 - 2026-06-04
Added
- SPS-Compatible Shader Variant (`VixenWear/Latex Ultra SPS`): Shipped a dedicated, tessellation-free clone of the Latex Ultra shader so VRCFury's SPS (penetrator) patcher can rewrite the surface pragma's vertex function without a compile error. VRCFury rewrites `vertex:disp` to consume `SpsInputs` but leaves the `tessellate:tessEdge` entry untouched, which fails with a struct type mismatch on the base shader; the SPS variant drops the hull/domain tessellation stage entirely while preserving displacement at vertex resolution (`disp()`) and per-pixel via parallax raymarching. Identical property layout and inspector to the base shader. The build preprocessor, variant stripper, media-state fixer, and keyword sync now resolve both shaders through a shared `VixenWearBuildPreprocessor.IsVixenWearShader()` check.
- Backface-Extrusion Outline Pass (Both Shaders): New keyword-gated (`_OUTLINE_ON`) Cull Front outline rendered as PASS 0 ahead of the main forward pass. The toggle's off state is the no-keyword default, so a material without outlines compiles and runs with zero added cost. Exposes `_OutlineColor`, an HDR `_OutlineEmis` glow, `_OutlineWidth`, `_MaxOutlineWidth` (distance clamp), `_OutlineViewFudge` (pushes the shell toward the camera to mitigate z-fighting), an `_OutlineMask` with a None/R/G/B/A channel selector, and AudioLink reactivity via `_AL_Band_Outline` + `_AL_Outline_Mod`. Width auto-scales with eye depth so the outline reads as a constant visual thickness at distance instead of vanishing. Surfaced under a new "Outline (Backface Extrusion)" section on the POLISH tab.
- Official VRChat Performance Scan (Optimization Suite): The Avatar Validator now runs VRChat's own `AvatarPerformance.CalculatePerformanceStats`, so its rating matches the upload screen exactly and surfaces the ~19 categories the hand-rolled hardware-cap panel never measured - particles, lights, cloth, audio sources, constraints, contacts, PhysBone collision checks, and more. Renders a new "VRChat Official Performance" panel with the authoritative overall rating plus any above-`Info` category warnings. Fully additive and exception-guarded; a missing SDK calculator simply hides the panel.
- Texture Upscale Mode (Optimization Suite): Added a `Resize Mode` selector (Downscale / Upscale). Upscale grows undersized textures with a Mitchell filter plus mild adaptive sharpening (skipping anything already at or above the target), complementing the existing Lanczos downscale path.
- Shared Magick.NET Kit (`VixenMagickKit`): New process-wide `[InitializeOnLoad]` helper that centralizes all ImageMagick usage. Forces OpenMP to use every CPU core (some Windows configs default to a single thread), exposes one `IsProtectedAsset()` policy gate, and provides `TryLosslessOptimize()` - a lossless re-encode that reads bytes through managed I/O first (never holding the source handle open) and runs `ImageOptimizer` with `OptimalCompression`. Files of 10 MB or less get the full 4-pass quality search; larger files drop to single-pass to avoid the multi-minute-per-file lockup that OptimalCompression caused on 30 MB upscale targets.
Changed
- Per-Mesh Auto-Fit Bounds (Replaces Universal 2.5m³ Box): The `OPTIMIZE_BOUNDS` task now sizes each renderer's culling bounds from its bind-pose AABB transformed into root-bone local space (per Unity's SkinnedMeshRenderer docs), instead of stamping a blunt 2.5m³ box onto every mesh. Static meshes get a 1.5x margin (+25% per side) for animation drift; meshes skinned to any `VRCPhysBone` subtree get 3.0x (+100% per side) to cover runtime swing that import-time bounds can't predict; a 0.3m floor guards degenerate stub meshes. `updateWhenOffscreen` stays false to preserve the VRChat performance win.
- Lossless Image Optimization Across Every Image Tool: Badge Maker, the Quest Conversion Engine, and the World Engine texture passes now fire `VixenMagickKit.TryLosslessOptimize()` after every write, shrinking PNG/JPEG/GIF/ICO output with no quality loss. Unsupported formats (TGA, DDS, EXR) are skipped silently so callers can fire it blindly.
- AdaptiveSharpen Replaces UnsharpMask (Quest Conversion): Texture downscales now finish with an edge-targeted `AdaptiveSharpen` instead of the previous mild `UnsharpMask`, producing visibly crisper detail after a Lanczos shrink without amplifying noise in flat skin, hair, and background regions.
- Realistic Ambient Occlusion (Both Shaders): Removed the `GTAOMultiBounce` approximation from the BRDF. Indirect diffuse and LTCGI diffuse now use raw scalar occlusion (Poiyomi-style), dropping the colored multi-bounce tint that pushed AO away from a neutral darkening.
- Non-Allocating Triangle Counting (Validator): Poly-count tallying and heavy-mesh detection moved from `Mesh.triangles.Length` - which allocates a full `int[]` copy on every access - to a zero-allocation `Mesh.GetIndexCount` sum across submeshes, cutting GC pressure on dense avatars.
- GPU Instancing on the Main Latex Pass: Added `#pragma multi_compile_instancing` to the forward pass so the shader participates in VRChat single-pass-stereo GPU instancing / avatar batching in VR.
- Resize UI Rework (Validator): The optimization-target control moved from a 256-4096 slider to Unity's standard Max-Size preset ladder (32 to 16384) via a `PopupField`, and the whole resize run is now wrapped in a cancelable progress bar so the editor is no longer silently frozen during multi-minute Magick passes.
- Website URL & Authorship Correction (9 Pages): Reverted every page's canonical, Open Graph, Twitter, and JSON-LD URLs from the not-yet-live `vixforge-interactive.github.io/Toolkit` pattern back to the actually-deployed `vixencreations.github.io/VixenToolBox`, and flipped `meta author` / JSON-LD founder from `Trae` back to `Vixenlicous`. Keeps social unfurls and search canonicalization pointed at the real GitHub Pages site.
Fixed
- Magick.NET File-Handle Leaks (Badge Maker, Quest Converter, World Engine): Switched every path-based `new MagickImage(path)` constructor to `new MagickImage(File.ReadAllBytes(path))`. The path constructors leaked OS file handles inside Unity, locking source textures until an editor restart; reading the bytes through managed I/O releases the handle before Magick ever touches the file.
- Protected Asset Corruption (Quest Converter, World Engine): Texture resize/optimize passes now skip shader-internal and HDR data textures - Poiyomi / lilToon / Sunao internals, `Editor Default Resources`, and any `.exr` / `.hdr` / `.cubemap` / `.rendertexture` - through the shared `IsProtectedAsset()` gate. Resampling these corrupts the data the shader reads and triggers a Unity reimport storm; they now pass through untouched.
- Emission Stripped From Cloned Materials (`EmissiveIsBlack`): Freshly cloned materials (e.g. VRCFury swap targets) carried Unity's default `EmissiveIsBlack` GI flag, letting the build pipeline strip `_EmissionColor`, `_EmissionMap`, and `_EmissionColor2` even though the shader emits. `VixenWearEditor` now clears the flag on keyword sync and on first shader assignment, and the build preprocessor persists that flag change to disk even when the material's keyword set was already in sync.
v2.3.2 - 2026-05-29
Added
- Vixforge Interactive Umbrella Branding: Reframed the entire public portal under the new Vixforge Interactive studio name. Every page's sidebar caption flipped from `Ecosystem Matrix` (and the truncated `Ecosystem` variant carried by three pages) to `by Vixforge Interactive`, surfacing the parent-studio relationship at first glance without retiring the `VIXENTOOLS` wordmark or its underlying VPM identifier.
- JSON-LD Organization Schema Promotion: Every public page's structured-data block now declares `Vixforge Interactive` as an `Organization` with explicit `author` and `publisher` roles, replacing the legacy `Person` schema (`Vixenlicious`) so Google Rich Results, LinkedIn org cards, and Slack/Discord/Twitter embeds align with the new studio identity rather than the original creator handle.
- Product / Studio Naming Convention: Locked in the two-tier naming split - `Vixforge Toolkit` for the package/product line, `Vixforge Interactive` for the parent studio. Product pages (`index`, `tools`, `docs`, `changelog`, `support`, `why-choose-us`) now lead with the Toolkit name; architecture/network pages (`social`, `extended-projects`, `ai-transparency`) lead with the Interactive name.
Changed
- "Forged in Digital Fire" Visual Redesign: Comprehensive industrial-aesthetic overhaul of `styles.css`. Palette: `--dark-void` deepened from `#06020a` to `#04060a`, `--glass-bg` darkened to a near-opaque `rgba(10, 14, 20, 0.85)` and `--glass-border` flipped from pink to a 25%-alpha cyan, neutral text recolored to `#d1d5db`, `--neon-pink-glow` and `--neon-cyan-glow` opacity dialed back from `0.6` to `0.4`, and `--base-layer-luminance` lowered from `0.15` to `0.12`. Panel corners sharpened (16px → 8px → 4px in places); webkit scrollbars halved to 6px with rectangular thumbs and a 1px tracked border for a machined-edge feel; sidebar nav padding tightened from `1.25rem` to `1rem` with a 90deg-cyan-gradient active state replacing the solid fill. Section dividers, button hover lifts, and the support/comp/tool card families all rebuilt around the new colder, low-saturation industrial palette.
- Background Art Z-Stack Fix: Corrected a layered painting bug where `.background-art` (the blurred hero JPEG) was rendering correctly into the DOM but never reached the screen - `body`'s opaque `background-color: var(--dark-void)` was sitting on top of the `position: fixed; z-index: -1` element. Body fill flipped to `transparent`; `<html>` still paints `--dark-void` as the FOUC fallback while the cloak/reveal layer holds the page invisible until `app.js` flips `.app-ready`. Blur tightened from `blur(8px) brightness(0.4)` to `blur(12px) brightness(0.25)` to match the deeper void palette.
- Cross-Page SEO Refresh (9 Pages): Rewrote every public page's full SEO block - `title`, `meta description`, `meta keywords`, `meta author`, canonical URL, full Open Graph block, full Twitter card block, and JSON-LD structured-data payload. Canonical pattern moved to `https://vixencreations.github.io/VixenToolBox/{page}.html`; `og:site_name` now reads `Vixforge Interactive` site-wide; `twitter:site` swapped from `@VixenVRC` to `@Vixforge`; `meta author` flipped from `Vixenlicious` to `Vixenlicous | Vixforge Interactive`. Page-specific copy refreshed to reference Unity 2022.3, UdonSharp, and the Vixforge Toolkit product line where appropriate.
- Typography & Density Tightening: Sidebar nav font weight reduced from 600 to 500 (600 reserved for the active state), `h1` letter-spacing cut from 2px to 1px and font-size from 2.5rem to 2.2rem, panel padding and border-radii tuned for a denser, software-tool body. `caption1` foreground recolored from lavender (`#bfa8d2`) to cool grey (`#9ca3af`) to match the new metal palette; `.id-badge` and `.badge` rebuilt as `monospace` chips with 4px corners.
Fixed
- Hidden Background Image (All Pages): The blurred hero JPEG (`background.jpg`, 1434x672) loaded on every page but never appeared because `body` painted a solid `--dark-void` fill on top of the `z-index: -1 / position: fixed` `.background-art` element. Now transparent at the body layer; the image is visible on every page once `app.js` flips `.app-ready`.
- Stale `Vixens Toolbox` in Open Graph Site Name: `og:site_name` previously read `Vixens Toolbox` across every page, leaking the legacy product brand into every Discord/Slack/Twitter unfurl regardless of which subpage was shared. Now consistently `Vixforge Interactive` site-wide.
- Inconsistent Sidebar Taglines: Three of nine pages (`docs`, `ai-transparency`, `why-choose-us`) carried a truncated `Ecosystem` caption while the other six carried `Ecosystem Matrix`. Both variants normalized to `by Vixforge Interactive` for uniform navigation copy across the portal.
v2.3.1 - 2026-05-28
Added
- Furality Ultra Automated Integration: Engineered full pipeline support for the Furality Ultra convention layout. The `VixenBadgeMaker` now autonomously targets the mathematically precise top-left UV quadrant (`[500, 300]` base bounds) to perfectly isolate the "First Class" name and title plates directly from the standard 4K texture sheets without pixel bleed.
- Modular Shader Subsystem Support: Intercepted and integrated Furality's new `.fmodular` architecture. The generator tool now natively registers, targets, and assigns the `Furality/Modular/Standard` shader directly to generated badge materials, ensuring perfect 1:1 parity with their latest SDK infrastructure.
Changed
- Latex BRDF Optimization (Performance): Gutted and re-engineered the core specular lighting loop in the Latex Shader. Shifted from a computationally heavy, multi-pass GGX evaluation to a highly optimized split-sum approximation. This drastically reduces the overall GPU instruction count while maintaining the hyper-glossy, anisotropic surface tension.
- AudioLink Data Fetching (Performance): Streamlined the AudioLink sampling architecture within the latex material. Stripped out unconditional dynamic branching in favor of static compile-time toggles for FFT queries, significantly smoothing out frame delivery in highly populated, light-heavy VRChat instances.
Fixed
- Ultra Layout Conditional Bleed: Corrected a structural logic flaw in the `VixenBadgeMaker` where legacy "Somna" UI checks were preemptively consuming the new "Ultra" array paths. Structurally isolated the string evaluations so the `Badge{Tier}_DIF` and `_EMI` conventions natively route to the correct layout JSON without cross-contamination.
- Latex Interpolator Overflow: Resolved a critical SM5 register bottleneck that was causing localized frame-drops during intense directional lighting calculations. Packed the roughness, ambient occlusion, and subsurface scattering masks into a singular, tightly bound `float4` interpolator, freeing up crucial `TEXCOORD` slots for real-time vertex operations.
v2.3.0 - 2026-05-23
Added
- GGX BRDF Rewrite (VixenWear Latex Ultra): Tore out the legacy BRDF3 lobe and replaced it with an industry-standard GGX pipeline: `D_GGX` (Trowbridge-Reitz), `V_SmithJointGGX`, `F_Schlick`, `Burley_Diffuse`, and a Karis split-sum (`EnvBRDFApprox_AB`) for indirect specular. Optional Filament/Frostbite multi-scatter energy compensation (`EnergyCompensation`) preserves bright metal highlights at high roughness without breaking energy conservation.
- Anisotropic Specular Engine: Added `_Aniso` and `_AnisoRot` for stretched highlights along a per-material tangent. Uses Burley's anisotropic alpha split with full `D_GGX_Aniso` + `V_SmithJointGGX_Aniso` evaluation; rotates the world tangent around N at the requested degree before splitting alpha into `ax`/`ay`, producing true latex-stretch highlights instead of a fake brushed-metal hack.
- Thin-Part Transmission: New `_Trans_Str`, `_Trans_Dist`, and `_Trans_Power` drive a Burley/Filament back-light term with Beer-Lambert absorption (`exp(-(1-diffColor)/_Trans_Dist)`), giving ears, fingers, and latex membranes physically correct light bleed without polluting the SSS lobe.
- Tinted Dielectric Clearcoat: Added `_CC_Tint` and `_CC_F0` so the clearcoat reflects with a colored cast and a custom Fresnel base reflectance. White tint at `F0=0.04` reproduces the standard dielectric exactly; coloured tints give the under-layer a complementary cast via per-channel `baseEnergy` attenuation.
- Geometric Specular Anti-Aliasing: Added `GeometricSpecAA` - a Toksvig-style filter that roughens both base and clearcoat normals based on screen-space normal derivative variance. Eliminates the spec aliasing/sparkle that hammered high-gloss surfaces at mid-distance.
- Poiyomi-Pack PBR Compatibility Layer: Added `_PBR_Met_Ch`, `_PBR_Smooth_Ch`, `_PBR_AO_Ch`, `_PBR_Height_Ch` channel selectors plus `_PBR_Met_Inv` and `_PBR_Smooth_Inv` (Channel Stores Roughness). Drops Poiyomi/Substance/Marmoset-packed masks straight in without re-authoring; the `ChannelPick` helper is wired through every consumer (parallax raymarch, BRDF shadow trace, surface metallic/smoothness, AO, height) so the channel choice is honored everywhere.
- Multi-Region Color Mask (Poiyomi-Style): New `_UseRegionMask` + `_RegionMask` with independent R/G/B zone tints (`_Region_R/G/B_Tint`) and per-zone emission boosts (`_Region_R/G/B_Emis`). Channels stack independently, letting authors paint hard-edged feature zones (panels, claws, decals) without a second material.
- Secondary Emission Layer: New `_UseEmission2` with its own `_EmissionMap2`, `_EmissionColor2`, mask channel picker (`_Emis2_MaskCh`), and dedicated AudioLink band reactor (`_AL_Band_Emis2`, `_AL_Emis2_Mod`). Authors can route bass to one circuitry layer and treble to another without juggling animator parameters.
- Multi-Layer MatCap Engine: Added a full second matcap layer (`_UseMatCap2`, `_MatCap2`, `_MatCap2_Mask`, `_MatCap2_MaskCh`, `_MatCap2_Tint`, `_MatCap2_Int`, `_MatCap2_Rot`) with three blend modes (`Add`, `Replace`, `Multiply`). Layer 1 also gains mask channel selection (`_MatCap_MaskCh`) and per-layer tint so a single RGB region mask can drive different matcaps in different zones.
- VRChat Mirror Camera Rendering Fix: Added `vw_CameraPos()` and `vw_WorldViewDir()` helpers that read the actual rendering camera from `UNITY_MATRIX_I_V._m03_m13_m23` (per-eye correct under single-pass instanced) instead of `_WorldSpaceCameraPos` (which stays glued to the player's head in mirrors). Routed through surface viewDir, GI viewDir, parallax raymarch, and clearcoat reflection so specular/parallax/cubemap math is finally correct in mirrors.
- Light Volumes Deep Integration: Replaced the single intensity slider with a full LV stack: `_LV_Spec_Mix`, `_LV_Spec_Dominant` (dominant-light vs full L1 specular), `_LV_CC_Spec_Mix` for clearcoat-specific specular, `_LV_Bias` for normal-bias offset (fixes light bleed at sharp edges), `_LV_PosOffset` for manual world-space offset on thin/sleeve geometry, `_LV_AdditiveOnly` for additive-only mode that preserves Unity's probe baseline, and `_LV_ProbeDering` - an opt-in Bakery L1 deringed-probe fallback for non-LV worlds.
- LTCGI Surgical Mix Controls: Split LTCGI into independent `_LTCGI_Diff_Mix` and `_LTCGI_Spec_Mix` (alongside the master `_LTCGI_Int`), letting creators dial area-light diffuse and specular contributions separately without disabling LTCGI on the whole material.
- VRSL Color Hijack: Added `_VRSL_Color_Hijack` (independent from `_VRSL_Intensity`) that lerps the AudioLink color toward live DMX RGB (sector channels +3/+4/+5). Lets stage colour washes override neon emission palettes without disabling AL color reactivity entirely.
- Chronotensity Index Selector: New `_AL_Chrono_Idx` (0-7) lets authors pick which chronotensity row they're tapping, and `_UseChronoFX` makes the entire chrono read opt-in - avoiding 4 extra texture samples per pixel for amplitude-only setups. All chrono-driven effects (vortex breath, fracture re-roll, glitch re-seed, scanline reaction, flicker time) now gate behind this toggle.
- DFT Note Emission Reactor: Added `_AL_DFT_Note` (0-11) and `_AL_DFT_Mod` driving `AudioLinkGetAmplitudesAtNote` - the emission layer can now pull on a specific musical note across all octaves (e.g., always glow on a C# or pull a snare hit cleanly out of the mix) instead of using band averages.
- ColorChord Strip Position: New `ColorChord Strip` source for `_AL_ColorMode` lets the artist pick any position along the 128-pixel `ALPASS_CCSTRIP` via `_AL_Strip_Pos`, exposing the full continuous ColorChord gradient.
- Audio Color Blend (Rainbow): `_AL_Col_Blend` now drives a `HUEtoRGB` rainbow cycle over `_Time.y + bio + worldPos.y` before VRSL hijack, giving a worldspace-anchored chromatic shift that reacts to the live bio pulse.
- Spherical Autocorrelator Vertex Engine: New `_Vtx_AutoCorr_Str` reads `AudioLinkGetSphericalMappedAutoCorrelatorValue(normalize(v.vertex.xyz))` per-vertex - drives a smooth volumetric ripple that doesn't require a band selection because every vertex samples its own object-space direction.
- Spectrum Bar Density Control: Added `_Cyber_CC_Density` (4-64 bars) - the HUD spectrum is now a true bar chart with adjustable resolution and proper inter-bar gaps, not a continuous strip.
- Autocorrelator HUD Ring: New `_UseCyberAuto` with full `Transform` placement and `_Cyber_AutoCorr_Str` intensity. Renders a radial ring driven by `ALPASS_AUTOCORRELATOR` with animated angular spokes (`sin(angle * 12.0 + animTime)`) and a gaussian falloff envelope for the readout band.
- HUD Hover-Off-Body Engine: Added `_Cyber_Hover` (parallax-out height) and `_Cyber_Hover_Bob` (subtle vertical drift). The HUD UV is shifted along the tangent-space view direction so the panel reads as a holographic plane floating above the avatar surface, with a subtle sine-driven bob for "alive" feel.
- Standard-Style Render Mode Selector: New `_Mode` property (Opaque/Cutout/Fade/Transparent) drives blend state, ZWrite, render queue, RenderType tag, VRCFallback tag, and alpha keywords via `SetupMaterialWithBlendMode`. `Fade` uses straight alpha; `Transparent` uses premultiplied alpha so specular survives at low opacity (glass/latex). Cutout retains the historical `clip(c.a - _CutOff)` behavior.
- Build-Time Variant Stripper (`VixenWearVariantStripper`): New `IPreprocessShaders` that hammers shader variants in three layers: (1) managed feature keywords still enabled on any live material, (2) Deferred/Meta/MotionVectors passes entirely dropped (avatar clothing never uses them), and (3) dead built-in keywords leaking past the surface pragma (`LIGHTMAP_ON`, `DIRLIGHTMAP_COMBINED`, `DYNAMICLIGHTMAP_ON`, `LIGHTMAP_SHADOW_MIXING`, `SHADOWS_SHADOWMASK`, `LIGHTPROBE_SH`, `LOD_FADE_CROSSFADE`). Accompanied by `VixenWearVariantStripReporter` that logs `kept/stripped/total` post-build.
- Build & Play-Mode Keyword Sync: `VixenWearBuildPreprocessor` (`IPreprocessBuildWithReport`) auto-runs `CleanAllMaterials` on every build, and `VixenWearPlayModeSync` (`InitializeOnLoad`) syncs every VixenWear material's keywords on `ExitingEditMode` so stale toggles never no-op on the first play frame.
- `Edit Materials From Selection` Menu (`Ctrl+Shift+M`): Promotes Hierarchy GameObject selection to the underlying VixenWear `.mat` assets by walking `GetComponentsInChildren<Renderer>(includeInactive: true)`, deduplicating via `HashSet<Material>`, and swapping `Selection.objects`. Picks up wardrobe layers that are toggled off - critical for VRC clothing where the inspector otherwise collapses to `-` across renderers.
- `Disable Media-State Gate On All Materials` Menu: Project-wide bulk fix that clears `_UseMediaState` on every VixenWear material at once, restoring AudioLink reactivity for worlds without a `_MediaPlaying` driver.
- `Clean Latex Material Keywords` Menu: Manual trigger for the build-time keyword sync - rebuilds every VixenWear material's keyword state from current property values, useful after bulk-editing via animation clips or VRCFury.
- Per-Tab Reset to Shader Defaults: Right-click any inspector tab and pick "Reset {TAB} to Defaults" - spawns a hidden defaults material from the same shader and writes its values back through `MaterialProperty`. Honors `_Mode` by re-running `SetupMaterialWithBlendMode` after the reset on the BASE tab.
Changed
- AudioLink Now Always-Compiled (No `AL_ENABLE` Variant): Ripped out the `AL_ENABLE` shader feature keyword entirely. AudioLink.cginc is now always included and gated at runtime via `_UseAudioLink`, so VRCFury material-toggle animations can flip AudioLink on/off without a build-time variant explosion (VRC materials can't change keywords at runtime). The stripper actively `DisableKeyword("AL_ENABLE")` on every material to clear stale state.
- Dead `CYBER_ENABLE` Keyword Purged: Removed `CYBER_ENABLE` from the pragma list and force-disabled on every material - the shader never `#if`-gated on it so it was generating a useless 2x variant set.
- `VectorLabelDrawer` Per-Component Multi-Edit Fix: The drawer now writes individual `X`/`Y`/`Z`/`W` components per selected material via `m.SetVector(name, cur)` where `cur[i] = newVal`. Previously `prop.vectorValue = v` broadcast the first material's entire vector to every selected material on every edit - silently overwriting independent settings whenever a single component changed.
- `VectorLabelDrawer` Per-Component Mixed-Value Display: Each X/Y/Z/W slot independently shows Unity's `-` mixed-value indicator instead of the all-or-nothing `prop.hasMixedValue` behavior. Matches the native `Vector4Field` workflow users expect.
- `VectorLabelDrawer` Adaptive Label Sizing: Labels now shrink from font size 11 down to 8 to fit the available slot, fall back to short forms (`X Offset` -> `X`, `Scale` -> `Scl`, `Rotation` -> `Rot`), and ellipsis-truncate as a last resort. Full label is preserved in the tooltip.
- `VixenALBandDrawer` Change-Gated Writes: Wrapped the `IntPopup` write in `EditorGUI.BeginChangeCheck` so it no longer unconditionally overwrites every selected material's value on every repaint. `EditorGUI.showMixedValue = p.hasMixedValue` shows the proper `-` indicator for multi-edit.
- `UseMediaState` Default Flipped to OFF: New materials now default to AudioLink running regardless of media player state. The opt-in gate is still available for worlds that genuinely want video-driven activation, but the previous opt-out default was silently killing AudioLink for users without a VRC video player in scene.
- Inspector Tab Reorganization: `BASE` gains `_Mode`; `SURFACE` gains all `_PBR_*_Ch` selectors; `POLISH` gains `_CC_Tint`, `_CC_F0`, anisotropy, transmission, and `_UseMultiScatter`; `INTEGRATION` absorbs MatCap (with channel/tint), gains layer 2, all region mask + secondary emission props, and the deep Light Volumes + LTCGI stacks; `AUDIOLINK` gains chronotensity, DFT, autocorrelator HUD, hover, strip-position, spectrum density, and vertex autocorrelator; `STAGE` gains `_VRSL_Color_Hijack`.
- Surface Pragma Hardened: Added `keepalpha exclude_path:deferred exclude_path:prepass nolightmap nodynlightmap nodirlightmap noshadowmask nometa nolppv` plus a defensive `#pragma skip_variants LOD_FADE_CROSSFADE LIGHTMAP_ON DIRLIGHTMAP_COMBINED DYNAMICLIGHTMAP_ON LIGHTMAP_SHADOW_MIXING SHADOWS_SHADOWMASK`. Massive baseline variant reduction even before the build-time stripper runs.
- Vertex Fracture Engine Rewritten: Replaced the old per-primitive geometry-shader scatter with a `disp()`-stage shatter that snaps verts to a 3D grid (`floor(vertex.xyz * 25.0)`), hashes each cell for a per-shard random axis (Rodrigues rotation), pivot offset along the normal, scatter direction, and subtle scale - all gated by `_UseVtxKinetic` and strictly driven by AudioLink band amplitude so silent worlds never shatter the avatar.
- Per-Pixel Fracture Clip in Surface Stage: The fragment now `clip(fractureNoise - fractureCut)` against a per-pixel hash, with `fracturePop` driving a tiny parallax offset on shard edges - reads as physical shard separation and survives tessellation cleanly.
- `PerformPaste` Honors `_Mode`: Pasting BASE tab settings now re-runs `SetupMaterialWithBlendMode` on the destination materials so the blend state actually matches the pasted `_Mode` instead of inheriting the previous mode's leftover state.
- Codebase-Wide Multi-Line Comment Purge: Stripped `/* */` block-comment syntax across the C# editor scripts (`VixenHub`, `VixenWorldSpider`, `VixenEngineStressTest`), every UI Toolkit stylesheet under `Editor/UiStyles/`, the `AnimationWorkbench` resource styles, and the public-site CSS. C# blocks rewritten as `//` line comments; USS/CSS section banners flattened to single-line `/* ... */` (USS has no `//` syntax). Resolves editor-side lag on larger stylesheet files in VS Code / Rider - cosmetic only, zero runtime impact. Third-party vendored shader libraries (LTCGI, AudioLink, LightVolumes) intentionally skipped to preserve upstream sync.
Fixed
- Mirror Camera Specular/Parallax Math: Resolved a long-standing issue where view-dependent math (specular highlights, parallax raymarching, clearcoat cubemap reflection) rendered wrong in VRChat mirrors. Unity's surface-shader plumbing computed viewDir from `_WorldSpaceCameraPos` (the player's head, not the mirror camera) - now reprojected through `vw_WorldViewDir()` from the actual rendering camera matrix.
- Light Volumes Black-Out on Default Worlds: Probe SH (especially Bakery's dering path) can produce negative diffuse values when L1 magnitude exceeds L0, causing the avatar to render pitch-black on probes-only worlds. Now clamps `LightVolumeEvaluate` output to `max(..., 0)` to suppress the negative reconstruction artifact.
- Light Volumes Edge Bleed: Sharp geometry edges sampled the volume at the wrong location, causing light bleed into shadowed cavities. Added `_LV_Bias` normal-bias offset (matches the official LV PBR reference shader) plus manual `_LV_PosOffset` for thin sleeve/membrane geometry.
- Multi-Edit Vector Property Corruption: The `VectorLabelDrawer` was silently broadcasting the first selected material's entire vector to every other selected material on every component edit. Per-component, per-material writes via `Undo.RecordObjects` + `m.SetVector` preserve each target's independent state.
- Multi-Edit Enum Property Spam: `VixenALBandDrawer` unconditionally overwrote `p.floatValue` on every OnGUI tick, silently resetting other selected materials' band selections back to the first material's value. Now change-gated.
- Geometry Shader Pass Instability Under Tessellation: The dual-pass SM5 `GEOMETRY_FRACTURE` Pass 2 from 2.1.5 collapsed under hardware tessellation - the `primID` hashing desynced from the tessellated triangle indices, producing flickering and orphaned shards. Replaced entirely with the per-pixel surface-shader noise clip (which also tessellates correctly).
- Static-Slider Fracture in Silent Worlds: Fracture/pump/autocorrelator vertex effects could fire from manual slider values even when AudioLink wasn't running, shattering avatars in silent worlds. All vertex AL effects are now strictly band-amplitude-driven with `_UseAudioLink > 0.5 && _UseVtxKinetic > 0.5` as the master gate.
- Stale Keyword Build Variant Bloat: Materials retained `AL_ENABLE`, `CYBER_ENABLE`, and obsolete alpha keywords from prior shader versions, forcing the build system to compile thousands of dead variants. Build preprocessor now scrubs every VixenWear material's keyword set against the current pragma list before compilation; post-build report logs the strip count.
- Stale `_UseMediaState` Gates Blocking AudioLink: Materials authored under 2.1.5 had `_UseMediaState` ON by default and silently muted AudioLink in worlds without a VRC video player. New default is OFF; `Disable Media-State Gate On All Materials` provides a project-wide bulk fix for upgraded materials.
- MatCap UV Collapse on Flat Geometry: Previous tangent-space matcap math collapsed to `(0,0,1)` on flat polygons, producing a stuck reflection point. Switched to view-space normal via `mul((float3x3)UNITY_MATRIX_V, nWorld)` which is mirror-correct and never collapses.
- Tab Inspector State Loss on Reset: `PerformReset` on the BASE tab now re-runs `SetupMaterialWithBlendMode` after writing defaults, so the reset value of `_Mode` actually takes visual effect instead of lagging behind the property.
- Clipboard Texture Offsets/Scales Lost on Paste: `PerformPaste` now writes `SetTextureOffset` and `SetTextureScale` per-target inside the paste loop instead of relying on `prop.textureValue` to round-trip the tiling state.
- Destructive Topology Engine Crash on Dirty Rigs: `VixenMeshPatcher.CollapseBonesToParent` threw an `ArgumentNullException` when mapping `SkinnedMeshRenderer.bones` into a dictionary if the array contained `null` slots (common from dirty FBX vertex groups or upstream hierarchy flatteners). Dictionary insertions and hierarchy lookups are now strictly null-gated to prevent serialization halts.
- Aggressive Frustum Culling on Modular Clothing: The `OPTIMIZE_BOUNDS` heuristic previously calculated tight-fit spatial bounds per-mesh, causing modular clothing to vanish instantly when the tight bounds rotated slightly off-camera. Replaced with a Universal Avatar-Scale Bounds matrix (a universally safe 2.5m³ volume anchored to the root bone) to completely neutralize clipping while safely enforcing `updateWhenOffscreen = false` for VRAM optimization.
- Validator UI Desync & Stale Data: The Validator window previously went stale if hierarchy or component edits occurred outside the tool. Integrated a debounced event trigger hooking into Unity's `OnHierarchyChange`, `OnProjectChange`, and `OnSelectionChange` to silently queue a deep scan and refresh the UI after a 500ms delay, preventing Editor lockups during rapid manual edits.
Removed
- `Pass 2 GEOMETRY_FRACTURE` (SM5 Geometry Shader): Removed entirely. Hardware tessellation desyncs were unfixable without sacrificing tessellation, and the per-pixel clip+parallax pop in Pass 1 produces an equivalent (and more stable) visual.
- `AL_ENABLE` Shader Feature: Now runtime-gated. AudioLink.cginc is always included; `_UseAudioLink` flips it without a keyword variant.
- `CYBER_ENABLE` Shader Feature: Dead keyword that the shader never `#if`-gated against. Force-disabled on every material via the keyword stripper.
v2.1.5 - 2026-05-16
Added
- Dual-Pass Geometry Shatter Engine: Implemented a raw Shader Model 5.0 Geometry Shader (`#pragma geometry`) pass. Bypassing standard Surface Shader limitations, this intercepts clipped polygons, calculates their true centers using `SV_PrimitiveID`, un-welds the topology, and physically blasts literal mesh polygons into 3D space to the beat of AudioLink.
- God Tier Cybernetics HUD: Engineered a realtime diagnostic UI system utilizing a B&W window mask. Renders active AudioLink VU meters, 64-pixel spectrum arrays, oscilloscopes, and VRSL DMX grids directly onto the material with independent UV transform and scaling controls.
- Granular Clipboard Architecture: Upgraded the native IMGUI inspector with a highly advanced right-click Context Menu system. Features cross-material Copy/Paste mechanics with distinct execution paths for "Values Only" (preserving local maps) or "With Textures" across all defined UI tabs.
- VRSL Stage Hijack Protocol: Integrated a direct DMX world-buffer intercept. The material now natively mimics a 13-Channel Moving Head fixture, seamlessly overriding local emission with stage RGB/Strobe data and physically geo-warping the mesh using live DMX Pan and Tilt arrays.
- Kinetic UV Engine: Deployed hardware-level UV manipulations including Vortex Twists, Bass Pumping, and spatial-hashed UV Fracture Shards, all mathematically tied to specific AudioLink FFT bands.
Changed
- Documentation Overhaul: Stripped out ambiguous or overly stylistic terminology to ensure clear, universally understood technical instructions for the VixenWear deployment guide.
- Inspector & ShaderLab Synchronization: Purged all redundant `[Header]` attributes from the raw `.shader` properties block, completely eliminating the "double-labeling" UI conflict between Unity's native layout passes and the custom C# Editor script.
Fixed
- Vertex "Move Tool" Sliding Bug: Corrected a critical math flaw in the kinetic vertex engine where global linear translation caused the entire avatar mesh to slide across the screen. The pump matrix now correctly displaces strictly along `v.normal` for true volumetric inflation.
- SM5 Compiler & Keyword Conflicts: Resolved severe d3d11 compile errors in the Domain/Vertex stages by ripping out legacy `tex2Dlod` macros in favor of native `AudioLinkData` fetches. Additionally, renamed variables in the geometry pipeline to prevent syntax tree failures caused by reserved HLSL keywords (`centroid`).
- Missing Variable Initialization: Registered the `_Cyber_AutoCorr_Str` and `_UseCyber` floats into the shader's internal memory allocation, fixing a variable pass failure that previously crashed the HUD Transform Engine.
v2.1.0 - 2026-05-15
Added
- VectorLabelDrawer System: Engineered a custom MaterialPropertyDrawer natively hooked into ShaderLab's Vector arrays. This handles packed vector data inside the inspector seamlessly, preventing standard 4-float structural UI clutter while preserving exact field alignments.
- UITK & IMGUI Hybrid Editor: Deployed a completely overhauled inspector architecture (`VixenWearUITKInspector`). Features a sleek, tab-driven workflow dividing material configuration into Base, Surface & PBR, Polish & Translucency, Integration, and AudioLink.
- AI Transparency & Development Ethics Page: Published our formal documentation on enterprise-scale AI deployment. This structural breakdown details our 100% hand-reviewed code standards, agentic research integration, and measurable workflow accelerations to ensure transparency across the VixenTools ecosystem.
Changed
- Massive Shader Property Packing: Consolidated loose floats and variables into highly optimized `Vector` attributes, such as `_PBRParams` [cite: 2], `_GeoEmisParams` [cite: 3], and `_ClearcoatParams`[cite: 4]. This drastically reduces uniform overhead and streamlines memory bandwidth across the material pipeline.
- Aggressive Baseline Optimization: Expensive calculations have been zeroed out by default to guarantee maximum out-of-the-box performance. Parallax and Displacement are now disabled at the baseline[cite: 3]. Iridescence and Rim lighting have also been zeroed out[cite: 4].
- AudioLink Modulation Standardization: All AudioLink reactive modulations (`_ALParamsA`, `_ALParamsB`) are entirely zeroed out by default to prevent unintended emission or vertex manipulation unless explicitly configured by the user[cite: 7].
Fixed
- Inspector State Loss (Domain Reloads): Solved an aggressive UX friction point where the material inspector would reset its tab focus during Unity script compilation. The editor now securely caches active tabs and foldout states to `EditorPrefs`, surviving domain reloads without breaking the workflow.
v2.0.4 - 2026-05-15
Added
- Natural MatCap Reflection Model: Introduced a physically‑inspired matcap blending system using Fresnel weighting, roughness‑driven clarity falloff, and energy‑normalized contribution curves. Matcaps now behave like a stylized reflection lobe rather than an additive light source, producing smoother, more realistic latex highlights.
- MatCap–Reflection Harmony Layer (Patch 4): Added a new cross‑fade stage that blends matcaps into the clearcoat reflection based on surface smoothness. High‑polish surfaces now transition seamlessly into probe reflections, eliminating the “double highlight” artifact common in older matcap pipelines.
Changed
- MatCap Sampling Pipeline: Moved matcap intensity and lighting mix out of the BRDF and into the surface stage, reducing redundant per‑pixel math and preventing variant duplication. The BRDF now receives a clean, pre‑normalized matcap signal for consistent lighting behavior.
- Clearcoat‑Aware MatCap Integration: Updated the BRDF to evaluate matcaps against the clearcoat normal rather than the base normal, ensuring matcaps follow the same polish layer as reflections and thin‑film interference.
- Energy‑Conserving Highlight Behavior: Replaced the legacy additive matcap term with a physically‑bounded contribution that respects clearcoat Fresnel, occlusion, and energy conservation. This prevents matcaps from overpowering direct light or blowing out bright latex surfaces.
Fixed
- Harsh MatCap Brightness Spikes: Resolved the long‑standing issue where matcaps appeared unnaturally bright at grazing angles or under high‑intensity lighting. The new Fresnel‑weighted model eliminates edge blowout and restores smooth highlight rolloff.
- MatCap vs Reflection Fighting: Fixed the visual conflict where matcaps and reflection probes produced competing highlight shapes. The new cross‑fade system ensures both layers reinforce each other instead of stacking destructively.
- Double‑Smoothness Multiplication: Removed an accidental double‑application of smoothness to matcap intensity, which previously caused inconsistent gloss levels across different materials and lighting conditions.
v2.0.3 - 2026-05-14
Added
- Semantic Ecosystem Layout (Ecosystem Architecture Page): Wrapped the entire suite overview in a semantic
<main class="main-wrapper">container with a dedicated.page-header,.comparison-section, and.tools-gridstructure. This creates a clean document outline for crawlers while preserving the cyberpunk glass-panel aesthetic. - World Engine Omni‑Matrix Card (Expanded Matrix Variant): Introduced the
expanded-matrix-cardvariant oftool-cardwith a dedicated.matrix-gridand.matrix-columnflex layout. The Spider’s dual-column feature matrix is now fully responsive, readable, and structurally isolated for both users and search engines.
Changed
- SEO‑Optimized Content Hierarchy: Normalized heading levels (
h1page title,h3tool names,h4matrix section headers) and grouped related copy into clearly scoped sections. This improves snippet extraction, rich result eligibility, and ensures search engines can correctly infer feature groupings (Hub, Optimization Suite, Quest Conversion, PhysBone Mapper, Badge Studio, World Engine). - Crawl‑Friendly Tool Cards: Refactored each tool into a consistent
tool-cardpattern with a single image, a descriptiveh3, and a tightly scoped feature list. Alt text and card titles now read as human‑legible summaries instead of internal labels, boosting relevance for avatar, Quest, and VRChat‑tooling queries. - Preview & Media SEO Pass: Converted the Quest vs PC comparison into a
.comparison-bannerwith a single, descriptive<img>and caption block. The preview trigger is now attached to the container instead of inline styles, reducing DOM noise and making the hero comparison image a clear, high‑value media target for search indexing. - Matrix Grid Flexbox Refactor: Replaced the ad‑hoc grid styles with a dedicated
.matrix-gridflexbox system and responsive.matrix-columnrules. On narrow viewports, the Spider’s ecosystem and UI/security columns collapse into a vertical stack without breaking readability or keyword density.
Fixed
- Broken World Engine Card Markup: Removed the stray closing
<div>and normalized the World Engine: Omni‑Matrix Diagnostic Spider card structure. Thetool-card → tool-image-container → tool-content → matrix-grid → matrix-columnhierarchy now validates cleanly and no longer corrupts the surrounding tools grid. - Inline Style & Redundant Wrapper Noise: Stripped unnecessary inline styles and redundant wrapper divs from the Ecosystem Architecture section, reducing DOM bloat that previously diluted keyword signals and harmed Lighthouse/SEO scores.
- List & Typography Consistency: Aligned all feature bullets under a single
ul.custom-listpattern with consistent font sizes and spacing. This prevents fragmented list structures that confused both assistive tech and search parsers when scanning long capability matrices.
v2.0.2 - 2026-05-13
Fixed
- Vixenwear GI Integration (Baked Lighting): Resolved a critical precision collapse in the baked lighting evaluation matrix across Vixenwear assets. Re-engineered the indirect illumination and spherical harmonic sampling pathways to correctly decode lightmap data. This eliminates localized light bleeding, stabilizes micro-shadow gradients, and guarantees physically accurate spatial integration when Vixenwear is deployed in heavily baked environments.
v2.0.1 - 2026-05-12
Added
- Dynamic Markdown Architecture (Vixen Hub): Integrated
HOWITWORKS.md(Metrics Engine) andSHADERSETUP.md(Shader Pipeline) directly into the Vixen Hub. Offloads heavy UI styling by utilizing a custom regex Markdown-to-UIElements parser, allowing real-time documentation updates without triggering C# recompiles. - Serialization Ghost Detection (World Engine): Engineered a reflection bridge that cross-references physical
UdonBehaviourcomponents against their underlying C#[UdonBehaviourSyncMode]attributes. Automatically detects and offers 1-click fixes for inspector-level "Continuous Sync" ghosts that waste network IDs on explicitly declaredNoVariableSyncscripts. - Context-Aware Network Heuristics: Upgraded the Udon auditor to cross-reference physics topologies. Unjustified Continuous Sync warnings are now intelligently suppressed if the target object contains physical movement drivers like
RigidbodyorVRC_Pickup.
Changed
- Zero-Allocation UASM Parsing: Refactored Udon compute instruction counting to utilize a memory-safe
StringReaderstream, eliminating massive string array allocations and preventing Garbage Collection (GC) spikes on heavy scripts. - O(1) Program Source Memoization: Replaced brute-force scene traversal in
GetUdonTypeNameSafewith a static reflection cache andAbstractUdonProgramSourcedictionary. Instanced prefabs (e.g., hundreds of toggle buttons sharing the same script) now resolve instantly after the first script analysis, drastically cutting O(N) execution time. - Strict Active-State Compute Filtering (Dashboard): Hardened the Heuristics Dashboard to strictly enforce
&& object.enabled && object.gameObject.activeInHierarchyacross all compute matrices (Renderers, Lights, LTCGI, AudioLink, Video Players, Probes). Guarantees the Threat Level exactly mirrors the actively rendering pipeline without being skewed by disabled object pooling or hidden rooms. - Isolated Lighting Metrics: Extracted "Active Scene Lights" into an independent, pre-filtered metric on the Dashboard to provide granular visibility into scene-wide light limits and draw-call multiplication.
Fixed
- Cache Poisoning Desyncs (Heuristics Dashboard): Fixed a critical state-poisoning bug where
_sceneObjectCachequeries for inactive objects would overwrite active queries. Upgraded the dictionary key to a(Type, bool)Tuple, guaranteeing perfect mathematical isolation. - AppDomain Execution Freezes: Completely eliminated Editor thread freezing caused by recursive
AppDomain.CurrentDomain.GetAssemblies()calls during massive Udon script resolutions. - Disabled Object False Positives (Spider): Patched the Matrix Spider to properly evaluate
.enabledstates on components. It now silently ignores explicitly disabled Lights and Reflection Probes, perfectly aligning Matrix warnings with the Dashboard's compute math.
v2.0.0 - 2026-05-12
Added
- 4D-Chess Scene Caching & Heuristics Profiler (World Engine): Engineered a persistent O(1) lookup architecture utilizing
_sceneObjectCache,_textureRecoveryCache, and a dedicated reflection_fieldCache. Includes a standalone World Profiler window that calculates real-time granular VRAM footprints and CPU overhead across Textures & Materials, Meshes & Geometry, Terrain & Environment, UI & Canvases, Lightmaps & Global Illumination, Volumetrics (Light Volumes), AudioLink, LTCGI, Video Players, Audio Objects, Udon & Network Persistence, Physics, and the Rinvo Search Ecosystem. Outputs a compute threat score with color-coded severity. - Persistent JSON Lookup Cache & I/O Pipeline: Deployed the new
WorldEngineCacheandAssetRecordversioning system. Tracks texture/mesh hashes, last-known resolutions, and failure states to automatically skip previously processed assets. Handled by a background_workQueueutilizing per-frame processing andAssetDatabase.StartAssetEditing()batching. - Precision Microwelder & 5D Hash Matrix (Mesh Topology): Deployed a multi-pass destructive mesh patcher with a full memory cloning and serialization pipeline (
Assets/VixenTools/Meshes/Patched/). By evaluating a strict(X, Y, Z, U, V)tuple, the microwelder guarantees UV texture seams physically cannot collapse. Includes full Blendshape memory extraction/remap recovery and recursive Kinematic Protection Matrices to structurally lock down complex, nested hierarchies (essential for Novabeast facial fluff, ears, and phalanges). - Destructive Optimization Suite (Avatar Validator): Integrated a dual-pipeline PC/Quest validation system capable of violently purging orphaned transforms, stripping hard-disabled components, collapsing dead-end leaf bones, calculating tight-fit spatial bounding overrides, and destructively downscaling VRAM via ImageMagick. Includes deep Physics Node Extraction for the targeted eradication of PhysBones, Colliders, Contacts, and Constraints.
- Omni-Chaos Environment Generator (QA): Introduced
VixenEngineStressTest.cs, establishing an extreme edge-case stress test scene designed to push VRAM, polygon limits, and hierarchy depth to their absolute breaking points to rigorously validate pipeline resilience. - Proprietary Shader Integration: Deployed new HLSL High Gloss Reflective Near Raytracing Latex Shader "VixenTools/Latex Suit Ultra". (See setup documentation below).
-
Ecosystem Integration Matrix (Hub): Added a dedicated "Supported Modules" tab to the VixenHub. The architecture now actively audits, scans, and intrinsically protects the following third-party infrastructure:
- ProTV (Techanon): Comprehensive pipeline auditing, GSV conflict resolution, and AudioLink topology handshakes.
- AudioLink: Reflective extraction of internal FFT textures, orphan detection, and global whitelist protection.
- LTCGI: Real-time polygonal area lighting matrices, ghost screen eradication, and bake cache deadlock resolution.
- VizVid (VVMW): Comprehensive video pipeline analysis, interface decoupling checks, and Quest fallback validation.
- Video TXL: CRT render ecosystem validation, GC sink detection, and Playlist Queue access control integration.
- iwaSync3: Network sync frequency tuning, blinding emissive bounds detection, and global 2D audio isolation.
- YouTube Search (Rinvo): Autonomous video player target linking, UI architectural decoupling, and API pool size validation.
- VRC Light Volumes: Compute load detection, sphere threshold optimization, and TVGI/AudioLink strobe safety enforcement.
- VR Stage Lighting: Regex-based heuristic protection and DMX audit support.
- Global Protection Rules & Auto-Population (Shader Dictionaries):
AutoPopulateTargets()andAutoPopulateWhitelist()now automatically inject VRChat Mobile Toon, Filamented, and Mochie shaders while securing protected assets project-wide. - Three-Button Utility Panel & Smart Reset (UI/UX): Added rapid-access controls for Populate Targets, Populate Whitelist, and Factory Reset (Nuke & Rebuild) to the Shader Dictionary Editor, alongside smart autonomous detection of active dictionary types based on filenames.
- Advanced Ecosystem Audits & Scanners: Actively scans Light Volumes (reads atlas/3D textures and custom arrays) and Rinvo Search. Maps ProTV, TXL, IwaSync3, and standard Unity/AVPro players while isolating unique screens across all video systems.
- Precision Surface Snapping (Scene Tools): Added an enterprise-grade SceneView raycaster featuring a UV-style neon placement disc. Users can Shift-click to bypass standard rotation alignment, utilize live gravity snapping that respects terrain topology, and leverage automated collider shielding.
Changed
- Neon Cyberpunk UI Overhaul (UI/UX): Rolled out new dropdowns, object fields, shader selectors, and deep magenta, pink, and cyan styling. The resolution dropdown now perfectly syncs with the live runtime value.
- Lazy-Loaded Diagnostic Matrix (UI/UX):
_expandedCategoriesnow stores open UI states. Heavy diagnostic foldouts only execute and populate their respective matrices when actively expanded, drastically cutting down on wasted Editor overhead. - Shader Dictionary Auto-Repair:
EnsureDictionariesExist()upgraded to support force-rebuilding, dynamically auto-populating both target and whitelist dictionaries if missing or corrupted. - Bone Collapse Engine: Intelligently folds terminal vertex weights directly into parent bone structures during topology optimization.
Fixed
- TMPro Harvester Crashes: Wrapped the Omni-Harvester's TextMeshPro material scraper in a fail-safe execution block, resolving thread-killing
NullReferenceExceptionscaused by missing font assets on corrupted UI elements. - ImageMagick Crash Loops (VRAM Downscaler): Eliminated a queue crash condition triggered by ImageMagick execution failures. Added a bypass for active
RenderTextureobjects to prevent decoding halts on unreadable formats. - Matrix State Desyncs (World Engine): Fixed shader dropdown state desyncs occurring when dictionary values change. Resolved an issue where category foldouts collapsed unexpectedly after a system refresh.
- Font Fallback Failures: Patched TMP/Legacy font fallback logic across the ecosystem.
- Mesh Structural Corruption (Topology): Resolved severe triangle collapse and bone index mapping errors that occurred during high-aggression vertex welding. Fixed mathematical miscalculations in the blendshape frame averaging logic, and engineered a dynamic recursive Kinematic Protection Matrix into the microwelder to flawlessly shield delicate avatar hierarchies (e.g., Novabeast facial fluff, ears, and phalanges) from destructive vertex merging.
- AppDomain Sweep Bottlenecks (Reflection): The static reflection cache completely eliminates the massive AppDomain assembly sweeps that previously caused multi-second stutters during UI construction and FFT extraction.
- Quest Shader Whitelist Anomalies (Validator): Fixed an edge-case logic failure in the Quest conversion pipeline where mobile shader detection failed to accurately parse the
VRC.SDKBase.Validationwhitelist.
🎨 VixenTools/Latex Suit Ultra: Substance Painter Workflow & Setup
To achieve the intended high-fidelity raymarched depth, clearcoat iridescence, and micro-shadowing, your PBR textures must be packed correctly before importing to Unity.
1. Substance Painter Export Setup (The Packed PBR Map)
The _MetallicGlossMap slot requires a highly specific 4-channel texture packing to optimize VRAM and shader instruction counts:
- Red Channel (R): Metallic
- Green Channel (G): Ambient Occlusion (AO)
- Blue Channel (B): Height / Displacement (Used for Tessellation and Parallax Raymarching)
- Alpha Channel (A): Smoothness (Inverted Roughness / Glossiness)
How to configure the Export Template in Substance Painter:
- Open Export Textures -> Output Templates.
- Create a new
R+G+B+Atexture map. Name it[TextureSet]_PackedPBR. - Drag the Metallic map into the
Rslot (From Grayscale). - Drag the Mixed AO map into the
Gslot (From Grayscale). - Drag the Height map into the
Bslot (From Grayscale). - Drag the Glossiness map into the
Aslot (From Grayscale). Note: If you use a Roughness workflow, drag Roughness into the A slot and select "Invert". - Save the template and export your textures.
2. Unity Shader Configuration
- Albedo / Alpha: Slot your Base Color into
_MainTex. The Alpha channel controls the_CutOfftransparency. - Packed PBR: Slot the newly exported
[TextureSet]_PackedPBRinto the Packed PBR Map slot. Ensure the texture in Unity has sRGB (Color Texture) unchecked (Linear format). - Normal Map: Slot your standard DirectX/OpenGL normal map into
_BumpMap.
3. Advanced Features Integration
- Tessellation & Parallax: Adjust the
_DisplacementStrength(driven by your B channel) and_Parallaxto control physical depth and micro-shadowing. - Thin Film Interference: Modify
_ThinFilmThicknessto shift the iridescent pearlescent color tone. - AudioLink: Check Enable AudioLink to dynamically drive Iridescence via the Bass band (
_AudioLinkFilmMod) and Emission via the Treble band. - LTCGI / Light Volumes: Check the respective toggles to natively hook the latex material into VRChat dynamic lighting ecosystems.
v1.6.1 - 2026-05-05
Added
- Factory Reset Protocol (Shader Dictionaries): Engineered a safe "Soft Nuke" execution button into the
ShaderDictionaryAssetEditor. Bypassing standardAssetDatabase.DeleteAssetcalls to prevent GUI null-reference collapses, the protocol clears the internal array and uses smart file-path parsing to autonomously rebuild either the PBR Target schema or the Protected Whitelist schema from scratch.
Changed
- Non-Destructive Asset Relocation (Data Safety): Migrated the default initialization paths for
ShaderDictionaryAssetfiles out of the volatilePackages/directory. Dictionaries now securely generate withinAssets/VixenTools/Asset Database/World Engine/. This permanently isolates custom user shader entries from VPM, ensuring they are shielded from being overwritten or wiped during future package version bumps. - Diagnostic Execution Safety (World Engine): Restructured the Engine Diagnostic matrix to default all heuristic fixes to an opt-in state (
IsSelected = false). This prevents the automated Action protocols from accidentally mass-purging or modifying volatile hierarchy data without explicit user confirmation.
Fixed
- Serialization Deadlock & CS0246 (Architecture): Radically decoupled the
ShaderDictionaryAssetand its[CustomEditor]class from the primaryVixenWorldEnginewindow space into distinct scripts. This forces Unity's AssetDatabase to index the custom inspector immediately upon compilation, obliterating the deferred-loading bug and resolving theCS0246namespace missing errors. - Infinite Replacement Loop (Shader Pipeline): Injected an O(1) circuit breaker into the Geometry & Materials auditor. The heuristic scanner now explicitly recognizes the active
_targetReplacementShaderas inherently compliant, preventing the engine from falsely flagging-and attempting to recursively convert-materials that have already achieved their optimized target state.
v1.6.0 - 2026-05-04
Added
- Full Website & Documentation Expansion: Rebuilt the entire documentation portal with a unified neon‑cyber aesthetic, expanded technical breakdowns, and a fully rewritten Core Documentation page covering every subsystem in the VixenTools ecosystem.
- Tool‑Specific Deep‑Dive Pages: Authored complete documentation for Quest Conversion Engine, Badge Studio, Animation Workbench Pro, PhysBone Topology Mapper, Preset Manager, Scene Utilities, and the World Engine auditors.
- Interactive DOM‑Driven Layout System: Implemented a modular HTML layout grid with glass‑panel containers, badge headers, multi‑column matrices, and stable UIToolkit‑inspired spacing rules.
- Expanded Workflow Guides: Added step‑by‑step “In Practice” workflow sections for every major tool, including real‑world usage patterns, optimization strategies, and cross‑tool integration notes.
- New Visual Identity System: Introduced standardized glow headers, badge markers, preview cards, and consistent typography across all documentation pages.
- Changelog Archive Overhaul: Rebuilt the changelog index with improved readability, version‑indexed navigation, and expanded historical entries.
- Developer‑Facing Architecture Notes: Added internal logic explanations for heuristics, math libraries, reflection systems, VRAM analyzers, and topology forensics used across the ecosystem.
- Mobile‑Optimized Documentation Layout: Rewrote responsive CSS rules to ensure all panels, matrices, and code blocks render cleanly on mobile and tablet devices.
- New “Under the Hood” Section: Added a full technical deep‑dive into DOM bridging, shader injection, VRAM heuristics, and the internal architecture powering VixenTools.
- Vixen Hub Dashboard & Changelog Router: Introduced a centralized Hub window with ecosystem overview, core module launcher, network routing, support links, and a markdown‑driven changelog tab with version selector.
- Autonomous Scene HUD Update Badge: Added an in‑SceneView cyber badge that automatically appears when the package version changes and jumps directly into the Hub changelog view.
- World Engine Heuristics Dashboard: Implemented a live VRAM and compute profiler that aggregates texture, mesh, audio, and UI memory, estimates draw calls, and surfaces a threat‑level readout for the active world.
- World Engine Shader Replacement Matrix: Added target and whitelist shader dictionary assets, a custom shader selection dropdown, and bulk replacement protocols for unsafe desktop shaders.
- World Engine Third‑Party Auditors: Deployed dedicated scanners for ProTV, TXL, IwaSync3, native video players, Udon persistence, and UI memory sinks, each with categorized diagnostics and one‑click fix payloads.
- Quest Conversion Engine Topology Matrix: Added an interactive matrix for Animators, PhysBones, Colliders, Contacts, Constraints, Raycasts, Particles, Trails, Lines, Joints, and incompatible components with per‑node keep/culled toggles.
- Quest Conversion Engine Texture Processing Matrix: Introduced a dedicated texture queue that enumerates all unique materials, exposes resolution metadata, and lets users selectively opt textures into ImageMagick downsampling.
- Quest Conversion Engine VRCFT Hunter‑Killer: Implemented path‑, name‑, and component‑based detection for VRCFT and adjerry91 templates, auto‑routing all face‑tracking branches into a locked purge matrix for Quest safety.
- Quest Conversion Engine Deep Material Harvesting: Extended material discovery to Animator controllers and VRCFury behaviours, ensuring hidden and runtime‑driven materials are captured for Quest conversion.
- Quest Conversion Engine Performance Rank Heuristics: Wired the topology limits directly into a target Mobile Performance Rank selector, allowing the matrix to auto‑enforce caps for Excellent/Good/Medium/Poor profiles.
- World Engine Font & UI Normalization: Added global TMP and legacy font swap controls plus UI texture tracking to reduce canvas memory fragmentation and unify world typography.
- Live Surface Snapping Engine (Scene Tools): Added an enterprise‑grade gravity snapper that continuously drops selected objects to the nearest valid surface using a VRChat‑aware layer mask and terrain‑aware sampling.
- Precision Click-to-Place Raycaster (Topology Tools): Injected a sniper-rifle camera raycaster for the Scene View, enabling creators to teleport objects onto complex polygons using a real-time cyan/magenta UV projection disc.
- Omni-Matrix Diagnostic Spider (World Engine): Deployed a lethal heuristic auditing matrix explicitly mapped to ProTV, TXL, and IwaSync3 to hunt down architectural anti-patterns like GSV texture conflicts and Realtime GI emission blowouts.
- Raw UASM Code Scraper (Udon Persistence): Engineered a bytecode parser that intercepts the
UdonSharpEditorCacheto detectPlayerData.Setcalls trapped insideUpdate()loops, preventing network rate-limit nukes. - Autonomous Omni-Chaos Generator (QA Protocol): Upgraded the stress tester into an isolated environment constructor that quarantines execution into a dedicated
Stress Test.unityscene with dynamically spawned "Nightmare Pods".
Changed
- Hardware-Level VRAM Footprint Extraction: Decoupled the memory auditor from the
AssetDatabaseto capture theBase Textureclass directly from GPU registers, unmasking unmanaged 4KRenderTexturenukes. - Reactive Scene State Routing (Vixen Hub): Re-engineered the
RenderActionGridto utilize synchronous layout flushing, allowing the UI Toolkit visual tree to reflectEditorPrefsbadge states instantly without a domain reload. - VRChat-Optimized Snapping Matrix (Topology Tools): Hardcoded a custom bitwise layer mask
(~((1 << 2) | (1 << 4)...))into the gravity engine to explicitly ignore VRChat utility layers likeWater,UI, andPickup. - Asset Protection Whitelist Expansion: Injected critical community dependencies (VRC Billiards, IwaSync3 Internal) into the global protection matrix to shield logic-driven materials from the autonomous PBR replacer.
Fixed
- Full Website Comb Over: Fixed multiple outstanding issues with missing documentation, buttons, etc.
- Missing “Jump to Top” Button (Documentation): Restored the global scroll-to-top control across all documentation pages after a regression removed it from several layouts.
- Discord Bot Embed Truncation: Patched the VixenGitWatch telemetry bot to prevent aggressive truncation of release notes and commit bodies. Updated the embed engine to use safer limits and improved formatting for long-form content.
- Biometric Matrix Purge (Quest Conversion): Eradicated compilation blockages by deploying a targeted sweep to strip out PC-VR Face Tracking parameters, including
adjerry91templates and internalVF_UE_VRCFTnodes. - Prefab API Deadlock Correction: Patched a critical error by migrating from
GetPrefabAssetPathOfNearestInstanceto a standard 2022.3 compliantAssetDatabase.GetAssetPath(PrefabUtility.GetCorrespondingObjectFromSource())routine. - ASTC Texture Pipeline Desync (Quest Conversion): Fixed a catastrophic compression loop by rigidly forcing correct sRGB/Linear format serialization before applying
ASTC_6x6crunching. - Self-Occlusion Snapping Deadlocks: Implemented a "Surgical Shielding" loop that caches and disables all child colliders on a selected transform before raycasting to prevent objects from colliding with their own geometry.
- Legacy Font Thread Death (World Engine): Purged all hardcoded references to
Arial.ttf, successfully migrating the UI Void diagnostic to the Unity 2022+ compliantLegacyRuntime.ttf.
v1.5.1 - 2026-05-01
Added
- Autonomous Domain Polling (Vixen Hub): Engineered a static
[InitializeOnLoad]routine that silently parses thepackage.jsonmanifest during Unity domain reloads. It now dynamically cross-references the active ecosystem against localEditorPrefsto autonomously trigger the Scene View update badge without requiring manual intervention. - Direct Tab Routing (UI Ecosystem): Injected synchronous tab-routing execution into the
VixenHubclass. Clicking the Scene View update notification now bypasses the default dashboard and instantly maps the UI matrix directly to the Release Changelogs.
Changed
- Nuclear Decimation Downgrade (Topology Engine): Re-engineered the Multi-Pass Welder from an aggressive 3D volumetric crusher into an Extreme Precision 5D Microwelder. Enforced a strict 5mm (
0.005f) structural hard cap to safely seal sub-millimeter import seams without collapsing limb volumes or flattening continuous meshes into 2D singularities. - Kinematic Shield Bypassing (Avatar Validator): Strategically punctured the
Neck/Headprotective bone matrix. The heuristic scanner now explicitly isolates and exposes dense, non-structural children (Hair,Ears,Fluff) to the optimization grid, allowing the decimator to successfully hit Quest poly limits without being bottlenecked by shielded geometry.
Fixed
- UV Seam Tearing (Topology Engine): Eradicated catastrophic texture stretching during decimation sweeps. The upgraded 5D Spatial Hash
(X, Y, Z, U, V)now strictly locks UV coordinates, guaranteeing that vertices sharing atomic space but possessing divergent texture mappings are never violently fused. - RenderTexture Magick Crashes (VRAM Optimizer): Patched a critical failure loop where the
ProcessTexturesWithMagickpipeline attempted to intercept and decode volatile, activeRenderTextureassets, fully resolving the recurringerror/constitute.c/ReadImage/753console spam during a Deep Matrix Scan. - SDK Version Regex Blindspot (Vixen Hub): Expanded the ecosystem's JSON parser to actively detect modern
com.vrchat.baseandcom.vrchat.worldsdependencies, fixing a logic gap where the dashboard header falsely reported the active SDK version as "Unknown".
v1.5.0 - 2026-04-30
Added
- Context-Aware Dual-SDK Architecture (Vixen Hub): The core VixenToolBox ecosystem has been completely re-engineered to natively bridge and map both the VRChat Avatar SDK (
VRC_SDK_VRCSDK3) and the VRChat World SDK (UDON). The central Hub now operates as a dynamic gateway, autonomously reading the active compiler directives upon project initialization and seamlessly hot-swapping the "Flagship Tools" UI matrix to match the current development environment. - Airtight Compiler Sandboxing: Implemented strict, cryptographic-level compiler isolation across the entire asset suite to guarantee zero assembly bleed-over. World-exclusive utilities like
SnapToSurface.csare now mathematically locked behind#if UNITY_EDITOR && VRC_SDK_VRCSDK3 && UDONdirectives, while avatar-centric suites (VixenBadgeMaker,QuestConversionEngine,AvatarSDKValidator) operate strictly within#if UNITY_EDITOR && VRC_SDK_VRCSDK3 && !UDONboundaries. This ensures Unity's compiler strips incompatible scripts entirely, preventing catastrophicVRCAvatarDescriptororUdonBehaviourreference bricks when migrating the toolbox across radically different VRChat project infrastructures. - Dynamic Assembly Resolution: The internal reflection engine now safely queries for third-party and cross-SDK assemblies without establishing hard dependencies. By utilizing
comp.GetType().Name.Contains("VRCFury")during serialization sweeps, the package exists seamlessly in vanilla or heavily modded Unity environments without throwing missing assembly references. - 5D Spatial Hash Welder (Optimization Suite): Engineered a highly destructive, multi-threaded vertex decimation engine designed specifically for massive PC avatars (
VixenMeshPatcher.WeldVertices). The welder violently fuses co-located vertices on excessively heavy meshes (>15,000 polygons) by generating a proprietary 5-dimensional coordinate key ("{hashX}:{hashY}:{hashZ}:{uvHashX}:{uvHashY}"). By running bothx / thresholdandu / uvThresholdcalculations, it drastically crushes raw polycounts while mathematically guaranteeing the survival of critical texture seams. - Dual-Shielding Exclusion Matrix: The Welder is no longer blind to high-fidelity topology. It now features an autonomous Surgical Exclusion Matrix that deploys two layers of defense during decimation:
• Material Keyword Mapping: Automatically scans all submesh material slots for high-detail keywords ("eye","visor","lens","blush","face","mouth","teeth","pupil","iris") and assigns them a locked"PROTECTED_{i}"spatial key.
• Kinematic Bone-Weight Shielding: Actively queries the active Humanoid Armature forHumanBodyBones.NeckandHumanBodyBones.Headtransforms, recursively mapping their children to mathematically lock any vertex influenced by these bones entirely out of the decimation grid. - BlendShape Memory Recovery: Executing a destructive
mesh.Clear()inherently annihilates Unity's blendshape delta arrays. The Spatial Welder now performs a pre-execution memory extraction via aBlendShapeExtractstruct, caching all 175+ frames (DeltaVerts,DeltaNormals,DeltaTangents). Post-decimation, it mathematically averages the delta offsets across the newly fused vertices viamergeCounts, allowing highly complex facial animations to perfectly survive aggressive topology meltdowns. - Submesh Array Preservation: The decimation pipeline now strictly extracts and reconstructs triangle arrays on a per-submesh basis using
mesh.GetTriangles(s). This prevents the "Atlas Trap" where decimated avatars would violently collapse into a single material slot, guaranteeing your multi-material setups remain perfectly intact. - Dynamic PC Target Rank Matrix: Eradicated static, hardcoded PC culling limits. The PC Optimization Suite now features a dynamic
<fluent-select>Enum dropdown mapping toAvatarSDKValidator.PCPerformanceRank. Creators can explicitly target specific VRChat Performance Ranks (Excellent, Good, Medium, Poor). The deep-scanning heuristics instantly recalibrate their execution thresholds (e.g., Excellent strictly enforces a maximum of 4 PhysBones, 4 Contacts, and 1 Animator, while Poor expands the cap to 32). - Interactive Physics Executioner: Replaced blunt, invisible auto-cull algorithms with a surgical UI Toolkit panel. The PC Validator now spawns a dedicated interactive matrix populating a
List<PhysicsNode>. Sorted mathematically by hierarchy depth (GetDepth), it empowers creators to manually select and eradicate expendable leaf-node physics viaUndo.DestroyObjectImmediatewhile visually protecting structural physics roots. - Deep Material Inspector Spider (VRAM Profiling): Upgraded the VRAM calculation engine to pierce deeply through the Unity Inspector. It now weaponizes
EditorUtility.CollectDependenciesdata streams to spider through highly obfuscated components, specifically targetinganim.runtimeAnimatorControllerand VRCFuryMonoBehaviouroutfit toggles. It aggressively hunts down and caches nestedTexturedependencies, ensuring the ImageMagick downsampling pipeline captures 100% of the avatar's actual memory footprint. - Universal Cyber-Noir Topology (UI Ecosystem): Extended the native UI Toolkit
.ussarchitecture universally across the entire VixenTools ecosystem. Every utility from theAnimationWorkbenchWindowto theQuestConversionEngine, now perfectly inherits the signature dark-panel aesthetics, neon-cyan borders, and hyper-responsive interactive hover states (.cyber-panel,.cyan-btn,.danger-btn,.data-tag-destructive) via centralized stylesheet injections. - Macro Topology Overrides: Injected global "Keep All", "Cull All", "Select All", and "Deselect All" macro execution buttons into the interactive UI panels of both the Quest Engine and PC Validator via UI Toolkit button callbacks. This establishes a highly streamlined triage workflow when parsing massive arrays of
TopologyNodephysics components orTextureNodeassets.
Changed
- Base-Class Physics Targeting: Upgraded the deep matrix scanners from strict
<VRCPhysBone>wrappers to their foundational<VRCPhysBoneBase>and<VRCPhysBoneColliderBase>classes. The engine now successfully captures 100% of internal physics variations, including VRCFury auto-conversions, script-generated endpoints, and legacy dynamic bone migrations. - Native Class Hijacking: Overhauled the core
.ussstylesheets to natively target and hijack Unity's internal UI classes, specifically.unity-enum-field,.unity-popup-field, and.unity-slider-int. Optimization sliders now render as sleek, flat cyberpunk tracks with glowing cyan draggers (.unity-slider-int .unity-base-slider__dragger), while dropdowns feature tinted glass backgrounds and neon borders. - Instant UI State Refresh (Vixen Hub): Re-engineered the action delegate for the "Snap To Surface" world tool. It now asynchronously reads live
EditorPrefs.GetBoolstates and forces an immediate UIElements layout refresh, allowing the button text to instantly transition between active and inactive states without requiring a manual window reload.
Fixed
- Kinematic Bounding Box Detonation: Repaired a massive mathematical flaw where extracting standard bounds from meshes with offset origins threw the bounding box entirely out of the camera's frustum. The engine now initializes a
new Bounds(rootCenter, Vector3.zero), extracts all 8cornersof thesharedMesh.boundsinto absolute World Space viaTransformPoint, and projects them backward into root-bone Local Space viaInverseTransformPointfor a mathematically perfect, tight-fitEncapsulatepass. - The Atlas Trap (Decimation Bleed): Resolved a critical oversight where detailed facial geometry utilizing the same universal
bodyMatas the torso was being incorrectly targeted and melted down by the Welder. Successfully mitigated via the new Kinematic Bone-Weight Shielding protocol scanningHumanBodyBones.Neck. - Texture Shattering (UV Seam Rips): Fixed the destructive spatial hash blindly gluing UV seams together based solely on 3D proximity, which previously turned decimated textures into shattered, stretched geometry.
- IgnoreTransform Shield Piercing: The Topology Erasure matrix now actively parses every
ignoreTransformsarray insideVRCPhysBoneBasecomponents. Utilizing.IsChildOf(ig), if a bone is explicitly listed on that array, theHasPhysBoneProtectionheuristic shield is forcefully dropped, allowing the Culler to properly identify and melt dead leaf bones that were previously evading execution. - Autonomous Scene HUD Notifier: Completely rebuilt the update notification badge from the ground up to support Unity 2022.3. Stripped out legacy
Handles.BeginGUI()IMGUI math and injected a native UI ToolkitButtondirectly into thesceneView.rootVisualElementto perfectly respect high-DPI scaling, absolute coordinate anchoring, and scene depth-sorting. - CSS BorderRadius Traps: Replaced the incompatible
borderRadiusUI Toolkit C# shorthand with explicit, pedantic corner definitions (borderTopLeftRadius,borderBottomRightRadius, etc.) to permanently resolveCS0117compilation errors while maintaining the sleek, rounded aesthetic on the interactive scroll views. - Compiler Scope Breakage: Resolved a critical
CS1022namespace definition error caused by a rogue bracket escaping the#endifdirective in the Hub's master script, restoring flawless domain reloads and script compilation.
v1.4.5 - 2026-04-28
Added
- Dynamic Version Extraction (Vixen Hub): Engineered a lightweight Regex parser that autonomously reads the ecosystem's
package.jsonduring initialization to extract and display the active VixenTools and VRCSDK versions in the header, completely eliminating hardcoded strings and race conditions. - Changelog Pagination Engine (Vixen Hub): Completely overhauled the changelog markdown parser. Replaced infinite vertical scrolling with a structured, memory-efficient data dictionary and a native
DropdownFieldto dynamically isolate and render individual release histories. - Physics Joint Heuristics (Quest Engine): Expanded the deep matrix scan to actively hunt and isolate unsupported Unity physics constraints (
SpringJoint,FixedJoint,HingeJoint). - Dedicated Joint UI Topology (Quest Engine): Physics joints now populate in a dedicated phase 1.5 Interactive Topology matrix section, equipped with mathematically locked (limit 0), neon-red danger toggles to guarantee they are auto-culled during the conversion pipeline.
- Native Style Hijacking (UI Ecosystem): Injected base Unity class overrides (e.g.,
.unity-base-popup-field__input) into the core.ussstylesheets. Standard Unity fields now automatically inherit the VixenTools cyber-noir dark panels and cyan-tinted borders without requiring clunky inline C# modifications.
Changed
- Destruction Pipeline Routing (Quest Engine): Re-routed the
ProcessDestructionsequence so that physics joints are securely stripped from the prefab sandbox before unpack, preventing VRChat SDK mobile validation errors.
Fixed
- UI Toolkit Flex Boundaries (Vixen Hub): Repaired a critical layout quirk where the markdown
ScrollViewlacked strict flex limits, causing the viewport to bleed off the bottom of the Editor window. Enforcedflex-shrink: 1and applied aerodynamic padding buffers to restore full scroll depth. - Regex Verbatim Escaping (Vixen Hub): Resolved
CS1026andCS8997compile errors caused by double-escaped quotes during the manifest parsing sequence.
v1.4.4 - 2026-04-27
Added
- Support Ecosystem Hub: Created a dedicated support page featuring interactive, glass-morphic tip-jar cards to transparently fund development without paywalling features.
- Get Help Here Matrix: Deployed a new social routing hub featuring a mathematically enforced 16:9 responsive YouTube iframe for the Master Class video, accompanied by a 6-card creator network grid.
- Changelog Pagination Engine: Built a JavaScript-driven pagination system for the changelog. Replaced infinite scrolling with isolated version views, seamless CSS fade animations, and "Newer/Older" step routing.
- Version Jump Dropdown: Integrated a native
<fluent-select>dropdown to instantly route users to specific historical releases. - Scroll Tracking UX: Engineered a dynamic "Jump to Top" button that monitors viewport depth and gracefully fades into the UI to prevent endless scrolling on lengthy matrices.
- Interactive Lightbox Engine: Engineered a native, zero-dependency lightbox system (
#lightboxOverlay) allowing users to dynamically expand UI Toolkit previews into high-resolution cinematic viewports on the Architecture matrix. - SaaS-Grade Competitive Matrix: Completely eradicated the legacy HTML data table on the comparison page. Replaced it with a responsive, flex-wrapping feature grid using high-contrast neon styling to directly pit VixenTools against fragmented industry standards.
- Visual Architecture Showcase: Overhauled the List of Tools page from a text-heavy bulleted list into a high-fidelity image grid showcasing the actual custom Editor inspectors and utilities.
Changed
- Shadow DOM Styling: Pierced the Fluent UI
<fluent-select>Shadow DOM using::part(listbox)to force native dropdowns to respect the dark cyber-noir aesthetic and enforce scrollbar constraints. - Registry Template Sanitization: Stripped deprecated modal structures from the core
index.htmlVPM registry and secured the Scriban templating engine (e.g.,{{~ for package in packages ~}}) for safe backend hydration during CI/CD deployment. - Enterprise Navigation Matrix: Scrapped the horizontal top-row navigation. Implemented a persistent, fixed-position vertical sidebar to create a true desktop application feel, utilizing full-width block interaction states and cyan active-border tracking.
- Cinematic Image Cropping: Deployed
object-fit: coverlogic to the Quest vs PC Comparison banner to safely lock its height and prevent it from infinitely scaling and hogging the viewport.
Fixed
- SDK Dependency Resolution: Bumped ecosystem manifest to
v1.4.4and strictly enforced VRChat SDK requirements (com.vrchat.baseandcom.vrchat.avatarsmapped to^3.10.3). This resolves critical missing assembly references required by the newly integrated Live Scene UV Mapper's raycasting components.
v1.4.3 - 2026-04-26
Added
- Core Modules Matrix (Vixen Hub): Added a dedicated "Core Modules" tab serving as a centralized launcher for all flagship utilities within the VixenTools ecosystem.
- Action Delegate Routing (Vixen Hub): Upgraded the Hub's grid rendering engine (
RenderActionGrid) to accept raw C#System.Actiondelegates. This allows the exact same CSS.link-cardarchitecture to seamlessly route both web URLs and nativeEditorApplication.ExecuteMenuItemcommands without duplicating code. - Dynamic Markdown Link Injection (Vixen Hub): Upgraded the internal Markdown parser to intercept
[text](url)syntax mid-paragraph. It dynamically spawns transparent UI ToolkitButtonelements, stripping their native borders and backgrounds to blend perfectly into the standardLabeltext flow while executingApplication.OpenURL. - Full Mobile Performance Heuristics (Quest Engine): The scanner now mathematically calculates 100% of VRChat's Android Performance limits. Added native topology parsing for Triangles, Skinned Meshes, Material Slots,
VRCRaycast,ParticleSystem,TrailRenderer, andLineRenderer. - Incompatible Mobile Component Purge: The Quest Engine now actively hunts down objects globally banned on VRChat mobile (Cameras, Lights, AudioSources, Cloth, Rigidbodies, and standard Unity Colliders). These populate in a new "Auto-Culled" UI matrix featuring locked, neon-red danger toggles to guarantee their removal.
- Root Animator Protection: Developed a recursive depth scanner that detects the avatar's core root Animator. This component is now hard-locked into a "Kept" state (visualized with a protected neon-cyan toggle) to ensure heuristic culling never accidentally shatters the avatar's base functionality.
- High-Fidelity Linear Downsampling Pipeline: Upgraded the ImageMagick Lanczos resize method to perform gamma-correct scaling. Textures are temporarily moved into
ColorSpace.RGB(Linear) during the downsample, preventing the mathematical darkening/crushing of highlights typical in standard sRGB scaling. - Micro-Contrast Texture Recovery: Injected a mathematically calculated
UnsharpMask(0.0, 0.5, 1.0, 0.05)into the ImageMagick pipeline post-resize to recover high-frequency material details (fur, fabric weaves) naturally destroyed by downsampling. - Interactive Texture Culling Matrix: Added a dedicated DOM matrix displaying all parsed textures and their resolutions prior to conversion. Creators can now selectively disable ImageMagick processing on a per-texture basis to massively reduce compile times on highly redundant avatars.
- Mochie Shader Support: The Quest Engine scanner now inherently recognizes custom third-party property routing, specifically mapping
_MochieMetallicMapsand_MochieMetallicMapdown to the VRChat Mobile Standard_MetallicMapslot. - Emissive Mask Color Control (Badge Studio): Injected a new
ColorFieldto give creators absolute control over the generation of the_EMIemission mask. This allows for multi-channel emission blending without blowing out VRChat's bloom. Saved natively to thelayout.jsonmatrix. - Material Parameter Injection (Badge Studio): The engine now physically reaches into the compiled material to forcefully write user-selected colors (Material Base Color, Emissive Mask Color) directly into the
_Color/_BaseColorand_EmissionColorshader properties, overriding legacy states. - Targeted Emission Routing (Badge Studio): Decoupled the text rendering pipelines, adding explicit UI toggles to independently choose whether the Display Name or the Pronouns get injected into the emissive mask.
Changed
- Hub Parser Execution (Vixen Hub): The Hub's dashboard now intelligently terminates its Markdown parsing loop upon detecting external routing headers (e.g., "[ Network Links ]") to prevent rendering redundant data that is already handled by dedicated tabs.
- Topology Matrix CSS Partitioning: Separated the massive Quest Engine topology readout into distinct, collapsible DOM foldouts (PhysBones, Colliders, Contacts, Constraints, etc.) to prevent UI bloat on highly complex avatars.
- Texture Importer Asset Enforcement: The Quest Engine no longer blindly imports all processed files as standard sRGB maps. The pipeline now detects if a texture is a Normal Map or a Metallic/Gloss data map, directly injecting the
TextureImporterType.NormalMapandsRGBTexture = falseflags to prevent washed-out shading on the Quest clone. - ColorField USS Integration: Updated the core
.ussstylesheets to natively target.unity-color-field, ensuring newly spawned color pickers inherit the custom cyber-noir text scaling, panel backgrounds, and border alignments.
Fixed
- UI Toolkit Flex-Box Clipping (Vixen Hub): Repaired a critical math error where nested
100%width assignments insideFlexDirection.Rowcontainers forced text to blow past the window bounds and trigger a horizontal scrollbar. Enforced strictflex-shrink: 1,flex-grow: 1, andwhiteSpace = WhiteSpace.Normalstates directly via C# to guarantee clean line wrapping around>>chevron bullets. - Alpha-Channel Emission Blowout (Badge Studio): Fixed a critical bug where ImageMagick's transparent text backgrounds were saving as
(255,255,255,0)(Transparent White). Because Unity's Standard shader emission strictly reads RGB and ignores Alpha, this caused the entire badge to glow blindingly white and override the diffuse map. The engine now mathematically flattens the final_EMIcomposite onto a pureMagickColors.Blackbackground and permanently strips the Alpha channel to guarantee zero-bleed emission. - Temporary MeshCollider Memory Leak (Badge Studio): Built a garbage-collection tracker (
_tempCollider) for the Live Scene UV Mapper. The tool now safely executesDestroyImmediateon the auto-generated MeshCollider if the user disables mapping, swaps targets, or closes the window. - Emissive Mask Darkening (Badge Studio): Fixed a compositing math error where the text plate on the generated
_EMImap was adopting the user's Neon Color, which artificially darkened the shader's target_EmissionStrength. Text on the mask now strictly utilizes the new Emissive Mask Color (defaulting to pure white). - Quest Engine Compiler Warnings: Purged a dangling
_rendererCountvariable assignment and eliminated a structurally impossible type-check againstVRCPhysBoneColliderinside the incompatible components loop. - Legacy JSON Fallback: Fortified the Badge Studio
layout.jsonparser to gracefully handle older template configs. If an older JSON file lacks the newly addedemiMaskColorparameter, the system safely falls back toColor.whiteinstead of defaulting to a transparent/black mask.
v1.4.0 - 2026-04-24
Added
- Enterprise UI Toolkit Architecture: Completely eradicated legacy IMGUI constraints across the entire ecosystem. Vixen Hub, Badge Studio, Animation Workbench Pro, Quest Conversion Engine, PhysBone Topology Mapper, and Preset Manager now operate natively on Unity's high-performance UI Toolkit DOM tree.
- Centralized Styling Matrix: Established a master
UiStylesrepository to house theCyberpunk-Regular.ttffont and all.ussCSS design tokens. This guarantees absolute visual consistency across all windows and provides a single-point maintenance hub for future UI scaling. - Dynamic Flex Layouts: Engineered highly responsive, flex-wrapping grid architectures for data-heavy tools. The interfaces now mathematically scale and stack panels gracefully upon window resize, completely eliminating clipped text and overlapping bounds.
- Dynamic DOM Bridge (Quest Engine & Badge Studio): Replaced the volatile
OnGUIredraw loops with persistent UI Toolkit state injectors. Interfaces now seamlessly sync variable states and spawn interactive matrices instantly without triggering Editor-wide lag spikes. - Dynamic JSON Layout Engine (Badge Studio): Replaced hardcoded badge layout coordinates with a persistent
layout.jsonsystem. The tool now automatically saves and loads advanced UV bounds, text rotations, and neon hex overrides directly into custom template directories. - Furality Layout Generator: Built a dedicated developer utility natively integrated into Badge Studio to autonomously scaffold directories and format perfect
layout.jsonboundary configurations for all Furality convention templates. - Autonomous Scene View HUD Notifier: Eradicated the workflow-breaking update popup window. The engine now silently detects version discrepancies and injects a sleek, non-blocking, neon-accented
>> VIXENTOOLS UPDATEbutton directly into the corner of the active Unity Scene View. - Live Scene UV Mapper (Badge Studio): Integrated a 3D coordinate mapper that temporarily suspends Unity's default gizmos to hijack Scene View clicks. It raycasts against the badge mesh, mathematically inverts UVs to ImageMagick pixel space, and draws a neon pink debug indicator at the exact intersection point.
Changed
- Magick.NET Font Engine Upgrade (Badge Studio): Ripped out unstable, Windows-only
Gdi32.dllOS-level font installation hacks. Migrated to modern Magick.NET direct file pathing (@font.ttf), ensuring cross-platform stability and significantly faster text-plate rendering. - Cyber-Noir Aesthetic Standardization: Unified the visual language across the entire VixenTools suite. Deployed tinted glass
.cyber-panelwrappers, high-contrast neon headers, and massive, deeply saturated action buttons to clearly delineate execution phases. - Markdown Engine Sanitization: Upgraded the Hub's internal Markdown parser to natively generate
VisualElements. Actively stripped all volatile unicode emojis and replaced them with stable, terminal-compliant chevron syntax. - Graceful Degradation States: Overhauled error-handling UIs (such as missing VRChat SDK warnings) to utilize the new enterprise styling, deploying amber
.warning-box-styledelements. - Skinned Mesh Raycasting (UV Mapper): The mapping engine now automatically detects and bakes
SkinnedMeshRendererdata into a staticMeshCollider, allowing accurate raycasting on dynamically weighted Furality attendee badges.
Fixed
- Ecosystem Scanner Bleed-Over: Fixed a directory routing bug where the VixenTools source network was blindly indexing nested Furality template assets by injecting strict exclusion filters.
- UI Toolkit Constraint Clipping: Addressed a layout violation where nested flex-containers would clip their content. Mathematically adjusted root
min-widthparameters across the matrix and injectedwhite-space: normal;into info-box CSS to ensure descriptions properly wrap and stack horizontally. - CSS Prefix Validation: Sanitized the newly migrated
.ussfiles to strictly adhere to Unity's TextCore engine, replacing standard CSS tags with required-unity-prefixes to eliminate console UI warnings. - Raycast Piercing (UV Mapper): Upgraded the mapper to use
Physics.RaycastAll()withMouseDragsupport. The tool now successfully pierces through invisible avatar capsule colliders that were previously eatingMouseDownevents and blocking the raycast.
v1.3.1 - 2026-04-23
Added
- Autonomous Update Prompter: The Vixen Hub now features an
[InitializeOnLoadMethod]that passively reads the VPMpackage.jsonin the background during Unity compilation and triggers when an update is detected. - Extended Hub Architecture: Expanded the Vixen Hub into a 5-tab control matrix (Documentation, Changelog, Donation, Social Media, Get Support).
Changed
- Triage Routing: The Hub's "Get Support" tab has been overhauled to inject a direct invite to the VixenTools community Discord, establishing a streamlined funnel for live pipeline troubleshooting.
v1.3.0 - 2026-04-21
Added
- Quest Conversion Engine: Engineered a fully non-destructive, enterprise-grade pipeline for converting PC avatars to Android/Quest. Generates an isolated prefab sandbox and clones materials mathematically.
- ImageMagick Lanczos Pipeline: Intercepted Unity's native texture importer to route PC textures through a high-fidelity Magick.NET downsampling pass before forcefully applying Android ASTC compression.
- Heuristic PhysBone Culling: Integrated a topology scanner that mathematically calculates skeletal depth to aggressively cull deep leaf bones based on targeted Mobile Performance Ranks.
- Interactive Topology Matrix: Added a massive, scrollable pre-execution control panel allowing creators to manually override which physics components survive the Quest conversion.
- High-Fidelity Material Translation: Defaults to
VRChat/Mobile/Toon Standard, mapping PC-side metallic, gloss, normal, and emission properties from Poiyomi and lilToon into the mobile shader.
Changed
- Ecosystem Architecture Re-route: Completely refactored the global
MenuItemdomain structure. - Live Surface Snapping (Engine Upgrade): Overhauled the legacy update loop with Unity's native
Transform.hasChangedflag and injected a discreteCtrl+Alt+Shotkey. - Matrix UI/UX: Transformed the Interactive Topology Matrix from a cramped text dump into a highly readable control panel with high-contrast neon green target highlights.
Fixed
- Pivot-Clipping (Surface Snap): Objects no longer incorrectly snap by their center pivot. A recursive algorithm dynamically calculates true geometric bounds across all child colliders and renderers.
- Self-Collision Loops (Surface Snap): Injected an execution micro-state that pushes objects to the
IgnoreRaycastlayer during raycasting to prevent self-snapping.
v1.2.0 - 2026-04-20
Added
- Vixen Hub Integration: Merged standalone documentation and changelog parsers into a unified, tabbed Editor dashboard.
- Ecosystem Discovery Engine: The Badge Studio now passively scans the project hierarchy to detect installed Furality SDKs and dynamically route output paths.
- Universal Shader Targeting: Built a heuristic material engine that natively detects and configures target shaders across Poiyomi, lilToon, VRChat Mobile, and legacy Furality shaders.
- Dynamic UV Auto-Layout: The generator intercepts convention selections and automatically adjusts localized text bounds, rotations, and signature neon hex colors.
Changed
- Template Authoring Pipeline: Upgraded the procedural base generator to support raw Asset Ingestion (swallowing empty convention
.jpgfiles and transcoding them).
Fixed
- Furality SDK Plurality & Obfuscation: Engineered a recursive deep-scan discovery protocol to bypass erratic year-to-year folder restructuring.
- Magick.NET Dimension Casting: Resolved implicit
uinttointconversion deadlocks. - Emission Blackout Safeguard: Added a failsafe to detect and override black or transparent
_EmissionColormultipliers on legacy materials.
v1.1.1 - 2026-04-18
Added
- Destructive Pipeline Operations: Integrated a "Delete Selected" function within the Animation Workbench bindings matrix to safely prune dead property tracks.
Changed
- Explicit Intent Paradigm: Flipped the default states for "Sample Start Value" and "Sample End Value" to
falseto prevent the pipeline from destructively hijacking live scene data unless explicitly commanded.
Fixed
- Multidimensional Property Extraction: Resolved a critical native API crash when attempting to bind Vector/Color properties on locked Poiyomi shaders by decomposing them into individually animatable float channels.
v1.1.0 - 2026-04-10
Added
- Animation Workbench Pro: Officially migrated into the VixenTools package ecosystem.
- Runtime Math Library: Established the
Runtimeassembly by migratingEasingFunctions.csto handle pure mathematical logic safely in-game. - Dynamic Hub Engine: Upgraded the VixenTools Hub to autonomously parse and render the package
README.md.
Changed
- Compiler Safeguards: Wrapped all Animation Workbench Editor scripts in strict
#if UNITY_EDITORdirectives.
v1.0.3 - 2026-04-10
Fixed
- VPM Dependency Resolver: Replaced strict greater-than inequality (
>=) with caret operators (^) inpackage.jsonto prevent the VRChat Creator Companion from aggressively fetching unstable beta SDKs. - Listing Hydration: Repaired the VCC listing frontend by migrating Scriban JSON data generation out of the client-side JavaScript and into a protected DOM bridge, preventing IDE auto-formatters from shattering the build pipeline.
v1.0.2 - 2026-04-10
Fixed
- Compiler Bleed-Over: Injected a strictly configured Assembly Definition (
.asmdef) into theEditordirectory. This hard-locks compilation boundaries, preventing thePhysBoneTopologyMapperfrom crashing Unity when users attempt to build their avatars for runtime.
v1.0.1 - 2026-04-10
Added
- CI/CD Pipeline: Established fully automated GitHub Actions workflows for generating
.zipreleases,.unitypackagefallbacks, and VPM-compliant registry manifests. - VCC Storefront: Deployed a glassmorphic, cyberpunk-styled VPM package listing using Fluent UI web components and FAST Design tokens.
v1.0.0 - 2026-04-09
Added
- PhysBoneTopologyMapper: Initial release of the flagship extraction and injection engine.
- Master Blueprints: Added functionality to utilize
AnimationUtility.CalculateTransformPathand Unity.presetfiles to bypass native prefab constraints and map complex topologies seamlessly across compatible avatar roots.