1,647 Commits over 4,414 Days - 0.02cph!
chery picking from mixing table optimsations
cherry picking from small stash improvements
cherry picking from gutter opts
cherry picking from binbag_pile and card table optimisations
Gutter cornices: combined each into one MeshLOD
renderers 30 > 3
LOD components 30 > 3
Parts cull at different distances (supports 15, caps 35, rail 75), so each state is a mesh of only what's still visible - 802/88/24 tris, matching the originals at every band. Still batches, all states under the vert cap.
time for bed
Abyss barrels: combined the seaweed into one mesh per barrel
Merged the seaweed clumps on both storage skins into a single mesh per LOD, driven by one MeshLOD (0/7, cull 15).
seaweed clumps 107 > 2 meshes
LOD components 109 > 4
renderers 115 > 10
prefab size 518kb > 121kb
Geometry and collision unchanged. Wind is preserved.
optimized poker table variants:
Merged every RendererLOD chain across the four static configs into one combined FBX each, driven by a single MeshLOD (1/10/25, cull 60).
- RendererLOD chains: 34 > 4 MeshLOD
- LOD components: 226 > 192
- renderers: 321 > 212
- GameObjects: 143 fewer
- LOD0 submesh draws: 49 > 14
- prefab size : 508kb > 122kb
Also cleared a dead LODGroup from _cardtable_base
optimised binbag pile - 41 renderers down to 1. There are 14 of these around the apartment complex alone.
it was a pile of 34 nested binbag prefabs plus 6 ground_junk, each carrying its own mesh lod and renderer batch, sat under a parent that had its own mesh lod on top. all 41 drew at once at close range
draw calls 41 > 1, mesh lod components 41 > 1 rendererlod, gameobjects 41 > 3
collision 34 mesh colliders -> 1 i dont t
optimised wooden storage box - LOD0 now under the batching vertex cap with no changes to skins
LOD0 999 verts, was 1,391 so it never batched inside 10m
the whole chain LOD0-3 now batches, around 30 to a draw call per band
optimised small stash and gave it a world model
removed the fraying geometry that carried a second material on LOD0/LOD1 tht was never displayed anyway.
submeshes LOD0/LOD1 2 > 1 now both draw in one call instead of two
converted to MeshLOD - also removed a duplicate Model component that had been sat on the root since 2019
new small_stash.worldmodel so you can see what you're dropping instead of burlap sack. LOD0 is cheaper than burlap sack.
Updated MissionStash, DynamicMissionStash and LogStash which embeded the same meshes and still had the old 2-slot material array against a now 1-submesh mesh.
converted those to MeshLOD as well
three more asset optimsations that were over the vertex cap
AshtrayB1_LOD0 1028 > 983 verts
matrix_display_tools_LOD1 1019 > 998 verts
emptybarrel_LOD1 1164 > 876 verts
ashtray now batches on its whole chain (LOD0-2)
tools display and empty barrel batch from LOD1 down
optimised bed - LOD1 now under the batching vertex cap
LOD1 998 verts, was over 1000 so it never batched
now batches 30 to a draw call in the LOD1 band
also fixed lod issue where the fold in the bed cover would disappear on LOD1 and reappear on LOD2
optimised large wooden box
LOD0 999 verts, was over 1000 previously so it never batched at close range
it can now batch around 30 to a draw call inside the 0-10m LOD0 band
tris LOD0 1,552 > 1,346, LOD1 474 > 366, LOD2 100 > 84
Mixing table LOD optimisation
Merged Glass01-08 + Water into the Table_LOD0/1/2 glass submesh
draw calls 10 > 2, FBX meshes 12 > 3, LOD components 10 > 1
much more simplified.
also fixed opacity on the water in the bucket being completely transparent for years
optimisations to the mixing table - need to figure one thing out first
attempt to optimise the three planters. noticed that they have 3 materials on last lod so baked small, large and triangle last LOD down to one 512 albedo and one material
soil now culls at 40m and hands off to the bake
also fixed 12 monument/static prefabs still on the pre-bake material arrays -will need checking over
lod2 draw calls 3 -> 1 per planter
https://files.facepunch.com/pilgrim/2026/August/26_17-21-OilyUrson.mp4
made windmill_main and lift_shaft_top gibs ReadWrite enabled
removed mesh collider from HAB armour frame and replaced with box colliders so it can work properly
merge from texture optimisations
ao rreduction & optimisation pass on some structure assets
they were shipping 2k ao textures, now resized but visually no difference.
11 ao maps touched, 9 were shipping at 2k
vram 25.3MB -> 2.2MB
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.
thumb_up
12
thumb_down
135
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.
thumb_up
9
thumb_down
114
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.