Meshes with Fixed Point Or Integer Attributes Cause Server-side World Validation to Fail
complete
error.mdl
Simply having a mesh with a vertex channel that is not Float32 or Float16 (or unorm8 for the color channel) causes server-side validation to fail (For a list of vertex attribute formats see https://docs.unity3d.com/2022.3/Documentation/ScriptReference/Rendering.VertexAttributeFormat.html). While these are unusual, certain optimization tools will use these for normal/tangent/uv1 to reduce vertex size, something that is especially important for mobile (for example see https://github.com/StressLevelZero/CustomStaticBatching). Integer formats are also important for some use-cases.
World with fixed-point mesh: https://vrchat.com/home/world/wrld_e9f594c3-f33f-4638-8df4-711afc6bce4e/info
Joining this world will send you back to your home, and print this to the log:
Error - [API] [2570, 403, Get, -1 https://api.vrchat.cloud/api/1/analysis/file_b25715ea-6d63-408a-be18-a279972580c0/102/security] Abandoning request, because - File forbidden
Error - World 'wrld_e9f594c3-f33f-4638-8df4-711afc6bce4e' did not pass initial checks and won't be downloaded: 10
Error - Error Downloading or Instantiating Custom Scene - Fixed-Point Mesh - 10
Steps to reproduce:
- Download any of the attached Mesh_* files and rename the file from the canny-generated hash to the original name plus .asset as the extension. Move one or more of these into the assets folder of a VRC world project.
1a. Alternatively, download/rename CreateNonStandardMeshes.cs into your project. Then run Create Debug Meshes->Create from the top bar. This will generate the meshes in your root Assets/ folder.
- Make a new scene with the VRC World template.
- Place a cube in the scene, and change the mesh filter's mesh to the Mesh_* mesh you copied in 1.
- Build and publish.
- Try to load the world and you will be kicked to your home. Checking the log reveals the map has failed validation
Log In
e
euan
complete
The checks have been adjusted so this use case works again, it may take up to a couple weeks for worlds which have failed due to this to be reprocessed. If there's a specific world which is currently failing the checks you want reprocessed sooner post the id here.
Checks like these were added long ago in response to malicious avatars with mesh setups that aren't possible causing issues of various forms (usually crashing). Certain validation is important for any asset bundle as unity doesn't validate everything as much as anyone would like and so it doesn't matter for checks like these if it's an avatar or world.
I appreciate the detail given in the report as well, it helped provide context around the lesser used setups of formats.
StormRel
tracked
°sky
how does this even happen.
more importantly, why do worlds need validation and why are they capable of failing?
Hackebein
> With that said, there could be some strange edge cases where worlds will fail checks when they shouldn’t. We’ve fixed most of these cases during the ongoing beta, but if you notice strange behavior, you should let us know.
Silent
Hackebein It's insane that we have to figure out which of these random checks is the source of the failure because the log message says nothing but "oops something broke!" to even file a bug report. They could just as easily have designed these checks to set a flag server-side and continue. Instead we have this stupid design where we both have an opaque and indecipherable checking infrastructure but the responsibility is also on us to figure out what's wrong with it.