userPilgrimcancel
reporust_rebootcancel

1,287 Commits over 4,383 Days - 0.01cph!

Today
merge from main
Today
Planters: improved placement guide meshes - new low-poly guide meshes for large, small and triangle planters - all three were using their full LOD0 mesh as the deploy guide that was missing the soil now looks and feels way less jarring and much more satisfying https://files.facepunch.com/pilgrim/2026/August/31_23-29-IvoryMussaurus.mp4
Today
LOD pass on computer station + mixing table decor - computerstation.FBX re-exported with proper LOD meshes; computerstation.static LODGroup -> RendererLOD, deployed + apartmentcomplex variants updated for the new model - MixingTable.Decor: glassware/water existed twice - embedded invisible in the table LOD meshes and again as 9 separate LOD0-only renderers on top; re-exported as one clean 3-LOD mesh with the glass material live, 12 renderers -> 1, LODGroup -> MeshLOD
Today
LODGroup/RendererLOD -> MeshLOD conversion pass on vending machines, covered ch47/bradley props and tin can alarm: 129 -> 75 renderers, 23 -> 6 LODGroups, brings them into the LOD grid + occlusion culling - vendingmachine family x5: RendererLODs collapsed to MeshLODs (55 -> 33 renderers) now can occlusion cull - covered bradley/ch47 x6: LODGroups converted, wraps stay RendererLOD where materials demand it (66 -> 39 renderers); ch47_covered, ch47_covered_wrap + bradley_covered_wrap FBXs re-exported so LOD material order matches - tincan.alarm: split into frame + cans MeshLODs so the rattle anim survives (8 -> 2 renderers); worldmodel onto MeshLOD too
Today
9 alpha-less BC7 albedo/em maps -> DXT1, 3 also halved (retro cupboard ems, m16a2_02, loot barrel): saved ~28 MB VRAM, no alpha lost no visual quality difference
Today
Regenerated MaterialIndex.json - was dated Aug 2021, so Tools/Optimize/Find Material Optimzations had been reporting 5-year-old state. Fresh scan covers 9,055 materials and flags 164 with compression savings (84 unique textures, ~68 MB VRAM potential) for example m16a2 ao on high quality compression = 1.3mb, normal compression with no visual cost = 0.7mb First pass on the free wins: 15 alpha-less DXT5/BC7 textures -> DXT1, ~13 MB VRAM, no quality cost - m2bradley mainbody/armor: removed DXT5 standalone override (5.3 MB) - m16a2 AOs x3, flamethrower AO: HQ -> Normal compression (5.3 MB) - workbench upgrade AOs x2, apartment door mats AO, crate_2/gib/webbing AOs: HQ -> Normal compression (2.2 MB)
Today
fixed blowpipe world model material order so it can be converted to meshLOD
Yesterday
Animal AO caps: croc/stag/bears/panther/shark/wolf/chicken -> 1024/512, a further 17.5MB VRAM saved
Yesterday
Clothing AO pass: capped 57 maps 2048 -> 512/1024, ~120MB VRAM saved with no visual difference also hooked up Cocoknight legs/torso AO which was never bound to its materials
Yesterday
Medieval AK gem material tweak: fixed refraction scale 75cm -> 2cm, corundum IOR, proper transmittance - reads as gemstone instead of grey glass https://files.facepunch.com/pilgrim/2026/August/30_10-00-InsubstantialManta.mp4
Yesterday
Medieval AK worldmodel: baked 6 materials / 3 texture sets down to one 1024 atlas material 6 draws -> 1 per LOD; re-UV'd mesh, rebuilt LOD chain, gems baked opaque arguably looks better than before for the gems especially as i can't justify 6 materials just for a world model of this scale. https://files.facepunch.com/pilgrim/2026/August/30_09-27-CoralBighornedsheep.mp4
2 Days Ago
flamethrower world model optimisation combined the two parts into one mesh per LOD in engine, converted to a MeshLOD renderers 6 -> 1, highlight draws 2 -> 1, culls at 35m, triangles unchanged
2 Days Ago
assault rifle world model optimisation - combined the 4 part FBXs into one model and converted the LOD group to a MeshLOD - renderers 12 -> 1, highlight draws 4 -> 1, triangles unchanged, culls at 35m - combined the ak47u's 4 part FBXs and the medieval's rifle+mag into single models - converted the ak47u, medieval and jungle world models from LOD groups to MeshLODs - removed the medieval's 23.6k tri LOD0 - its chain is now 13k/5.3k/2.1k - renderers: ak47u 12 -> 1, medieval 8 -> 1, jungle 3 -> 1; highlight draws all down to 1
2 Days Ago
boat building station optimisation its 7 buoys were embedded pre-merge copies of the ocean wreck buoy optimisation i did on changeset 162514 - replaced their 280 seaweed/mussel renderers with the buoy merge's existing combined meshes combined the remaining seaweed clumps in the station and platform prefabs (6 -> 1 and 5 -> 1) with wind origins baked into UV2 none of the seaweed was ever batching at runtime renderers 340 -> 65, prefab 1.4mb -> 296kb, seaweed is now 9 draw calls instead of 263!
2 Days Ago
satellite crash remains optimisation combined the 32 loose debris pieces into a single mesh with a MeshLOD - shadows now turn off past 25m for these, and it culls at 100m (previously it drew at every distance) converted the dish from a LODGroup to a RendererLOD with the same switch distances, and zeroed the LOD child offsets so it collapses to a single renderer at runtime both the dish and debris now register as occludees, so terrain and buildings can occlusion cull them - the LODGroup never could renderers 44 -> 13, debris draw calls 32 -> 1
3 Days Ago
merge from main
3 Days Ago
slightly improved the quality of the vending machine texture & improved the cable faceting. Re-implemented the internal shadow box to fake the interior depth but this time merged it to the vending machine geometry, reducing a draw, and also allows me to change the culling mode on the vending machine material from 'off' to 'Back'. This means that the Vending machine no longer renders every triangle twice. This would have also affected the gibs too that inherit the same material.
3 Days Ago
some additonal settings to carry over
3 Days Ago
chinook locked crate optimisation crates + cage combined into one mesh with a single MeshLOD (1/5/15/25, cull 150) chainlink merged into one mesh renderers 16 > 9 LOD components 11 > 4 objects 48 > 40 draw calls 10 > 4 up close, 3 past 20m fence tris 1,000 > 10 tris at 25m 4,064 > 1,032
4 Days Ago
ocean wreck buoys - combined the seaweed and mussels on all three renderers 128 > 23 across the three LOD components 115 > 8 gameobjects 153 > 48 prefabs 482kb > 124kb
4 Days Ago
folding wicker beds B C D E - combined into one mesh each frame, fabric and pillow all share Folding_Wicker_Bed_A, so each bed combines into one mesh per LOD band with a single MeshLOD - every bed is one object now renderers 10 > 4 across the four LOD components 10 > 4 gameobjects 10 > 4 prefabs 44kb > 26kb tris at 18m 23,336 > 6,200 last lod under the vert cap on all four so they batch
4 Days Ago
gun display racks - merged weapons and hooks on all three. each rack was 10-12 renderers with a separate MeshLOD chain each. weapons combined into one mesh per LOD band, hooks into one, one MeshLOD each LOD components 32 -> 10 gameobjects 44 -> 19 draw calls 35 -> 20 colliders 32 -> 3 last LOD tris 15,282 -> 6,486
4 Days Ago
cherry picking from wooden box storage optimsation
4 Days Ago
cherry pick from bed optimisations
4 Days Ago
cherry pick from large wooden box
4 Days Ago
cherry pick from mixtable prt2
4 Days Ago
chery picking from mixing table optimsations
4 Days Ago
cherry picking from small stash improvements
4 Days Ago
cherry picking from gutter opts
4 Days Ago
cherry picking from binbag_pile and card table optimisations
4 Days Ago
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
4 Days Ago
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.
4 Days Ago
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
5 Days Ago
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
5 Days Ago
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
5 Days Ago
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
5 Days Ago
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
5 Days Ago
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
5 Days Ago
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
5 Days Ago
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
5 Days Ago
optimisations to the mixing table - need to figure one thing out first
6 Days Ago
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
6 Days Ago
made windmill_main and lift_shaft_top gibs ReadWrite enabled
6 Days Ago
removed mesh collider from HAB armour frame and replaced with box colliders so it can work properly
6 Days Ago
merge from texture optimisations
6 Days Ago
merge from gibs_fix
6 Days Ago
merge from main
6 Days Ago
merge from main
6 Days Ago
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
6 Days Ago
some more tweaks to textures that don't need to ship 2k vram 12.0MB -> 1.0MB