**1.4.2 "Embody fix"**
- `headControl` now starts with a **0.15 m** radius instead of 0.00 m: the head point gets slack so the character is not culled while the head is still on screen (Embody). The value is recorded in `AnchorPointSizes` on first run, is what **Reset sizes to default** returns to, and an explicit 0 on the head is still stored as a real override.
- The **Character points** list starts **folded** by default (`PointsFolded` now defaults to `true`); the folded title shows the number of enabled points.
- The **Force-disable ALL simulations** button now comes **before** the "What to disable" list, so the list reads as what the button turns off.
**1.4.1 "Anchor Points"**
- The **Character points** section in the Culling tab: the controls that build the visibility box can now be switched on and off individually. `hipControl`/`chestControl`/`headControl` stay enabled by default; every other controller the scene's characters offer (hands, feet and the rest) is listed and starts **disabled**. At least one point must stay enabled — the plugin refuses to uncheck the last one and logs why, and an empty `AnchorPoints` in the config falls back to the default three.
- Each point has an adjustable size (radius in metres, `AnchorPointSizes`) added around it when the box is built. Range 0–3 m, step 0.05 m. **Reset sizes to default** dropped all overrides (head was 0 at the time; from 1.4.2 its default is 0.15 m). Changes apply immediately and are written to the config after the hand stops moving.
- Hair controllers are no longer offered as character points: any name containing "hair" is filtered out of the panel list, dropped from `AnchorPoints` on config load and skipped when the box is built.
- The **Character points** list can be folded with the arrow next to the section title; the state is saved to `PointsFolded` and the folded title shows the number of enabled points.
- Panel language is switchable in one place only: the EN/RU button in the panel header. The duplicate English/Русский buttons were removed from the **Interface** tab.
- The panel is fully flat now: the default skin's gradient scrollbar (track, thumb, arrow buttons) and the gradient checkbox style are replaced with the panel's flat textures. The scrollbar styles are patched onto the global skin only while the panel draws and are restored right after, so other IMGUI windows in VaM are untouched.
**1.4.0 "Finally working"**
- Character body rendering is now understood correctly: the real body renderer in VaM with GPUTools is `DAZSkinWrap` (its own `draw` flag and its own `Graphics.DrawMesh`), not `DAZSkinV2`. The plugin now tracks `DAZSkinWrap` and switches it off with the "Skins" category, so skin culling actually removes the body and clothing render work. New `wraps=` field in the statistics line and a "Wraps" counter in the panel.
- All `DAZSkinV2` and `DAZSkinWrap` components of a character are now registered from the atom with `GetComponentsInChildren(inactive: true)`. The old transform walk visited only active objects and missed two of three live skins in the test scene.
- Character shadow culling fixed: shadows are read by the body renderer through `DAZMesh.castShadows`, while the plugin previously wrote only `DAZSkinV2.materialsShadowCastEnabled` of a *different* mesh instance. Both mechanisms are now switched off, and every distinct `DAZMesh` of the character (from skins and from wraps) is collected with its original value restored. An IL scan confirmed no VaM code writes `DAZMesh.castShadows`, so the plugin's value is never overwritten.
- Hair no longer casts the shadow of an off-screen character. GPUTools hair draws itself through `Graphics.DrawMesh`, and `HairRender.UpdateRenderer` writes `shadowCastingMode` back from the hair settings on every hair rebuild — so the shadow state is now re-asserted every frame while the character is hidden (a cheap drift check per renderer), covering renderers, `DAZMesh.castShadows`, `DAZHairMesh.castShadows` and `HairStripV2.enableDraw`.
- Shadow renderers are collected from the whole atom, not only from known components: hair renderers live outside `HairSettings` children and were silently missed before.
- The `DAZMesh` draw path of an off-screen character is suspended (`DAZMesh.renderSuspend`): `DAZMesh.LateUpdate → Draw → Graphics.DrawMesh` runs regardless of the `DAZSkinV2`/`DAZSkinWrap` draw flags. No VaM code writes that flag, so the suspension holds; it is re-asserted each frame and restored on return into frame, on scene change and on unload.
- Known limitation: on some scenes a copy of the body may still be drawn by an object outside the character atom (in the test scene a plugin holds such a copy). The scene-wide probe `SceneBodyRenderers` names it; culling such sources is out of scope for this release — everything the plugin does reach (skinning, wraps, clothing, hair, cloth, soft body, particles, light and character shadows) is switched off.
- New diagnostics, verbose only: `RenderState`/`RenderVis` (which component draws, how many renderers are shadow-listed and silenced, `DAZMesh` suspension counters), `casters=` (enabled shadow casters with owner names), `SceneBodyRenderers` (scene-wide search for body renderers).