GPU deformation — v26 Read this before creating a deformable or sculptable GPU mesh. Refresh the Game iframe after installing the v26 player; Run does not replace engine code. Check getGPUCapabilities().gpuPlasticDeformation and gpuMeshSculpting. Impact-driven plastic flow — experimental browser contact The plastic rest-shape update works, but Chrome impact tests exposed excessive sphere/sheet overlap (0.14–1.25 m in the tested 3.5–9 m drop range). One-sided contact avoids an underside-normal flip but does not fix the overlap. Do not use this spring-sheet contact as a blocking game surface yet. The saved Impact Deformation draft is a diagnostic comparison, not an accepted game example. Use the separately validated GPU beam for the diving-board experiment. Create an editable GPU mesh, enable its linear-elastic mesh physics, then register ordinary CS rigidbodies with addGPUCollider. Existing CS object mass, collider, interpolation, constraints and physics scripts remain unchanged. await createGPUMesh("sheet", "grid", { origin:{x:0,y:3,z:0}, size:{x:6,y:1,z:6}, resolution:12 }); await enableGPUMeshPhysics("sheet", { mass:.25, stiffness:100, damping:2, foundation:5, pinBoundary:true, pinnedVertices:[], contactSidedness:"oneSided", yieldStrain:.025, plasticCreep:5 }); await showGPUPhysicsStrain("sheet", .2); load("sphere", "ball", 0, 5, 0); await addGPUCollider("sheet", "ball"); yieldStrain and plasticCreep must both be positive. Leave both at zero for elastic-only motion. Above the yield threshold, GPU neighbor-edge strain updates the mesh's solver rest shape gradually; resetGPUPhysics restores the initial shape. showGPUPhysicsStrain colors the mesh by maximum neighbor-edge strain. This color is strain, not engineering stress in pascals. This is a fixed-topology, spring-network membrane with bounded plastic rest-state flow. It is useful for a small dentable sheet or panel demonstration. It is not continuum plasticity, a general soft-body material, fracture, tearing, cuts, fragment spawning, or dynamic topology. Keep meshes within the existing mesh physics limit (4,096 vertices / 8,192 triangles). The solver owns its buffers; do not run a custom WGSL program against a mesh while mesh physics owns it. GPU surface sculpting Make an editable GPU mesh, then add local soft brush strokes: await createGPUMesh("surface", "grid", { origin:{x:0,y:0,z:0}, size:{x:8,y:1,z:8}, resolution:32 }); await sculptGPUMesh("surface", {x:0,y:0,z:0}, .55, {radius:2.3}); await sculptGPUMesh("surface", {x:2,y:0,z:0}, -.3, { radius:1.4, direction:{x:0,y:1,z:0} }); center is a Unity-world point. amount is a signed distance: positive raises and negative lowers along the normalized direction (default up). radius sets the brush reach. Existing mesh mask weights limit each stroke. Strokes accumulate; refreshGPUMeshNormals runs after each stroke. resetGPUMesh restores the mesh and clears the brush offsets. Sculpting is rejected while GPU mesh physics owns the mesh. The brush edits the GPU surface only: it does not change the source object, terrain data, or PhysX collider. For collision, keep using the original collider or design a separate collision proxy; don't claim the sculpted surface is a matching physics boundary. Examples catalog/examples/gpu-deformation-impact.js — compare elastic and plastic impact, inspect GPU contacts/strain and reset both the surface and the stock CS sphere. catalog/examples/gpu-surface-sculpting.js — raise, carve, form a ridge, inspect current bounds, and restore the original mesh. Native verification (Unity 6.4, Metal) The editor test dropped the stock sphere onto a pinned GPU grid, checked finite displacement and that the sphere stayed above the sheet, removed the impact body, and checked exact rest reset. Observed maximum rest-shape displacement was 0.07732074 m; minimum sphere Y was 2.950044 m; maximum sphere speed was 5.689798 m/s. A second check confirmed local sculpt falloff and exact reset. These are synchronous native results; they did not predict the asynchronous Chrome contact failure described above. The settings-patch regression also passes: an omitted pin list and an empty pin list are equivalent; changing pin membership still requires recreation. Chrome/WebGPU, 2026-11-04: surface sculpting passed. An 8 m square, resolution-32 mesh measured Y=0..0.55 m after Raise hill, -0.45..0 after Carve basin, 0..0.38 m after Build ridge, and exactly 0..0 after Reset. Normals and the visible surface updated. These are geometry-only operations; the physics-boundary limitation above remains. Evidence: beam-release-20261104/tests/browser.json.