Skip to main content

Getting Hacked, How it Happened, and How to Protect Yourself

· 13 min read
BluWizard
Lead Docs Author, Community Helper, Shader Contributor

Hello everyone, BluWizard here.

I'm happy to announce that things are starting to return to normal here at Poiyomi Labs. The malicious actor responsible for the hijacking has been properly dealt with, disposed of, and thrown in the Garbage Compactor.

Clear your Browser's Data!

It is highly recommended that you clear your browser's cookies and data before accessing pro.poiyomi.com to download Pro Shader packages.

This is because we've received some reports that existing cookies will throw an error when attempting to download it through the Pro VCC Package.

Wait... what happened?

In case you have been living under a rock this whole time, a cybersecurity event occurred on Poiyomi's accounts. If you don't know who Poiyomi is... then I am very shocked.

Duh! He's the creator of Poiyomi Shaders for god sake! The one who created the shaders for our Avatars in VRChat that we know and love today!

But, how did this cyber attack happen? Well today, I am going to break down what exactly happened based on the information I've learned and from my research into this incident.

This is going to be a much different subject than what we normally talk about here, so sit down and drink some coffee because this one is a doozy!

The Attack

On April 13th, 2026, Poiyomi fell victim to a targeted cyber attack that involved a takeover of their Google Account and Discord, among others. During that time, packages were temporarily inaccessible and voluntarily taken down as a security precaution.

To put things simply, Poiyomi, like all of us, are gamers. And just like anyone, we can fall for security exploits that happen without us even noticing. His account got compromised after downloading a modpack for Minecraft from CurseForge.1 The attacker invited Poiyomi to a Minecraft server over Discord and provided a package to install via CurseForge, which is a known reputable website across the Minecraft community for hosting user-generated modpacks for Minecraft. Not only that, but the attacker used social engineering by digging into their friends list to claim that people they knew were already playing Minecraft in order to draw them in.2

Once the Modpack was successfully installed via CurseForge, chaos ensued.

The hacker gained control of Poiyomi's Google and Discord account via session hijacking. This is known as a "token grab," which is a malicious scripting attack where the login token is stolen from the browser's cookies and sent over the internet. This is a known social engineering attack layered on top of a technical one, where the attacker used a trusted social context to lower the victim's guard before deploying malware.

Once the attackers had access, they quickly snooped over his personal information leading to possible identity theft due to the sheer amount of personal information linked to their Google Account.

Now, you may be asking, "Wouldn't Poiyomi use Multi-Factor Authentication (2FA) everywhere?"

Yes, you would be right. He did have Multi-Factor Authentication enabled. Except that, even if you have Multi-Factor Authentication enabled, your login tokens are still exposed as a cookie!

The Malware Vector

This is not the first time CurseForge was weaponized this way to attack video gamers. A known variant of this exact incident dates back to Fractureiser in 2023, where several CurseForge and Bukkit accounts were compromised and used to inject malicious code into plugins and mods, which were then adopted by popular modpacks such as Better Minecraft, which amassed over 4.6 million downloads. Notably, many of the impacted modpacks were compromised regardless if the owners had Multi-Factor Authentication or not.3

The malware's purpose was to act as an infostealer — which stole Minecraft and Discord authentication tokens, as well as cookies stored on the web browser.4 This is the exact kind of malware Poiyomi fell victim to.

Another instance of this malware vector was the Stargazers Ghost Network which distributed malicious loaders disguised as legitimate Minecraft mods through over 500 GitHub repositories, boosted with fake stars and forks to appear trustworthy. Once installed, the malware captured Minecraft session tokens, Discord and Telegram login tokens, and deployed a .NET-based stealer to exfiltrate browser passwords, VPN logins, and other sensitive information.5

These vectors have one thing in common — they use the same Java-based architecture to hide malware inside .jar files that is executed silently alongside the game.

How Session Token Theft Works (and Why Multi-Factor Authentication Can't Stop It)

When you successfully log in to a web application, the server generates a session token stored as a cookie in your browser. This token tells the server, "I have already proven who I am, so keep me logged in." Unlike credential theft, which targets usernames and passwords, attackers can abuse the token created after authentication — directly bypassing the need to know a password.6

Why doesn't MFA help once a token is stolen? Well, that's easy. Multi-Factor Authentication only serves one purpose: Guard the Login. Once the Login is complete and a session token is issued, Multi-Factor Authentication has done it's job. Now that the session is valid, it can remain active for hours or even days by assuming the Web Browser's cookies were never cleared regularly. So when an attacker steals your token, no login event is triggered and no Multi-Factor prompt is triggered because the Multi-Factor Authentication already happened when the original session was created.7

All modern Web Browsers store cookies in databases on the user's device. Malware specifically designed to target these databases can silently extract session tokens and transmit them to attackers, which is done through infostealer software. The same infostealer software is often used to "pass-the-cookie" which occurs when attackers hijack a victim's session cookies even when the application is not being used.8 Because of how session hijacking bypasses Multi-Factor Authentication and passwords entirely, it is one of the fastest-growing attack vectors across the internet. If you think about how large this can be scaled, it is pretty frightening.

What We Did

Shortly after the attack occurred on Poiyomi, his Discord account began to act maliciously... changing permissions and removing Moderators since Poiyomi's Discord Account was the Server Owner (which has ALL permissions). The entire team here at Poiyomi Labs worked their very hardest to suppress the malicious actor's actions (which was hard to do because the malicious actor had access to a Server Owner's account).

To further protect ourselves, we began voluntarily shutting down our VCC Repositories, suspended Poiyomi's GitHub accounts, and began recovery efforts as soon as possible. It didn't take long for Poiyomi's Patreon account to get accessed by the malicious actor. Due to Patreon's extremely poor customer service, recovering access to their account was a nightmare. Eventually, Poiyomi regained access after the entire community yelled at Patreon on Twitter/X on the issue.

Funny enough, Patreon decided to discontinue customer support on Twitter/X shortly after this incident became widespread on the platform. Coincidence? I think not!

What followed for an entire week was a tireless effort to recover ourselves from this incident. A lot of misinformation was spread about "malware being added to Poiyomi Shaders," which was never true. Even though files were hosted on VCC Repositories and in our Discord Server, you cannot edit files that were already uploaded. Regardless, we took the Repositories offline just in case.

I, myself (BluWizard) as the sole maintainer of the Poiyomi Documentation, was unaffected. Months ago, Poiyomi granted me management access to Vercel (our hosting provider for the Documentation). When the incident occurred and the PoiyomiDocs repository got taken offline temporarily with Poiyomi's GitHub account, I was able to temporarily change the Git Repo to my fork of PoiyomiDocs so that I could still maintain it. This allowed me and Tony_Lewis to post the same announcement made in the Discord Server on here about the incident and an FAQ. If Poiyomi didn't graciously grant me permissions to maintain our host, the website would have been "frozen" with no way to update information and a lot of unanswered questions. I am forever grateful for Poiyomi's trust in me to maintain the Documentation on his behalf.

Meanwhile on our Discord Server, we were flooded with lots of comments, questions, and complaints during that whole week. It was not easy for us, even for Tony_Lewis.

The Aftermath

Few hours passed after the attack happened, and eventually it all stopped. The malicious actor attempted to hold their account at ransom, but it reached a point where that was not possible thanks to the sheer amount of security measures we had in place. In the end, all parties involved reached a dead-end. Nobody, not even the attacker, could go any further. This whole game of chess resulted in a stalemate.

The whole situation wasn't over yet, however. Poiyomi was MIA as he was still working tirelessly to fully recover from the cyber attack. Identity theft reports were filed and many emails were sent.

As Poiyomi started to slowly bring his accounts online after fully regaining access, their GitHub Repositories started to come back online. It was time to rejoice! Although, many people argued that they didn't wanna risk being attacked either. Even so, we analyzed all the files once back online and we found NO changes made on GitHub. The files are still 100% safe to use, which was a huge relief.

The most important thing to express here is that this attack was caught on very early. If this went on for much longer without catching it early on, this situation could have been far more worse than we could have imagined.

What Can I Do to Protect Myself?

The strongest defense these days is yourself. Yes, it's not the greatest answer I can give, but you can have the strongest defense against cyber attacks if you know exactly what to do. Here are some advice I can personally share on how to best protect your account:

  • USE FIDO2-based Security Passkeys that cryptographically bind authentication to specific devices and websites.
    • I personally utilize FIDO2-based YubiKeys on my accounts, which are USB devices that cryptographically authenticates your login during Multi-Factor Authentication.
  • USE Device Bound Session Credentials (DBSC) if available.
    • Google's Device Bound Session Credentials (DBSC), available in Chrome v146 and newer, binds authentication sessions to a specific device using the Trusted Platform Module (TPM) on Windows. This means if the token was stolen, it is useless on other computers because of your TPM module. In fact, this is one reason why TPM 2.0 is a requirement for Windows 11.9
  • HAVE shorter session lifetimes to reduce the value of a stolen token.
    • A session that expires after 15 minutes of inactivity is far less useful to an attacker than one valid for several days.
    • If you want to be extra vigilant, configure your Web Browser to automatically clear your Cookies on a scheduled cadence.
  • AUDIT your active browser sessions on Google, Discord, GitHub, etc., and revoke anything you don't recognize.
  • KEEP your preferred Antivirus Software active and up-to-date.
    • Let's face it, Windows Defender cannot be the last line of defense. While Windows Defender detects some token stealers, Bitdefender and Malwarebytes have broader coverage of detecting them. Regardless, YOU are the last line of defense against any attack!
  • DO NOT install software from unverified sources, even if they seem trusted! Think twice, analyze, and research before installing legitimate software.
    • This obviously includes modpacks, as described in this post. .jar files can be contaminated with malware if you're not careful!
  • IF a friend DMs you (most often randomly) about anything, watch the conversation pattern. If it feels off or unusual from what you are acquainted with, raise a red flag, ask a personal question that your friend would only know about you, and exercise caution.
    • Sometimes when I receive a random DM from a friend with unusual messaging patterns and they insist me to do something, I like to rage-bait them to the point where they would just give up. The results can be hilarious.
  • SETUP a SIM PIN to protect yourself from a "sim swap" attack. A "sim swap" is what happens when an attacker tricks your carrier to change your SIM card registration remotely without requiring them to physically change your SIM card.10
    • Falling victim to a sim swap attack is even more horrific than a login token being stolen because an attacker can use your Phone Number to login to your accounts without your knowledge. Scary!
    • Both iPhone and Android users can set up a SIM PIN in your phone's Carrier Settings. You would need to first enter the default PIN (provided by your carrier). Then, change it to a PIN that you will remember. That's it!

Conclusion

To be frankly honest, cybersecurity is extremely important in this day and age. With AI booming with popularity and big media prioritizing fear-mongering propaganda, it is vital that you carefully guard your online accounts with a sense of urgency on a daily basis. You never know when everything you care about online goes away in a blink of an eye.

Thank you for reading and please stay safe out there!

Footnotes

  1. Poiyomi Hacked? VRChat users warned not to download or update shaders

  2. Poiyomi Shaders Compromised in Targeted Minecraft Social Engineering Attack

  3. New Fractureiser malware used CurseForge Minecraft mods to infect Windows, Linux

  4. Infected Minecraft Mods Lead to Multi-Stage, Multi-Platform Infostealer Malware

  5. Minecraft Mods used to Spread Malware

  6. Session Hijacking: How Attackers Bypass Your Defenses

  7. Session Cookie Theft: You Showed Your ID at the Door. But Someone Else Has Your Room Key

  8. Session Hijacking vs Stolen Cookies: Real-World Attack Scenarios & Detection

  9. What Is a Trusted Platform Module (TPM)?

  10. Hijacked by a Text: Understanding and Preventing SIM Swapping Attacks

Upcoming Changes to the Documentation for 10.0

· 6 min read
BluWizard
Lead Docs Author, Community Helper, Shader Contributor

Hi, BluWizard here! As the maintainer of the Poiyomi Shaders Documentation, I would like to share some changes being made to the Documentation in preparation for 10.0.

As some of your Patreon subscribers already know, Poiyomi Pro 10.0 is now available and is ready for open testing. Before 10.0 can be released to the public as Poiyomi Toon (Free), some changes must be made to this website so that the transition is seamless and that information stays relevant and up-to-date.

This also includes a full transition from being able to download Poiyomi Pro into our brand new system used on pro.poiyomi.com , which is far more reliable than Discord for various technical reasons. That being said, all future downloads of Poiyomi Pro will be handled from that sub-domain moving forward.

Now, let's get into the most important changes...

Docs Versioning

As of recent updates, we have implemented the usage of the Docusaurus Versioning CLI to create versions of each page in the documentation that shows context based on the version selected. It appears as a version dropdown on the Header, which looks like this:

Dropdown Menu to switch between versions.

Figure 1: Version Dropdown

When you hover your mouse over it, you will see some version numbers. By default, the latest version will be what has been set as the default in our configuration. If you select an older version (such as 9.3), the context of the documentation page you are viewing will significantly change.

This means that if you happen to be using an older version, you can now use this dropdown to view accurate information on what you're looking for. Because of how 10.0 has a gigantic amount of changes across the shader overall, this will be how we will control our context for future versions. By default, the "latest" will be shown (which is 10.0). If you happen to be viewing context with an older version selected, a yellow-colored banner will appear as a gentle reminder.

If a new version becomes available, we will run a CLI command that basically "archives" a copy of all pages into a special "versioned_docs" directory. So if and when 10.1 releases in the distant future, we will run a command that makes all current (10.0) documentation be archived as a previous version, thus making any new edits be seen as 10.1 (latest version) and the Version Dropdown gets updated.

As a result, this allows our visitors to always find relevant information for the version of the shader they are using. Now while it could make it difficult for contributors to help improve our documentation, we barely get any changes to older versions. So there is less of a reason to edit or update older pages for older shader versions unless deemed absolutely necessary.

You can view more technical details of how this system works here .

Download & Install Instructions

As some people may have already noticed, our Download & Install instructions have been overhauled as requested by Poiyomi.

To start, Poiyomi Toon (the public Free version) now recommends ALCOM / Creator Companion as our recommended installation method. This is because we find this method to be far more manageable and easier for the majority of our users, as the package is coded to automatically remove conflicting Poiyomi Shaders versions (if any are detected) before it is installed in the project. It also now contains scripts that hardens the process to ensure edgy avatar creators who like to include a copy of Poiyomi Shaders with their Avatar packages to never have their conflicting copy imported in the first place (essentially removing the _PoiyomiShaders folder from the import dialogue). A Debug message will throw in the console when this happens, so you'll know. If you are reading this and are one of those avatar creators still doing this practice, please stop doing that!

Secondly, for our Poiyomi Pro users, all Poiyomi Pro Unity Packages starting with 10.0 will now be posted on pro.poiyomi.com from now on. We will be deprecating posting our Unity Packages from our Discord server moving forward, as Discord's inability to maintain the platform's security and Patreon's inability to make the Discord Bot reliable makes using Discord for Patreon Authentication a very difficult process for everyone. Thus, authenticating from our new pro.poiyomi.com website has proven to me much more reliable and has faster authentication timing from Patreon in comparison, so we highly recommend you bookmark that website.

Please take a read through our updated Download & Install instructions to see all the options now available to you.

Docusaurus Upgrades

We are transitioning our framework to prepare for breaking changes that will be introduced in Docusaurus v4.0, which is due out sometime this year. This major upgrade will introduce optimized build infrastructure, including Rspack, SWC, LightningCSS, optimized storage, and stricter guidelines on writing.

MDX guidelines will become more stricter with the syntax without having to rely on proprietary Docusaurus syntax on top of MDX. Since the ecosystem is widely moving to MDX v3, we have transitioned all pages to the .mdx file extension so that this website is future-proofed against it. The upside of this is that this will allow our documentation to be more portable with external tools like Prettier, ESLint, TypeScript, VSCode, and GitHub to better understand the format. This greatly improves compatibility with the Unified ecosystem and the MDX Playground.

Alongside all these changes, Admonitions, Comments, and Heading IDs are getting an upgrade which will be noted in the CONTRIBUTING document for our contributors to read over.

With that being said, if you are reading this and are maintaining your own Docusaurus website (I know VRChat uses it for their Creators Docs), I highly recommend you read the full blog post here on Docusaurus v3.10 release, which details how to prepare your website for Docusaurus v4.0.

Conclusion

There is a lot more work to be done as Poiyomi 10.0 is continuously being worked on each day to ensure it is fully stable when the big day comes (the full release of the 10.0 Free version, that is). I am continuously editing, updating, and proofreading everything that I learn from each new update. If you find some information that is either inaccurate, conflicting, or find tomfoolery of any kind, please don't hesitate to reach out by opening an Issue on our Docs Repository as this helps me stay organized on what needs to be done.

How to use the VCC version of Poiyomi Pro

· 3 min read
Poiyomi
Shader Developer

The Poiyomi Pro version can now be installed via com.poiyomi.pro VCC package, now available in the main VCC Repository.

This post goes over instructions as well as answering some frequently asked questions. The Download & Install instructions will also be updated with this new information as well.

Setup

The setup of the Poiyomi Pro VCC package is fairly straightforward. It contains a script used to authenticate with your Patreon account in order to install the Poiyomi Pro package into your project. For the most part, you don't have to do much really.

To add Poiyomi Pro to your project using the VCC, ensure you already have added Poiyomi's VPM Repo to your VCC Client. If you haven't done this yet, go here and follow the instructions as we've updated the Download & Install instructions to accommodate this addition.

  1. Under Manage Project, look for the Poiyomi Pro package in the list and click the icon for it. The identifier is com.poiyomi.pro.
    • WARNING: This will also remove any existing installation of Poiyomi Shaders if detected!
  2. Launch your Unity Project.
  3. The script will automatically run and open a webpage in your default Web Browser. It will prompt you to authorize with your Patreon Account.
  4. Upon success, the webpage will say something like "Authentication Successful, you may now close this tab."
  5. Go back to your Unity Project and the script will automatically begin initiating a download of Poiyomi Pro into your project. It's that easy!

These instructions will be similar for other VCC clients such as ALCOM (which we recommend using!).

When importing com.poiyomi.pro to your project, it may automatically remove existing installs of Poiyomi Shaders so that there's no conflicts. There may be some bugs, so in that case you will need to manually remove Poiyomi Shaders folder from your project, followed by going into the Menu Bar and clicking Poi -> Pro -> Download Update to open the UI. Click the button that says Download Poiyomi Pro and it will request you to authenticate with Patreon. If successful, it will begin the process!

Frequently Asked Questions

I have received errors in my project when attempting to use the new package. What do I do?

Please hop into our Discord Server and let us know! Software is not perfect, so there's always a possibility something may have gone unnoticed.

Does the script save my login info for future updates?

No. The script is intentionally designed to ensure you're an active Patreon subscriber in order to obtain updates.

The script doesn't automatically run when I install the package.

You can manually run the script by clicking Poi -> Pro -> Download Update in the Unity Menu Bar. Click the button that says Download Poiyomi Pro and it will begin the process as detailed in Step 3. of the setup instructions above.

New Website Available for Patreon Subscribers

· 2 min read
Poiyomi
Shader Developer

Patreon Subscribers, we have something special for you!

As of today, you can now download Poiyomi Pro from our new dedicated website. This will be the new place where you can obtain the latest versions of Poiyomi Pro without needing Discord.

Poiyomi Pro Website Preview Example preview of the Poiyomi Pro website when logged in. You'll also notice it's accompanied by an animated Marisa Kirisame , a character from the Touhou Project.

How To Use The New Website

To use the new website, visit pro.patreon.com and follow these simple instructions...

  1. Click the "Login" button on the header.
  2. Click "Continue with Patreon" when prompted and a pop-up window will appear.
    • If you don't see it, check with your Browser to see if a pop-up window was blocked.
  3. Login to your Patreon Account.
  4. Once Logged In, you will see a page asking to authorize access. Click "Allow".
  5. The pop-up window will close and you will be redirected back to the website.
  6. If you are subscribed to the $10+ Tier or above, you can now access the "Downloads" page! Go there to download the latest version of Poiyomi Pro.
  7. and that's it! Install Poiyomi Pro as per usual into your Unity Project.

There's also a little Easter Egg on the website (more like, a mini-game) that's playable in plain sight. Can you find it?

About Discord

From this point forward, you will still need to link your Patreon with your Discord Account in order to receive tech support on the Pro Shader. As always, linking your Patreon to your Discord will unlock a fancy role, some perks, and access to the #paid-shader channel where you can also download the same package from.

VCC Support Coming Soon!

This new website is the first steps in creating a VCC-compatible version of the Pro shader! Support for this is currently under development and should hopefully be available soon for all Patreons to use in the near future.

We hope you enjoy using the new website! As always, thank you for being a Patreon subscriber!

Why are Light Volumes cool?

· 6 min read
Teeh
Contributor

Hi, I'm Teeh. I recently started playing with VRC Light Volumes, and I have fallen in love. Let's explore a few of the foundations supporting VRC Light Volumes. This is absolutely not a tutorial and I'm not even going to touch on 90% of the cool stuff it can do.

For the most part, Volumes will replace Light Probe based lighting when it's available, so let's start there.

Probe Lighting

Probe Lighting

If you've ever set up a probe volume, you'll know that you (or whatever tool you're using) place something called a "probe" at each location in your scene that you want to store ambient lighting data for. Light probes measure diffuse environmental lighting, also known as irradiance, at a single point in your scene. It's important to understand that this measurement stores incoming light - it is up to the shader to run this through whatever shading function (typically some BRDF) to represent the target material's lighting characteristics. This lighting data is stored as a series of spherical harmonic coefficients in an array. At runtime, Renderers that are affected by probe lighting will have the CPU do a few things:

  • Find the four closest probes surrounding the renderer anchor point in a tetrahedron
    • If you have an 'Anchor Override' set it will use the transform of that object
    • If you don't, this defaults to the center of the bounding box for that mesh
  • Blend the influence of each probe based on the distance to the anchor
  • Ship that data off to the GPU as part of the draw call for that mesh

This happens for each dynamically lit mesh in your scene.

SHs Taking Ls

It's not inaccurate to say that Volumes store the exact same info as Probes, but that's not the whole story. They both store, instead of simple RGB color values, a set of Spherical Harmonic (SH) coefficients. Probes store up to 9 coefficients per RGB channel, which corresponds to L2 harmonics. Volumes only store 3 coefficients per RGB channel, which corresponds to L1 harmonics.

More harmonics let you encode the lighting at higher frequencies - effectively making them higher resolution. In layman's terms, more coefficients let you more sharply define environmental light, which for diffuse lighting luckily doesn't need to be super exact. There may still be a place for L2 Light Probes, especially considering how L1 harmonics need to be blurred (as in 'hanning window') a little to combat ringing artifacts. This is something I'll look more into, I'll share results if I find anything interesting. So far I think the benefits of lighting being volumetric with Volumes outweighs slightly increased lighting resolution with L2 Probes.

Spherical Harmonics

There are a few benefits to storing lighting in SH coefficients, as opposed to something like cubemaps: no projection stretching, no distortions when rotated (orthonormal basis vs world AABB basis), they're quick to do math on (e.g. blurring), they are super quick to use (shading with them ends up being a few dot products against the surface normal) and being as tiny as they are, they use way less memory bandwidth. These benefits come from working with lighting in frequency space, as opposed to something more immediately intuitive like a cubemap's position space.

If you want to expand your understanding of spherical harmonics I recommend reading Spherical Harmonics by PataBlog and Stupid SH Tricks by Peter Pike Sloan at Microsoft. The main point I want to drive here is that the 3D texture that Volumes bake down to are not simple RGB colors that you can sample directly.

So how does Volume lighting work?

Visualizing VRCLV Voxels I made a volume to store the light coming off of my little guy. You can't attach volumes to your avatar, this is just a demonstration.

So. You have:

  • A scene. In that scene is a
    • Volume that takes up some 3D space which is itself split into many
      • voxels which each store
        • SH coefficients for that position's environmental lighting
  • a mesh that's within the bounds of that 3D volume.

Instead of sampling a single point in 3D space and using that Probe to shade the entire mesh, we run a (fragment) shader on each pixel that:

  • Uses the pixel's world space position to sample the 3D volume
    • The 3D Texture sampled is an atlas of 3 3D Textures, so we need to tap it three times
      • Using a 3D texture gives us bilinear interpolation to smooth the lighting out for samples in between voxels.
  • Deliver the sampled SH coefficients to the shader.

VRCLV 3D Texture Atlas

This is an example of what a Light Volume Atlas can look like. First, all of the volumes in the scene are combined into an atlas (in this case there's a single volume) and that atlas is repeated 2 more times to store the additional SH coefficients.

No. Seriously. That's it. Light Volumes can be integrated into existing shaders so easily because the end product is a set of SH coefficients - just like with Light Probes!

Also notice how we didn't have to ask the CPU to do anything. The GPU already 'knows' the world space position of each pixel AND has the entirety of the Volume textures in VRAM, so it can do all that sampling itself. In theory we could skip all the light probe work being done on the CPU, but it's too closely integrated with the Built-In Rendering Pipeline for that juice to be worth the squeeze, also, very few worlds are going to have Volumes so you should maintain the ability to fall back to probes anyway.

Important differences

  • Probes can be placed arbitrarily in your scene. Volume voxels must be placed strictly on a grid.
  • Probe coefficients are stored in an array accessed by the CPU, volume coefficients are stored in a 3D texture accessed by the GPU.
  • Probes light meshes per-renderer based on an anchor sample position. Volumes light meshes per-pixel based on world-space position samples.

Goodbye

I haven't touched on a fraction of the cool stuff VRCLV does, and I'm tempted to make a tutorial or something on how to set up LV and use them in place of Unity's traditional lightmapping. Let me know what you think!

Introducing Poiyomi 9.2

· 3 min read
BluWizard
Lead Docs Author, Community Helper, Shader Contributor

Heya, BluWizard here! Just wanna hop in to give you some info on Poiyomi 9.2, a major update to the shader that has just released!

While most of the features haven't changed, this update has introduced native support for VRC Light Volumes, an excellent voxel-based Light Probes replacement for VRChat Worlds. Alongside that, are various amount of bug fixes and improvements! See the Changelog Blog for all the details.

VRC Light Volumes

What's so special about VRC Light Volumes is that it allows for more natural lighting to show on your Avatar, making for stellar appearances in photos. Here are just two examples of what this can look like on Sacred's Avatar...

Light Volume Example 1

Light Volume Example 2

Notice that in these images above, the light tubes are able to emit very evenly across the Body. Compared to before, it was only able to be an approximate.

Here's a comparison on DrBlackRat's Avatar. Pay attention to the differences between Poiyomi 9.2 (latest) vs. Poiyomi 9.1 (older version)...

Light Volumes vs. None Comparison

As you can see, the results can be very obvious! The Material appears more evenly illuminated from the environment compared to previously.

Since VRC Light Volumes was created since earlier this year, you should begin to notice more and more Worlds adopt this system. Adding support for VRC Light Probes can make the shader future-proof to newer Worlds that plan to take advantage of this new lighting system.

The best part of all this? You don't have to do anything to your Materials! It's automatically enabled by default. All you need to do is make sure to update to the latest version of Poiyomi Shaders and just simply set your Materials to use the latest version.

Vertex Options Reorganized

Let's quickly talk about another significant change introduced in 9.2. Those who have used Vertex Options, Vertex Glitching, and Vertex Colors should read this!

In the latest version, you may have noticed that those sections have gone missing from the Color & Normals category. This is intentional! We have reorganized them into a brand new category in the shader UI, under Vertex Options. It is located in-between AudioLink and Global Modifiers & Data section.

New Location of Vertex Options

Underneath this area, we have renamed those sections into simply, Basics & Fun, Glitching, and Vertex Colors respectfully. If you have used these features under the old names before, don't worry! All your existing configurations should transition over seamlessly when updating your Materials.

Why did we do this? Well, this is to make way for another upcoming vertex-based feature called LookAt, which is right now being tested in the Pro version of the shader. We'll talk about that sometime in the future.

Conclusion

We hope you enjoy these new improvements to Poiyomi Shaders! As always, feel free to shoot us a message in our Discord Server for any questions or comments. Also if you have any pictures of your Avatars using the newest version, we invite you to share them there in our #showcase and #in-game-pics channels!

Click here to see the Patch Notes

Poiyomi Toon 9.0.60 Update

· 5 min read
Teeh
Contributor

Hi! I'm Teeh. After a long wait, a new version of Poiyomi Shaders is finally ready to release! There's been a lot of bug fixes and new features added, so let me show you the highlights for Poiyomi Toon 9.0.60, and Poiyomi Pro 9.1.12.

See the video patch notes below for more information.

Major Changes

AMD Fixes

Some previously Pro-only AMD fixes are being rolled back into Toon. There's still work to be done, but we're not ignoring you guys! Keep an eye out for more details later on.

Unity 2019 Fixes

Compatibility with Unity 2019 has been fixed! This should now allow you to use the Shader for either ChilloutVR, Beat Saber, and VSeeFace (or other V-tubing software of your preference).

Bakery

We fixed issues with Emissive Materials on the Poiyomi World shader not appearing in Bakery, a third-party GPU Lightmapper.

This also includes the ability to preview the Emissive properties from Poiyomi World materials in Bakery as well.

Missing Locked Materials

If a Locked Material is missing for whatever reason, the UI will now indicate this and prompt you to unlock it. This should help alleviate issues with Materials unable to Unlock in cases where the generated OptimizedShaders files went missing or were accidentally deleted.

Major Shader Translator Upgrades

Last, but not least, is the Poiyomi Material Translator. The goal of this Tool is to easily translate Materials from any other Shader, including from older versions of Poiyomi, as accurate as possible. Shaders such as lilToon can be translated to Poiyomi Shaders easily, with all properties completely converted without any major differences. No more fiddling with MatCap masks and shading settings!

To use the new feature, a new context menu option was added in Unity. Right-Click on an Avatar or Mesh in the Hierarchy OR on a Material in your Files, and in the context menu, click Poiyomi -> Materials -> Translate to Poiyomi Toon to run the program. This will seamlessly convert the configuration of those Materials to appear properly in Poiyomi Shaders.

You can also have it make a Copy of the Material(s) with the converted properties. To use that, select Translate Copy to Poiyomi Toon from the same context menu instead. If there are multiple Materials, they will be organized automatically.

Full Changelog

  • Added new Documentation Links in the UI to the following sections (thanks @BluWizard10 for all the hard work on the Docs!)
    • Shading/Anisotropics
    • Shading/Backlight
    • Shading/LTCGI
    • Special FX/Depth FX
    • AudioLink
    • AudioLink/AL Spectrum
    • AudioLink/AL Volume Color
    • Global Modifiers & Data/Global Data & Masks/Global Mask
    • Global Modifiers & Data/UVs/Parallax Heightmapping
  • You can now translate from LilToon to Poiyomi. Right-Click your Avatar or any Material basically anywhere, then click Poiyomi -> Materials -> Translate to Poiyomi Toon.
    • The Translate to Poiyomi Toon function will translate the Materials in-place.
    • If you select Translate Copy to Poiyomi Toon, the program will create copies of the Materials and then translate them. Use this if you want to preserve the original Materials.
    • Pro Users: You can choose to Translate to Poiyomi Pro if you so wish.
  • Shader: Alpha Mask Blend Strength was internally named _AlphaMaskScale and had compatibility problems when converting from other Shaders to Poiyomi. It has been renamed to _AlphaMaskBlendStrength. If you were using this, the value will be reset to 1.0.
  • Shader: Added Mirrored UV Mode to Decals.
    • This helps control the visibility of Decals on models with overlapping UVs (or mirrored UVs). Set it to Flip on one side, or be on one side only.
  • Shader: Added Symmetry Mode to Decals.
    • If enabled, will put the Decal on both sides by dividing the UV down the center.
    • Works only on Models with perfect Symmetrized UVs.
  • Shader: Added Z Clip to Rendering, which commands the ZClip command in the Shader. ZClip on Unity Documentation
  • Shader: Added Color Space dropdown to various Color Adjust settings.
    • OKLab provides better and more accurate perceptive color changes. This can eliminate issues with noise and colors being washed out when adjusting the Hue.
    • HSV is the "legacy" method, reflecting how the Hue Shift behaved in 8.1 and older.
  • Fix: Fixed Alpha Offset being backwards when Alpha was inverted. It now functions the same way, inverted or not.
  • Fix: Grayscale for Cloth Shading now works as intended.
  • Fix: The first round of fixes for AMD computers have been implemented.
  • Fix: Improved compatibility with Unity 2019 all the way thru Unity 2022.
  • Fix: Fixed lightmapping code in Poiyomi World shaders, causing Emissive Materials to not work properly with Bakery.
  • UI: Added an Unlock Button to Locked Materials that have missing files, fixing an issue with Material properties being lost when the OptimizedShaders folder goes missing.
  • UI: Redesigned the Material UI Header. Example
    • Search is now shown as a Text field, instead of an Icon.
    • Presets is now a Button, instead of an Icon.
    • Both the Presets button and Rendering Presets dropdown are now aligned opposite of each other, underneath the Lock/Unlock button.
  • UI: ThryEditor updated to v2.56.5.

Some patch notes were lost because Poiyomi's Hard Drive failed. You may find some of them as Easter Eggs instead. Happy hunting!

Major Revamps to the Poiyomi Documentation

· 4 min read
BluWizard
Lead Docs Author, Community Helper, Shader Contributor

Greetings! My name is BluWizard. I've been one of the recent active contributors to the Poiyomi Shaders Documentation, bringing everything up-to-date with 9.0 and finishing up some areas that needed attention.

I would like to talk about some of the major updates that I'm bringing to the Documentation. These overhauls will help bring it more in line with our goals with the Poiyomi Shaders Documentation, as well as bring it more in-line with how similar Documentations organize their pages and helpful resources. We hope these updates will encourage more frequent usage of the Documentation, rather than just trying to search Discord for an answer.

Let's start of with the big one... A brand new Home Page!

Instead of providing just completion status, I made the Home Page look more presentable and professional. Not only it introduces what known features you can do with the Shader, but has two new Buttons that will redirect you where to Download & Install the shader, as well as a link to Join the Discord Server.

I have appended some of the relevant information back to the Introduction page, which will now act as the Docs Hub. It talks about how to navigate the Documentation, as well as our Completion Status. As for links to Download the Shader, it has been moved into an entirely dedicated page.

Speaking of, let's talk about the new Download & Install page!

This is going to be your new one-stop shop to learn how to Download, Install, and Update Poiyomi Shaders. Since we both maintain a classic Manual Unity Package version and a VCC Version, we now detail instructions on how to use either one. We list both Method 1. and Method 2. as the instructions.

We prefer that the users choose which method they wish to use when downloading and installing the Shader. While Method 1. Manual Unity Package is preferred, a growing number of users may have a better experience using Method 2. Creator Companion to install the Shader due to it's ease-of-use.

Regardless, whichever method you use is up to you, but keep in mind that the latest version of the Shader will always be available first via Discord before it's distributed on both GitHub, BOOTH, and in the VCC Repo. If you are a Poiyomi Pro user, they will exclusively be available via Discord as always. This is also mentioned on the page.

There are even more changes, down to the small details. Let's break down all the notable visual changes:

  • Overhauled the Home Page.
    • A more professional, presentable Home Page that gets right to the point and contains relevant information.
    • Added a new Logo.
    • Added Buttons that redirect to Download & Install and as the Discord Server.
  • Added Download & Install Page.
    • Two Methods with Instructions on how to install Poiyomi Shaders, either as a Unity Package or through the Creator Companion.
    • Download Links.
    • Info on the Pro Shader.
  • Improved SEO on various pages.
    • I have given many pages more descriptions and keywords for SEO (Search Engine Optimization), so that the Documentation and the website as a whole can appear clearly on Search Engines.
  • Fixed a lot of Image and Video Sizing to be more consistent.
    • For a while, this Documentation was not very mobile-friendly. I've implemented some changes to React JS that makes the embedded videos have more responsive width, regardless of display size. This eliminates an issue where the embedded videos would extend far beyond the width constrains on a Mobile Web Browser. By default, all Images and Videos will now be automatically responsive based on your browser's width, with some exceptions on certain Documentation entries.
  • Upgraded Docusaurus to v3.3.2.
    • Docusaurus v3.3.2 introduces major improvements, bug fixes, and new features for us to use in the near future.
    • React, MDX, and Node.js have been updated as a result of the Docusaurus v3 Upgrade.
    • The Light and Dark Theme will now automatically match the user's client by default.
  • Removed irrelevant information and old pages in favor of the new Download & Install page.
    • The Poiyomi VCC Repo Page is no longer necessary, as I've implemented a button in the Download & Install page for the VCC Version that directly opens the Creator Companion App, adding the Repository.
    • Redirects added to the website configuration to handle old links.

Conclusion

We are continuously working on improving the Documentation with as much information as possible in an easy-to-understand fashion. If you have any feedback, feel free to drop us a line in the Discord Server. Other than that, we hope you enjoy these new updates!

Poiyomi 9.0 Released

· 7 min read
Poiyomi
Shader Developer

I am very excited to announce that version 9.0 of Poiyomi Shaders is now fully available!

This major update contains a vast amount of new features and improvements to the shader. While some areas may look similar to how they were in 8.0, it's worth noting that some sections have significantly changed. I highly recommend you take the time to look them over.

Much of the existing Documentation pages are still relevant, with some notes if applicable. The pages will be updated accordingly to be more in-line with 9.0 in the coming weeks. Some pages have already been updated as well (thanks, BluWizard and Teeh!).

Let's break down the Major Changes:

  • Shader Variants
    • All older versions, including 7.3, 8.0, 8.1 and 8.2, have all been moved under .poiyomi/Old Versions.
      • This means the current main version of Poiyomi Shaders will be .poiyomi/Poiyomi Toon instead.
      • UNLOCK YOUR MATERIALS BEFORE UPGRADING to ensure you have an easy transition to the new naming scheme!
  • RGBA Color Masking
    • RGBA Color Masking has been completely redone from scratch. With this, a much better user interface and workflow is available for you to use.
      • Each Channel has more properties available now compared to before. To see what new areas do exactly, check the Documentation.
  • Matcaps
    • Introducing Gradient UV Mode.
      • This feature works very similarly to Iridescence for those upgrading to 9.0.
      • Use a Gradient Texture in the Matcap texture slot when using Gradient, or use the Thry Gradient Editor to make your own.
    • Increased Matcap Slots from 2 to 4.
    • Added AudioLink to Matcaps.
      • Adjust your Matcap Alpha, Emission, and Intensity with the music Band.
      • This feature was added to accomodate users switching over from using Iridescence.
  • Outlines
    • All Outlines features have been reintroduced to the main shader variant.
      • This means you no longer have to select a separate shader variant in order to use Outlines!
    • Added a new Outline Fixed Size Mode that basically makes Outlines look better at a closer range. This will be on by default on new Materials.
    • Added Color Adjust properties to Outlines.
    • Added more AudioLink settings to Outlines.
      • Enable Color to change the Color of your Outlines with the music Band.
  • Glitter / Sparkle
    • Glitter has received a major UI rework.
    • Added Layers to Glitter.
    • Added Random Rotation Speed Offset to Glitter.
    • Altered the Linear Emission version of Glitter.
    • Added a slider allowing Glitter to scale with Lighting.
      • This would make it sparkly in the light, and dark in the dark.
    • Added AudioLink to Glitter.
      • Play around with Max Brightness, Alpha Mod, Size Mod, Chrono Sparkle Speed, and Chrono Rotation Speed with music Band to create some incredible effects.
  • Iridescence
    • Iridescence has been deprecated in favor of Matcaps. Use Matcaps with Gradient UV Mode instead.
      • This was done because Matcaps can technically do the same thing as Iridescence with a few adjustments.
      • To accomodate users switching over, all AudioLink features have been ported over to Matcaps as well.
  • Rim Lighting
    • Reorganized everything. Same properies, better user experience.
    • Additionally, the Blend Mode property name was changed due to incompatibilities with lilToon naming. Check the Upgrade Guide in the Documentation to see what the default settings were set to.
  • LTCGI
    • Added experimental LTCGI support. Check the Documentation for more information.
      • This marks the first time it is available in the Free Shader version.

Shader and UI Changes:

  • General UI
    • Varous Elements in the Material UI have been redesigned to make things look better and easier to visually distinguish between other sections.
  • Color Adjust
    • Hue Shift is now using the human perception of color.
      • This means better stability of the Brightness and Saturation with your base color.
    • Added Color Grading.
  • Module Toggles
    • Module Toggles let you remove modules from your shader. Handy if you don't want to deal with all the things you don't use or want to be able to check boxes and see a little less cyan.
  • Rendering
    • Reorganized Rendering Options instead of being randomly ordered. The new order of appearance is now: Blending, Outline Blending, Stencil, and Outline Stencil.
  • Global Masks, Themes, UV Settings, and Post Processing are now organized under the Global Data and Masks Category.
  • Changed Min Brightness for Additive Lights to now function with the luminance value of the additive light rather than the direct RGB values.
    • For reference, "additive lights" are Point and Spot Lights.
  • Decals
    • Added Back Face and Front Face Masking.
  • Cubemap
    • Section rework, including better organization.
    • Added Blurring and Color Adjustment.
  • Reflections & Specular
    • Added Global Masking support.
    • Lit Fallback is now On by default to improve lighting in maps with no Reflection Probe at all.
  • Light Data
    • Added Mirror Vertex Lights (Non-Important) Checkbox to Light Data. This enables separate additive lighting to appear on your Avatar's Mirror Clone.
      • This is enabled by default.
    • Adjusted Vertex Lights so they're more in line with how Additive Lights function.
  • Early Z
    • Added Early Z option to almost every shader rather than having it be it's own shader.
      • To use Early Z, enable it under Rendering on your Material.
  • Grab Pass
    • Massive changes to how Grab Pass works in Poiyomi Shaders. It now allows for all features to be used on it with correct lighting for Opaque surface and Transparent shading.
    • Defaults have been changed so they function correctly.
  • AudioLink
    • Added animatable Overrides to the individual AudioLink Bands for debugging and custom AudioLink inputs.
  • Emissions
    • Added Saturation to Color Adjust.
    • Changed the name of the Hue Shift section to Color Adjust.
  • Vertex Options
    • Added a stupid sphere mode to vertex options because someone really wanted it.

Bug Fixes:

  • Fixed Clear Coat Global Mask Blending.
  • Fixed a bug where Materials de-select themselves after Locking and Unlocking.
  • Fixed a bunch of duplicate named things that was definitely not copy pasted and was forgotten to be changed.
  • Fixed duplicate sampler names.
  • Fixed Vertex Light issues in Shading and Stylized Specular.
  • Fixed Grab Pass blending at various transparencies.
  • Fixed a problem with additive lighting breaking when Point Light Passthrough was set to 0.
  • Corrected a problem with Packed Map behavior.
  • Fixed Object Position being set incorrectly.
    • It was set to 0,0,0 in World Space and is now correctly set tot he Model's position.
  • Fixed Glitter Color Alpha. It actually now does something.
  • Fixed Grab Pass on the Toon Grab Pass shader.
  • Fixed Export Checker throwing a Null Reference Exception.
  • Fixed Point Lights being too dark at longer ranges. They were recalculated to be more correct.
  • Fixed Light Data Maps not having RGBA Packers.
  • Fixed a script error in the Toon Shader.
  • Fixed some buggy UI in Rim Lighting.
  • Fixed an issue where Reset, Copy, and Pasting of sections were not handling the reference properties correctly.
  • Fixed various Shader Warnings.
    • Turns out that sometimes the Shader Warnings can actually crash the compiler!
  • Fixed a bunch of crashes.
  • Fixed an issue where Unlocked Shaders were included in the Upload when they weren't supposed to due to a failed Auto-Lock or other issue. It will now throw a callback to stop the Upload entirely if this situation is detected.
  • A bunch of other fixes that would take ages to document.

ThryEditor

  • Added isPlaying check to Avatar Preprocessor. This should prevent Locking in cases where preprocessing is called for in Editor Test Builds that are not being Uploaded.
  • Added Cross Shader Editor.
    • Use this Tool to edit multiple Poiyomi Materials, all at once.
      • Summon the panel by clicking Thry -> Cross Shader Editor from the Unity Menu.
  • Added organizers which are currently used in Geometric Dissolve and Multilayer Shading.
  • Added Decal Placement Tools, found in the Decal section.
  • Fixed Presets from not functioning or updating correctly.
  • VectorToSlidersDrawer negative support using np. If used all floats in the drawer declaration need to have either n or p in front of it to convert the parameter to a string. n will be converted to a negative float.
  • Fixed a null pointer exception involving the Shader Translator.
  • Various Fixes for Unity 2022.

Poiyomi Toon Shader Now Available via VCC

· 2 min read
Poiyomi
Shader Developer

2024-06-01: Updated with new links

When utilizing the Poiyomi Toon Shader through VCC, you have the option to set it up for your project. However, there are some essential considerations to keep in mind, and we'll provide a detailed guide to help you through the process.

Setup

To initiate the use of the Poiyomi Toon Shader via VCC, follow these steps to ensure a smooth setup:

  1. Check Existing Installations: Prior to proceeding, it's crucial to verify whether Poiyomi is already installed in your project. This step is essential to prevent conflicts or unexpected behavior.

  2. Adding the Shader to Repo Listing: If you have the latest VCC installed, follow these steps:

  • Go to the Downloads Page http://poiyomi.com/download.

  • Click "Add to VCC" on the instructions for Method 2.

  • Follow the prompts provided to add the shader to your VCC.

  1. Adding Packages to a Project: Within the VPM Interface, perform the following actions:
  • Select your project.

  • Find the "Selected Repos" dropdown.

  • Check "Poiyomi's VPM Repo."

  • Choose the package you wish to add and click the plus button.

Creator Companion VCC Image

If you manage to come accross any issues, don't be shy to join ✨ Poiyomi Shaders Discord ✨ and head to #shader-problems channel!