Rays are cast outward from every body vertex to find vertices and faces fully enclosed by clothing (or, optionally, by the body itself) that can never be seen from outside.
- Set Body Mesh (ボディメッシュ) to your body object.
- In the Clothing Meshes (服メッシュ) list, click "+" to add a slot for each clothing object that covers the body.
- Adjust Samples (サンプル数), Offset Ratio (オフセット比率), Detection Mode (判定モード) and Safety Margin (安全余白) if needed. Safety Margin shrinks the deletion area by 1–3 steps inward from its edge, so holes are less likely to show when the avatar moves. Medium (中) is recommended for most cases.
- To protect areas that facial shape keys may reveal, such as the inside of the mouth or around the eyes, create a vertex group and set it as Excluded Vertex Group (除外頂点グループ).
- Run Select Hidden Faces (隠れた面を選択). Blender switches to Edit Mode and highlights the faces judged hidden. Nothing is deleted at this point. Check them visually and adjust the selection by hand if needed.
- When you're satisfied, run Delete Selected Faces (選択した面を削除) and confirm the dialog. A hidden, independent copy of the body is saved to the
AMT_Backups collection just before deletion.
Notes
- Always review before deleting, so you don't remove faces that only appear with shape keys (blinks, eye movement, mouth open) or with alternate outfits toggled in-game. Take extra care with Include Own Mesh as Occluder (自身のメッシュも遮蔽物に含める), which makes areas like the mouth interior more likely to be selected.
- Modifiers that change vertex count, such as Subdivision Surface, Mirror and Boolean, are temporarily disabled while the pose is evaluated. If the vertex count still doesn't match, you'll get a warning that the rest positions were used instead.
- Processing runs as a modal operation: progress is shown in the status bar and
Esc cancels. Avatars with many vertices × samples can take a while. - Meshes in excluded collections or hidden in the viewport can't be evaluated. Shared or linked bodies are analyzed only, never selected or deleted.
Python API (for scripts and AI agents)
From Python inside Blender, call the public function NuniAvatarToolkit.run_hidden_mesh. It accepts object names or Blender objects.
import NuniAvatarToolkit
result = NuniAvatarToolkit.run_hidden_mesh(
body="Body",
clothing=["Tops", "Jacket"],
action="SELECT", # ANALYZE / SELECT / DELETE
safety_margin="MEDIUM", # NONE / SMALL / MEDIUM / LARGE
)
print(result)
ANALYZE returns results without changing anything, and SELECT selects the faces after the safety margin is applied. DELETE deletes those same faces, always creating a body copy in AMT_Backups first. The return value is a JSON-serializable dict with face indices, counts and the backup name.