Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
EnhancedValheimVRM
Enhanced VRM avatar support for Valheim.
| Date uploaded | 12 hours ago |
| Version | 1.4.1 |
| Download link | Rawrtastic-EnhancedValheimVRM-1.4.1.zip |
| Downloads | 162 |
| Dependency string | Rawrtastic-EnhancedValheimVRM-1.4.1 |
This mod requires the following mods to function
denikson-BepInExPack_Valheim
BepInEx pack for Valheim. Preconfigured with the correct entry point for mods and preferred defaults for the community.
Preferred version: 5.4.2350README
EnhancedValheimVRM
Join our discord if you need help or just want to chill.
dont copy the settings from ValheimVRM over. Start from settings_Example.txt.example and only add back what you actually need. offsets work differently now and most avatars should need a lot less tuning.
Notes
If the model has MToon shaders you should not have ssao on, this is true even if you do not have MToon stuff enabled in the settings. You can set AttemptTextureFix to true, it will convert shaders to standard at game runtime.
How to install
install it with r2modman (or the thunderstore app), it pulls in BepInEx for you.
First time install
- run the game once. the mod makes a folder called EnhancedValheimVRM inside your valheim install folder, next to valheim.exe, and puts the example files in it.
- copy settings_Example.txt.example and name it after your character, E.G. settings_Midnight Nova.txt
- drop your vrm in the same folder with the same name, E.G. Midnight Nova.vrm
Settings File
The name of the character in the game needs to correspond to a VRM and settings file like so.
Character: Midnight Nova
Settings File: settings_Midnight Nova.txt
VRM: Midnight Nova.vrm
Default Settings and avatar for people you do not have custom stuff for.
Settings File: settings____Default.txt
VRM: ___Default.vrm
NOTE: settings____Default.txt has 4 underscores, and ___Default.vrm has 3.
Whats in the settings file
settings_Example.txt.example has everything with comments, but the short version.
- ModelScale, ModelBrightness, UseMToonShader, AttemptTextureFix, KeepAllBlendShapes, EnablePlayerFade, FixCameraHeight
the model stuff. AttemptTextureFix converts the textures to the games shader so it gets lit like everything else (and ssao works).
ShaderForTextureFix picks the game shader it converts to, player (default, the normal character shader) or creature (the animal shader).
TextureFixEmission (0 to 1) makes the avatar glow a bit with its own colors so it does not go black in shadow. only works with creature. 0.15 default. - RightHandItemPos / LeftHandItemPos / RightHandBackItemPos / LeftHandBackItemPos and the matching *Rot ones
nudge where weapons sit. Pos is in meters along the sockets axes and scales with the avatar height, Rot is euler degrees. - weapon lines, see the next section.
- SittingOnChairOffset
seated offset: X right, Y up, Z forward. Scales with avatar height. - HelmetVisible, HelmetScale, HelmetOffset
vanilla helmet on or off and where it sits. - ChestVisible, ShouldersVisible, UtilityVisible, LegsVisible
show the vanilla armor on top of the vrm. off by default because it usually looks wrong. - SpringBoneStiffness, SpringBoneGravityPower
multipliers on what the vrm author set. 1.0 = leave it alone. - SpringBoneImmobile, SpringBoneImmobileType
same as Immobile on a physbone. 0 to 1, how much of your movement the hair, fur, tail and so on ignore. turn it up if things get pulled way out of place when you run. 0 = off.
a name in front does one spring group only, SpringBoneImmobile=Neckfloof,1
the name is the spring bone comment from unity (a part of it is enough) or its root bone.
SpringBoneImmobileType is World (only ignores you moving around, the animation still moves them) or AllMotion (ignores the animation too).
does nothing on a spring group that has a center set in the vrm. - SpringBoneMaxAngle
same as the angle limit on a physbone. how many degrees hair, ears, tails and so on can swing away from where they rest. 0 = off, a vrm 1.0 avatar then keeps any limits it was exported with.
a name in front does one spring group only, SpringBoneMaxAngle=Ears,18, same names as SpringBoneImmobile. - InteractionDistanceScale
how far you can reach, small avatars might want a bit more. - AllowShare
false means other people do not get your avatar. you still get theirs.
Moving specific weapons
The Pos/Rot lines above move everything in a slot. If only one kind of weapon sits wrong you add a line for it, as many lines as you want.
The number is <left/right, up/down, forward/back> in meters (0.02 = 2cm), Rot is degrees.
all bows on your back, move up 2cm
BowPos=<0, 0.02, 0>
all bows on your back, tilt 15 degrees
BowRot=<0, 0, 15>
just one bow. put the items name in front of the number. this one wins over the plain Bow line for that bow.
BowPos=BowDraugrFang,<0, 0.03, 0>
weapon while you are holding it. put Hand in the key.
SwordHandPos=<0, -0.01, 0>
KnifeHandRot=<0, 10, 0>
AxeHandPos=AxeBlackMetal,<0.01, 0, 0>
rigged weapons like Skoll and Hati, the Berserkir axes and the fists ignore the lines above. each piece gets its own line, the item name then LeftHand, RightHand, LeftForeArm or RightForeArm, then Pos or Rot. Rot spins the piece where its held, Pos moves it along the hand socket like other weapons. only the Knucklechains have forearm pieces.
KnifeSkollAndHatiLeftHandPos=<0, 0.01, 0>
KnifeSkollAndHatiRightHandRot=<0, 0, 15>
FistGoldLeftForeArmRot=<0, 10, 0>
the words you can use in front of Pos/Rot/HandPos/HandRot:
Bow Crossbow Sword Knife Club Axe Spear Polearm Staff Shield Tool Pickaxe Torch Fist
Mace works for Club, Atgeir for Polearm, Hammer for Tool, Dagger for Knife.
Item names are in WEAPONS.md, sorted by class, together with the rigged weapons that get their own lines below.
Turn on /vrm settings auto on, save the file, and the weapon moves while you look at it.
Sizing is automatic, it measures the avatar head to feet and shoulder to shoulder and sizes the collider off that.
/vrm settings reload in chat reloads the file while in game. if the reload fails you keep the old avatar.
/vrm settings auto on watches the settings and outfit files and reloads whichever one you save, every second, so you can tune offsets live. /vrm settings auto off stops it.
Model/interaction scale must be > 0, brightness and spring values can not be negative, anything that doesnt parse fails the reload.
Outfits
Optional. Lets you turn meshes on and off and set blendshapes, and switch between sets in game.
The file is outfits_<vrm filename in lowercase>.txt next to the vrm. so Midnight.vrm -> outfits_midnight.txt
outfits_Example.txt.example shows the format.
- each [Section] is an outfit, name it whatever. exactly one needs Default=True, that is the one you spawn with.
- mesh:<renderer name>=True/False
- blendshape:<renderer name>:<blendshape name>=0 to 100
- names have to match the vrm exactly, spaces and caps included. Missing ones get logged, they dont break the avatar.
- a [Blendshapes] section at the bottom lists blendshapes to keep loaded, one per line.
Only blendshapes the vrm's expressions or the outfit file use get loaded, the rest are left empty so models with hundreds of them load faster and cause less of a frame spike.
KeepAllBlendShapes=true in the settings file loads all of them.
/vrm outfit generate writes a starting file with every mesh in it if you dont have one. it will not overwrite an existing file.
/vrm outfit blendshapes adds a [Blendshapes] section listing every blendshape the avatar has, commented out. remove the # on the ones you want kept.
Chat commands (F5 console works too, without the slash)
/vrm outfit list
/vrm outfit next
/vrm outfit set <name>
/vrm outfit reload
/vrm outfit generate
/vrm outfit blendshapes
/vrm mesh <name> on | off
/vrm toggle <mesh>
/vrm blend <blendshape> <0-100>
/vrm settings reload
/vrm settings auto on | off
toggle and blend are quick overrides, they dont touch the file and reset when you pick an outfit.
Outfit changes show up for other players right away, they only need to have your avatar already.
Avatar sharing
Other players get your avatar automatically, but ONLY on a dedicated server running this mod. Player hosted worlds dont share, local avatars still work there.
- install the same release on the dedicated server and on every client.
- the server needs a TCP port open. set it in the servers config under [Sharing] ServerPort (default 6067) and open that port on the box / in your hosting panel.
clients get the port from the server automatically, the ServerPort in a clients config is ignored. - face streams use the same port number on UDP. open 6067 as UDP too, or set [Sharing] FacePort to a different port number. TCP alone is not enough for faces.
valheim itself uses the game port and the one above it on UDP, so dont put the sharing port right next to the game port. - if your server is only reachable through steam relay, set ServerHost in the clients config to the servers real address.
- the first time somebody joins with a big avatar it takes a while. 6 Mbps upload default, change UploadMbps in the config if your connection can do more (max 100).
the server has its own per upload limit, DedicatedUploadMbps (default 60, hard max 100), and tells clients about it. you upload at whichever of the two is lower.
Config keys that matter (BepInEx/config/com.rawrtastic.plugins.enhancedvalheimvrm.cfg)
[General] EnableVrmSharing = true turn sharing off entirely on this machine
[Sharing] UploadMbps = 6 your upload rate, 1 to 100
[Sharing] DedicatedUploadMbps = 60 server only, per upload, 1 to 100. clients use the lower of this and their UploadMbps
[Sharing] ServerPort = 6067 server only
[Sharing] EnableServer = true server only
[Sharing] DedicatedDownloadMbps = 25 server only, per download
[Sharing] DedicatedDownloadSlots = 4 server only, downloads at once
[Sharing] MaxBundleMiB = 384 server only, biggest avatar it will accept
[Sharing] FacePort = 0 server only, UDP port for faces, 0 means ServerPort on UDP
[Face] Enabled = false listen for VMC and send your face
[Face] ReceiveFaceStreams = true show other players faces
[Face] VmcPort = 39539 where your tracker sends VMC, this pc only
[Face] SendRate = 30 face frames per second you send, 15 to 60
[Face] JitterBufferMs = 20 how late a face packet may be and still show, later ones are dropped. raise on a bad connection.
Face streams
Face streams let a tracker drive your avatars expressions in real time. You see them locally, and other players can see them too. Only the face is affected; head movement still comes from the game.
- Run a VMC compatible tracker. Send its output to
127.0.0.1usingVmcPort(127.0.0.1:39539). - Set
[Face] Enabled = truein your config. Your avatar will start following the tracker in game, in single player, and on dedicated servers that have the port open. - Other players can see your expressions when playing through a dedicated server with its UDP face port open. Avatar sharing has to be enabled for this to work.
- Your avatar needs the 52 ARKit blendshapes, with matching names. Lipsync also supports the 14 visemes (
PP,FF,TH,DD,kk,CH,SS,nn,RR,aa,E,ih,oh, andou), presets such asblink, andhappyare left alone, missing blendshapes are skipped. - Set
ReceiveFaceStreams = falseif you do not want to receive or process other players' expressions. [General] LogLevel = Debugin the config logs every step of the face stream if it is not showing up.
Downloaded avatars are cached in EnhancedValheimVRM/Shared, the server keeps them in EnhancedValheimVRM/Server. Delete those to force a redownload. If you put someones vrm and settings file in your folder yourself, that is used instead of the shared one.
Usefull Info
- If you have a shader compile error you probably need to use an older shader bundle.
the current bundle should work, but JIC ive included the previous and old ones still
Its in General settings. ShaderBundle=<old,previous,current>. Note that this will affect all models. - if the mod says sharing is unavailable because the server did not answer, the server and clients are on different versions. update all of them and restart.
Official Sources
- Rawrtastic: https://rawrtastic.com/mods
- GitHub: https://github.com/aMidnightNova/EnhancedValheimVRM
- Thunderstore: https://thunderstore.io/c/valheim/p/Rawrtastic/EnhancedValheimVRM/
CHANGELOG
Changelog
1.4.1
fixed
- some vrm 1.0 avatars failed to load
- Instances where AttemptTextureFix did nothing on your own vrm 1.0 avatar
changed
- The mod no longer uses the MIT Licence. Instead it uses RML-1.0
1.4.0
new features
- SpringBoneImmobile and SpringBoneImmobileType, same as Immobile on a physbone, for the whole avatar or one spring group
- SpringBoneMaxAngle, same as the angle limit on a physbone, works on vrm 0.x and 1.0 avatars
- vrm 1.0 avatars exported with spring angle limits now use them
- ShaderBundle=previous brings back the last versions shaders if the new ones give you trouble
changed
- updated UniVRM to 0.131.2 for the unity 6 version of valheim
- a big avatars collision is never bigger than a normal players, so it fits wherever a player fits
- no longer ships Unity.Burst and Unity.Mathematics, the game has its own
- FastSpringBone and the VRMShaders dlls are gone from UniVRM, manual installs can delete them from valheim_Data/Managed
fixed
- hair, tail and ear physics missing on vrm 1.0 avatars
- avatars with EnablePlayerFade on disappeared much closer than normal players
- arrows and magic came out at the wrong height on small and big avatars
1.3.1
fixed
- in some cases the name of a previous created character saved to a newly created character casuing settings reload to swap the older character.
- some avatars showed white or missing textures for other players
- some avatars could get stuck walking into half walls
1.3.0
fixed
- some shared avatars failed to load images, and didnt load for other players
- avatar sharing not starting unless ServerHost was set by hand
new features
- players on a different version than the server get turned away with a popup showing both versions
1.2.0
fixed
- instanes where vrm avatars could fail to load
- some models that had differnt scales could have giant weapons and / or left them unable to move
- some avatars failed with "VRM cache import failed" when a material only had one half of its metallic and occlusion map, they now load with the half that is there
- big frame spike while an avatar loads, mostly on models with lots of blendshapes
- dedicated servers logged a block of HarmonyX errors at startup
- the vrm collider was too small and didn't cover the head
- vrm avatars couldn't step onto things the normal character can
- with player fade off, held weapons vanished when the camera got close
- the forge hammer and hip lantern couldn't find where to attach on vrm avatars
- lanterns hung far below the hand on scaled avatars
- lanterns trailed behind the avatar while walking, running, jumping or rolling
new features
- face streams: a VMC tracker drives your avatar's face and other players see it through the server
- rigged dual wield weapons like Skoll and Hati, the Berserkir axes and fists can have each hand and forearm piece moved and rotated on its own, see WEAPONS.md
- only the blendshapes an avatar uses get loaded, with a setting and an outfit file section to keep more
/vrm mesh <name> on | off,/vrm outfit blendshapes