Issue
The
VRCHAT/Mobile/Particles/Additive
shader is broken on Oculus Quest, and appears to have been for some time.
Additionally, issue seemingly effects native VRCHAT elements
such as the avatar loading placeholder, which appears dark, and sometimes hardly visible.
Details
Shader exhibits the following issues on Quest:
  1. Particle textures are ignored, rendering instead as a solid square.
  2. Colors are inconsistent, or clamped to solid shades, such as red, green, or blue.
  3. Shader
    is not additive
    . Instead, it is multiplicative. For particle effects, this results in a solid, black splotch.
Testing
The avatar in both attached images are the same. The first image is taken on PC. The second is taken on Quest. Both are of the same effect.
The particle system simulates a fireball, with a
Color over Lifetime
applied, blending between ROYGBIV then back to RED, and the alpha set to blend from
255
at 100% to
0
at 0%.
The texture is the
unity-builtin-extras/Default-ParticleSystem
texture, Unity's default particle texture, which is a 64x64 RGBA texture containing a
white
sphere which fades to nothing at the edges.
Particles are set to move upward, at a slow pace, and fade with a short lifetime, relative to the avatar.
On PC (Image A)
the effect is correct, applying particles additively, resulting in a bright, colorful fireball.
On Quest (Image B)
the resulting effect is a
garbage mess
, rendering particles
only
in RGB (Not ROYGBIV), consistently solid (No alpha fade over lifetime),
multiplicative
despite
being the
additive
shader,
and without its texture
. This results in a large black splotch, with RGB squares around the edges.
Additional Testing
When switching to an uncached avatar, the default "placeholder" avatar while loading also experiences a similar effect, albeit to a less severe degree
— The "diamonds" on the hands appear dark, almost black at times, as if a multiplicative shader is applied, and are difficult to see in dark conditions. Image could not be taken due to Quest limitations preventing reflection and image capture of placeholder.