1,238 Commits over 4,383 Days - 0.01cph!
some more tweaks to textures that don't need to ship 2k
vram 12.0MB -> 1.0MB
texture reduction pass - deployable, tools, food, component items:
71 textures touched, 38 resolutions brought down
an apple had a 2k ao map at runtime
vram 55.1MB -> 9.5MB
modular car wheel fix
left wheels swapped over to use wheel_b.fbx instead of flipping wheel_a.fbx, right side stays on wheel_a
no more mirrored wheels on 2, 3 or 4 module - fixes the flipped normals
cleared the leftover rotations on the wheels
https://files.facepunch.com/pilgrim/2026/August/25_19-17-ShadowyHerculesbeetle.png
same as attack heli - setup hab armour colliders properly for both client+server so they can be removed properly
added collision mesh for the frame
updted prefab
made chanegs to the attack heli colliders left, front and right panels so tht they can be toggled off when removed.
camera, obsidian knife, vampire stake texture reduction among others
11 maps 2048 -> 1024,
vram 24.8MB -> 6.2MB
weapon + tool texture further reduction pass where applicable
45 ao maps 1024/2048 -> 512,
reduced m15 worldmodel bc/nrm/sg 2048 -> 1024 (almost no visual difference for 3rd person)
vram 44.1mb -> 11.8mb
tuna and bean cans now drop open empty cans when eaten instead of unopened versions
empty version are lower in triangle count for LOD0 than the previous world models
https://files.facepunch.com/pilgrim/2026/August/25_10-09-GullibleBangeltiger.mp4
heavy fuse now has a world model
updated .item to properly reference it instead of using the burlap sack
dead log resource gib meshes and setup
isn't currently supported as nothing in the resource family gibs
optimised ao textures for vehicles, generic textures and misc items.
halved 2k -> 1k with almost zero visual difference, not enough to warrant the double res
328 MB -> 192 MB vram
optimised props ao textures as it was the same issue with 227 of them, most carrying sources far bigger than they ship at and storing a single channel as rgb.
resized to existing max cap 110 files
rgb -> 8-bit grey 183 files
halved 2k -> 1k 24 files
146.3 MB -> 96.3 MB vram
optimised deployable ao textures where applicable. 245 of them, most carrying sources far bigger than they ship at and storing a single channel as rgb.
resized to existing cap 126 files
rgb -> 8-bit grey 148 files
halved 2k -> 1k 47 files
186.6 MB -> 92.6 MB vram
ao is sampled from the green channel so rgb storage was never doing anything.
hab armour split off into chunks so they can break off individually.
when all chunks are gone, it leaves the frame of the armour.
re-exported hab armour and added armour chunks.
optimised weapon ao textures. 68 were oversized on disk and nearly all were storing a
single channel as rgb. no weapons ships above 1024 now.
max size 2048 -> 1024 (52 files)
on disk 4096/2048 -> 1024/512/256 (68 files)
bit depth rgb -> 8-bit grey (58 files)
vram 114.8 MB -> 28.6 MB
ao convention on weapons is half the albedo, so 1024 against the usual 2048 albedo.
80 already did this, we were just inconsistent about it. we could half again on a per asset basis depending on size of object.
optimised darts textures and max sizes. we were shipping the radiation dart at 4k on all textures.
RadiationDart_AO 4096 -> 512
RadiationDart_bc 4096 -> 1024
RadiationDart_mg 4096 -> 1024
RadiationDart_nrm 4096 -> 1024
42.7 MB → 2.17 MB VRAM
looking at other textures that are unnecessarily big too to optimise where applicable.
added new cactus decals by repurposing the wood decals looks much better
https://files.facepunch.com/pilgrim/2026/August/23_22-55-SomeCicada.mp4
speculative - added a collsiion mesh to sleeping bag to prevent dropped items from passing through it.
re-centered gib parts again
- hot_air_balloon: 67 of 67 parts had their origin outside the piece, now 0
- got rid of a load of self intersections that caused the self intersected faces to be discarded despite unity triangulating on import. It can't triangulate self intersecting faces.
Re-centred gib part origins on 8 deployables
Same problem as the hot air balloon armour last commit - gib part origins weren't central to their mesh, so pieces rotated about a point outside themselves and the physics was inaccurate. Re-exported the gib meshes and re-assigned the collider boxes. should be much more accurate gib physics now.
Also on some gibs, they had parts that were self intersecting and were being discarded. Fixed that.
- HotAirBalloon basket: 43 of 55 parts had their origin outside the piece, now 0
- refinery_b (refinery_large_deployed): 24 of 83, now 0
- windmill_main: 22 of 53, now 0
- box.wooden.large: 19 of 33, now 0
- fireplace: 19 of 53, now 0
- lift_shaft_top (elevator): 18 of 33, now 0 - worst part sat 1183x its own half-extent off centre
- tool_cupboard: 15 of 44, now 0
- cannon: 14 of 24, now 0
- component_box_wood: boxes re-fitted
Fixed gib collider overrides on 7 deployables
Box overrides had drifted from their gib meshes, so colliders didn't match their mesh and clipped through the floor. Some overrides had more whilst others had less gib parts.
- io.table: override list resynced 44 -> 29, boxes re-fitted (29 of 29 boxes were not a fit for their own mesh, now 6)
- HotAirBalloon_armor_T1: gib FBX re-exported, list 52 -> 51 - their origins weren't central to the mesh causing innacurate physics
- sculpture.ice: list extended 30 -> 33; the last 3 parts had been falling back to convex mesh colliders
- mannequin: boxes re-fitted (18 of 18 mismatched, now 0)
- chandelier, component.box.charcoal.large: boxes re-fitted
frankenstein table now has gibs - it was setup to have them but there was no gib mesh.
now breaks apart as expected.
removed ao from gibs on advanced lootbox and primitive lootbox variants.
ao looks great on the static asset but once destroyed the gibs looks nasty when they are in shadow. Now fixed.
merge from world models 2026
car radio world model
jungle ar world model optimisation
ice ak world model optimisation
chainsaw world model optimisation
car radio now has a proper world model
LOD 0 cheaper than burlap sack
fix to high external wall and gate collision mesh
removed gibbable from hv arrow, poison arrow, wood arrow and spear gun spear as they weren't used + causing an error for automated testing
dedicated world model for chainsaw
reduced highlight draw from 3->1 and model highlight was actually broken
ice ak world model optimisation
consolidated into one object, one LOD chain
LOD0 tris 13.8k -> 9.5k
highlight draws 5 -> 1
removed dead lod states in sunflower, rose, orchid world models
added and setup dedicated worldmodels for fire and bone arrow
reducing highlight draws
World model LOD fixes - 6 prefabs drawing every LOD at once
MilitaryFlamethrower, ak47u_jungle, scrap, crankshaft1/2/3 and stone had LODGroups with null or duplicated renderer refs, so every LOD drew at once regardless of distance.
LOD0 optimisation pass on these too: 47,280 -> 22,675 tris
world models where applicable combiend into single worldmodel mesh for simplicity and optimisation, reducing highlight draws when item is dropped:
flamethrower 4 → 1, jungle AK 3 → 1, crankshafts 3 → 1 each, scrap 2 → 1
advanced lootbox (the red toolbox loot crate) now has gibs when emptied/destroyed
Disable tangent import on all collision meshes
All collision meshes were calculating and storing tangents that collision geometry never uses.
Set tangentImportMode to None, removing around 33 MB of mesh data.
Import settings only - no mesh or reference changes.
fixed small shark .worldmodel weird setup
Normalise 257 collision mesh filenames from _col to _COL
Case-only rename for consistency with the other 2,557. GUIDs preserved, no path references, FBX contents untouched - no functional impact.
FBX contents and internal mesh names untouched.
fixed muzzle flash fx slight incorrect position on the muzzle brake
merge from attchement_lod_fixes
fixed ladder.worldmodel from having two conflicting lod groups causing console errors
fixed both corn and salvaged hammer having double lod renderers on their world model
update to propane tank .worldmodel
fix for random disappearing act in the lods
legacy furnace COL 350 triangles -> 240
well within the convex mesh collider threshold (255)
Wired the DM Tier2 Lootbox gibs to its own material
The crate already had gibs, but materialSource was unset so the pieces fell back to the shared WoodenCrate2 gib material and the tier 2 markings vanished as soon as it broke.
materialSource now points at its own body renderer, so the gibs keep Crate_2_DMtier2_dif.
Add gibs to the DM wooden loot crates
DM Construction Resources, DM Res, DM Medical and DM Food now break apart when emptied instead of vanishing.
All four use the same wooden loot crate model, so they share a single gib source (WoodenCrate1_GIBs).
Each prefab's own Gibbable points materialSource at its body renderer, so the gibs keep that crate's label material instead of the generic shared one.
scaleOverride is 0.8 to match the scaled prefab roots, so pieces spawn at the right size.