The fur is drawn from a CPU-baked unit-scale mesh whose instance matrix
carries the avatar's world scale, so the extrusion scaled fully 1:1 with
the player (hider 0.5 / hunter 1.5). That read as too-short fur on the
small hider and too-long on the big hunter, and the curvature droop was
sized off the raw unity_ObjectToWorld which doesn't carry the per-instance
scale in the RenderMeshInstanced path.
- FurShellRenderer pushes the avatar's lossyScale (_FurObjScale) plus a new
Fur Scale Influence (0..1, default 0.5) that blends the fur SIZE between
fully proportional (1) and a constant world length (0). The shader
pre-divides the object-space displacement so the net world length follows
effScale; curl droop and wind use the same effScale, keeping the curl
SHAPE invariant across avatar sizes and influence settings.
- The body's see-through X-ray reveal (forward half) is mirrored onto the
visible fur so strands glow WITH the reveal instead of hiding it under
opaque fur. FurShellRenderer pulls the live colour/pulse/flash from the
sibling MeshPainter (new getters), in phase with the body. A new X-Ray
Fur Strength (default 0.2) tames the per-shell accumulation, since the
body writes the glow once (opaque) but the fur stacks N transparent
shells that each composite it.
Co-Authored-By: Claude <noreply@anthropic.com>